Name: series-workflowt4hv5 Phase: Running StartedAt: 2026-08-05 23:19:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[0] Phase: Succeeded StartedAt: 2026-08-05 23:19:56 +0000 UTC FinishedAt: 2026-08-05 23:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 23:19:56 +0000 UTC FinishedAt: 2026-08-05 23:39:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MIGRATION" ], "series_id": "2e7ea268-282a-4703-bca9-9196f95dd88d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_pages", "migrate_device_pages", "migrate_device_range", "migrate_device_pfns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xuaW5kZXggODkyYjMyNWZhOTliOC4uNmFlOGM5YWEzNmNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICAqIENvcHlyaWdodCDCqSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWZlbmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEzLDI3IEBAXG4gI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9wYWdlbWFwX3V0aWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2RybS9kcm1fcHJpbnQuaFx1MDAzZVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTlxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuJiM0MztzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG1pZ3JhdGVfdG9fcmFtX2ZhdWx0X2luamVjdCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGb3JjZSBhIGhpZ2hlci1vcmRlciBkZXN0aW5hdGlvbiBmb2xpbyBhbGxvY2F0aW9uIHRvIGZhaWwgaW5cbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCksIGV4ZXJjaXNpbmcgdGhlIG9yZGVyLTAgZmFsbGJhY2tcbiYjNDM7ICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuJiM0MzsgKiBoYXZpbmcgdG8gZHJpdmUgdGhlIHN5c3RlbSBpbnRvIGFjdHVhbCBtZW1vcnkgcHJlc3N1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaG91bGRfZmFpbChcdTAwMjZtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QsIDEpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBET0M6IE92ZXJ2aWV3XG4gICpcbkBAIC0zODMsNiAmIzQzOzQwNSw1OCBAQCBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxuJiM0MzsgKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxuJiM0MzsgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbiYjNDM7ICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbiYjNDM7ICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheXNcbiYjNDM7ICpcbiYjNDM7ICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uXG4mIzQzOyAqXG4mIzQzOyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXG4mIzQzOyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxuJiM0MzsgKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcbiYjNDM7ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cbiYjNDM7ICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXG4mIzQzOyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGUgc291cmNlIGZvbGlvIGl0c2VsZiBpcyBvbmx5IHNwbGl0IGxhdGVyLCBieVxuJiM0MzsgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG4mIzQzOyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmRzdF9tcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19tcGZuW2ldKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGosIG5yO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcGFnZSkge1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XHRcdG5yID0gTlJfUEFHRVMob3JkZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChvcmRlciBcdTAwMjZcdTAwMjYgIShkc3RfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XG4mIzQzO1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5yIFx1MDAyNlx1MDAyNiBpICYjNDM7IGogXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0cGFnZXNbaSAmIzQzOyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYWdlc1tpXSA9IHBhZ2U7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aSAmIzQzOz0gbnI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoKSAtIFVubWFwIHBhZ2VzIHByZXZpb3VzbHkgbWFwcGVkIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxuICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZFxuQEAgLTg3NSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKnNyY19wYWdlO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0hJR0hVU0VSO1xuIFxuIFx0XHRpZiAoIShzcmNfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTg5MSwxMSAmIzQzOzk2Niw1MyBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbiBcbiBcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7XG4gXG4tXHRcdC8qIFRPRE86IFN1cHBvcnQgZmFsbGJhY2sgdG8gc2luZ2xlIHBhZ2VzIGlmIFRIUCBhbGxvY2F0aW9uIGZhaWxzICovXG4tXHRcdGlmICh2YXMpXG4tXHRcdFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oR0ZQX0hJR0hVU0VSLCBvcmRlciwgdmFzLCBhZGRyKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxuJiM0MztcdFx0ICogcGFnZSwgUE1EIGFsaWduZWQgYW5kIGZsYWdnZWQgTUlHUkFURV9QRk5fQ09NUE9VTkQ6IGFueXRoaW5nXG4mIzQzO1x0XHQgKiBlbHNlIGlzIHNwbGl0IGJlZm9yZSBpdCByZWFjaGVzIHVzLCBlaXRoZXIgYnlcbiYjNDM7XHRcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcbiYjNDM7XHRcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKS4gQm90aCB0aGUgb3JkZXItMCBmYWxsYmFjayBiZWxvdyBhbmRcbiYjNDM7XHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuJiM0MztcdFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG9yZGVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxuJiM0MztcdFx0XHQgICAgICAhKHNyY19tcGZuW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob3JkZXIpXG4mIzQzO1x0XHRcdGdmcCB8PSBfX0dGUF9OT1dBUk47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbiYjNDM7XHRcdFx0Zm9saW8gPSBOVUxMO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFzKVxuJiM0MztcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xuIFx0XHRlbHNlXG4tXHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTtcbiYjNDM7XHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhnZnAsIG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiBvcmRlcikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIaWdoZXItb3JkZXIgYWxsb2NhdGlvbiBmYWlsZWQsIGZhbGwgYmFjayB0b1xuJiM0MztcdFx0XHQgKiBvcmRlci0wIGFsbG9jYXRpb25zIGZvciB0aGUgZW50aXJlIHJhbmdlIGNvdmVyZWRcbiYjNDM7XHRcdFx0ICogYnkgdGhlIG9yaWdpbmFsIGhpZ2hlci1vcmRlciBhbGxvY2F0aW9uLCB3aXRob3V0XG4mIzQzO1x0XHRcdCAqIHNldHRpbmcgTUlHUkFURV9QRk5fQ09NUE9VTkQsIHVudGlsIHdlIG1vdmUgcGFzdFxuJiM0MztcdFx0XHQgKiB0aGF0IHJhbmdlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBuciA9IE5SX1BBR0VTKG9yZGVyKTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBqO1xuJiM0MztcbiYjNDM7XHRcdFx0Z2ZwIFx1MDAyNj0gfl9fR0ZQX05PV0FSTjtcbiYjNDM7XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRmb2xpbyA9IHZhcyA/XG4mIzQzO1x0XHRcdFx0XHR2bWFfYWxsb2NfZm9saW8oZ2ZwLCAwLCB2YXMsIGFkZHIpIDpcbiYjNDM7XHRcdFx0XHRcdGZvbGlvX2FsbG9jKGdmcCwgMCk7XG4mIzQzO1x0XHRcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZnJlZV9wYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0cGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuJiM0MztcdFx0XHRcdG1wZm5baV0gPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihwYWdlKSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuQEAgLTk0MCwxMSAmIzQzOzEwNTcsMTEgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRnb3RvIG5leHRfcHV0O1xuIFxuJiM0MztcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XG4gXHRcdHB1dF9wYWdlKHBhZ2UpO1xuIFx0XHRtcGZuW2ldID0gMDtcbiBcbi1cdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbi1cbiBuZXh0X3B1dDpcbiBcdFx0aSAmIzQzOz0gTlJfUEFHRVMob3JkZXIpO1xuIFx0fVxuQEAgLTExMjAsNyAmIzQzOzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuIFx0dW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0O1xuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50IHJldHJ5X2NvdW50ID0gMjtcbiBcbiBcdG5wYWdlcyA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5AQCAtMTE2MCwyNyAmIzQzOzEyNzcsMTkgQEAgaW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbmFsaXplO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xuLVxuLVx0XHRwYWdlc1tpXSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMocGFnZXMsIHNyYywgZHN0LCBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2VkZXYsIHBhZ2VtYXBfYWRkciwgZHN0LCBucGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UsIFx1MDAyNnN0YXRlKTtcbiBcdGlmIChlcnIpXG4gXHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcbiBcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xuIFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcbi1cdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFLCBcdTAwMjZzdGF0ZSk7XG4gXG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbkBAIC0xMjM1LDcgJiM0MzsxMzQ0LDcgQEAgc3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0emRkID0gZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHBhZ2UpO1xuIFx0aWYgKHRpbWVfYmVmb3JlNjQoZ2V0X2ppZmZpZXNfNjQoKSwgemRkLVx1MDAzZWRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZXRpbWVzbGljZV9leHBpcmF0aW9uKSlcbkBAIC0xMjkwLDI5ICYjNDM7MTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMocGFnZXMsIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4tXHRpZiAoZXJyKVxuLVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbi1cdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuLVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gXHRpZiAoZGV2KVxuIFx0XHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcbiBcdFx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xuJiM0MztcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuJiM0MztcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFx1MDAyNm1pZ3JhdGUpO1xuIGVycl9mcmVlOlxuIFx0a3ZmcmVlKGJ1Zik7XG4gZXJyX291dDpcbkBAIC0xNDc2LDYgJiM0MzsxNTc4LDE2IEBAIHZvaWQgZHJtX3BhZ2VtYXBfZGVzdHJveShzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBib29sIGlzX2F0b21pY19vcl9yZWNsYWltXG4gXHRcdGtmcmVlKGRwYWdlbWFwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRybV9wYWdlbWFwX21vZHVsZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKVxuJiM0MztcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXCYjMzQ7ZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0XCYjMzQ7LCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2luaXQoZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9leGl0KHZvaWQpXG4ge1xuIFx0Zmx1c2hfd29yayhcdTAwMjZkcm1fcGFnZW1hcF93b3JrKTtcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggOTA4ZDJkNGVjNDNhYy4uYWUxN2JkNTE2ZDI0OCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC04OTksMjIgJiM0Mzs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkciwgUFZNV19TWU5DIHwgUFZNV19NSUdSQVRJT04pO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiYjNDM7XHRcdGlmIChwdm13LnB0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiYjNDM7XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYVxuJiM0MztcdFx0ICogbWlncmF0aW9uIGVudHJ5LCBzbyBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZCgpIGNyZWF0ZXMgUFRFXG4mIzQzO1x0XHQgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50XG4mIzQzO1x0XHQgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvXG4mIzQzO1x0XHQgKiBzdG9wIHRoZSB3YWxrIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBtaWdyYXRlX2RldmljZV91bm1hcCgpIHVubWFwcyB3aXRoIHRyeV90b19taWdyYXRlKGZvbGlvLCAwKSwgaS5lLiB3aXRob3V0XG4mIzQzOyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlclxuJiM0MzsgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxuJiM0MzsgKiBvZiB0aGVtLiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIGJlbG93IGRvZXMgbm90IGNhcmUsIGl0IG9ubHkgbG9va3MgYXQgdGhlXG4mIzQzOyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkXG4mIzQzOyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cbiYjNDM7ICogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgdHJpcHMgb3ZlciB0aGF0IGluIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4mIzQzO1x0XHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG8gbm90IHBhc3MgLmFub25fbG9jazogZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKCkgcmVxdWlyZXNcbiYjNDM7XHQgKiBmb2xpb19tYXBwZWQoKSwgYW5kIEBmb2xpbyBpcyBhbHJlYWR5IGZ1bGx5IHVubWFwcGVkIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1hcF93YWxrKGZvbGlvLCBcdTAwMjZyd2MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGlkeCxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgZmF1bHRfZm9saW87XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4tXHQgKiB0YWtlIGEgcmVmZXJlbmNlLCBzaW5jZSBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgd2l0aCBmcmVlemUgPSB0cnVlXG4tXHQgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLlxuJiM0MztcdCAqIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncygpIHdhbGtzIHRoZSBybWFwLCBhbmRcbiYjNDM7XHQgKiBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgemFwcyByYXRoZXIgdGhhbiBkZW1vdGVzIGEgUE1EIGluIGEgVk1BIHRoYXRcbiYjNDM7XHQgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlXG4mIzQzO1x0ICogVk1BIHR5cGUsIHNvIGEgZmlsZSBUSFAgY2FuIHJlYWNoIGhlcmU7IHRoZSByZXN0IG9mIHRoZSBtaWdyYXRlX3ZtYSgpXG4mIzQzO1x0ICogbWFjaGluZXJ5IG9ubHkgc3VwcG9ydHMgYW5vbnltb3VzIG1lbW9yeSBhbnl3YXkuXG4gXHQgKi9cbi1cdGZvbGlvX2dldChmb2xpbyk7XG4tXHRzcGxpdF9odWdlX3BtZF9hZGRyZXNzKG1pZ3JhdGUtXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIENQVSBmYXVsdCBvbiBhIGRldmljZSBwcml2YXRlIFBNRCBob2xkcyBhbiBleHRyYSByZWZlcmVuY2Ugb24gdGhlXG4mIzQzO1x0ICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKClcbiYjNDM7XHQgKiBvbmx5IHRvbGVyYXRlcyBhIHNpbmdsZSBjYWxsZXIgcmVmZXJlbmNlLCBzbyB0aGUgc3BsaXQgd291bGQgYWx3YXlzXG4mIzQzO1x0ICogZmFpbCB3aXRoIC1FQUdBSU4gd2hpbGUgdGhpcyBmYXVsdCByZWZlcmVuY2UgaXMgaGVsZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkgZGVyaXZlcyB0aGUgZmF1bHQgcGFnZSBmcm9tIHRoZSBQTURcbiYjNDM7XHQgKiBlbnRyeSwgc28gaXQgaXMgYWx3YXlzIHRoZSBoZWFkIHBhZ2Ugb2YgQGZvbGlvLCBhbmQgdGhlcmVmb3JlIGFsd2F5c1xuJiM0MztcdCAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wXG4mIzQzO1x0ICogdGhlIHJlZmVyZW5jZSBhY3Jvc3MgdGhlIHNwbGl0IGFuZCByZS10YWtlIGl0IG9uIHRoZSBoZWFkIGZvbGlvXG4mIzQzO1x0ICogYWZ0ZXJ3YXJkcywgbGVhdmluZyB0aGUgcmVmZXJlbmNlIGV4YWN0bHkgd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdG8gYmVcbiYjNDM7XHQgKiByZWxlYXNlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxuJiM0MztcdCAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdHBhZ2VfZm9saW8obWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKSA9PSBmb2xpbztcbiYjNDM7XG4mIzQzO1x0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZhdWx0X2ZvbGlvKVxuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbiYjNDM7XHRpZiAoZmF1bHRfZm9saW8pXG4mIzQzO1x0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRtaWdyYXRlLVx1MDAzZXNyY1tpZHhdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuQEAgLTkzNSw3ICYjNDM7MTAxNyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTExMDMsNyAmIzQzOzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdGJvb2wgbm90aWZpZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpuZXdwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpXSk7XG5AQCAtMTE3NywxMiAmIzQzOzEyNTgsMTggQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0bnIgPSAxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbyk7XG4tXHRcdFx0XHRhZGRyID0gbWlncmF0ZS1cdTAwM2VzdGFydCAmIzQzOyBpICogUEFHRV9TSVpFO1xuLVx0XHRcdFx0aWYgKG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKG1pZ3JhdGUsIGksIGFkZHIsIGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+KE1JR1JBVEVfUEZOX01JR1JBVEUgfFxuIFx0XHRcdFx0XHRcdFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIHJlc2V0IG5yIHNvIHRoYXQgb25seSBmaXJzdCBhZnRlci1zcGxpdCBmb2xpb1xuJiM0MztcdFx0XHRcdCAqIGlzIHByb2Nlc3NlZCBiZWxvd1xuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XG4mIzQzO1x0XHRcdFx0bnIgPSAxO1xuIFx0XHRcdH0gZWxzZSBpZiAoKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdChkc3RfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0IShzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XG5AQCAtMTIyMiw2ICYjNDM7MTMwOSwxMiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19wZm5zW2kmIzQzO2pdKSk7XG4gXHRcdFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaSYjNDM7al0pKTtcbiBcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuJiM0MztcdFx0XHQgKiBjYWNoZS4gUmVmcmVzaCB0aGUgc2F2ZWQgbWFwcGluZyBiZWZvcmUgbWlncmF0aW9uLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuJiM0MztcbiBcdFx0XHRyID0gZm9saW9fbWlncmF0ZV9tYXBwaW5nKG1hcHBpbmcsIG5ld2ZvbGlvLCBmb2xpbywgZXh0cmFfY250KTtcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XG5AQCAtMTQwMiw3ICYjNDM7MTQ5NSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICYjNDM7IGopIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KVxuIFx0XHRcdFx0c3JjX3BmbnNbaSYjNDM7al0gPSAwO1xuIFx0XHRcdGkgJiM0Mzs9IGogLSAxO1xuIFx0XHRcdHBmbiAmIzQzOz0gaiAtIDE7XG5AQCAtMTQzNiw3ICYjNDM7MTUyOSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICYjNDM7IGopIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KVxuIFx0XHRcdFx0c3JjX3BmbnNbaSYjNDM7al0gPSAwO1xuIFx0XHRcdGkgJiM0Mzs9IGogLSAxO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCmluZGV4IDg5MmIzMjVmYTk5YjguLjZhZThjOWFhMzZjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvcHlyaWdodCDCqSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtZmVuY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKQEAgLTEyLDYgJiM0MzsxMywyNyBAQAogI2luY2x1ZGUgJmx0O2RybS9kcm1fcGFnZW1hcF91dGlsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZHJtL2RybV9wcmludC5oJmd0OwogCiYjNDM7I2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmF1bHQtaW5qZWN0LmgmZ3Q7CiYjNDM7c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRm9yY2UgYSBoaWdoZXItb3JkZXIgZGVzdGluYXRpb24gZm9saW8gYWxsb2NhdGlvbiB0byBmYWlsIGluCiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCksIGV4ZXJjaXNpbmcgdGhlIG9yZGVyLTAgZmFsbGJhY2sKJiM0MzsgKiAoYW5kLCBpbiB0dXJuLCB0aGUgVEhQIHNwbGl0IHBhdGggaW4gX19taWdyYXRlX2RldmljZV9wYWdlcygpKSB3aXRob3V0CiYjNDM7ICogaGF2aW5nIHRvIGRyaXZlIHRoZSBzeXN0ZW0gaW50byBhY3R1YWwgbWVtb3J5IHByZXNzdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNob3VsZF9mYWlsKCZhbXA7bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIERPQzogT3ZlcnZpZXcKICAqCkBAIC0zODMsNiAmIzQzOzQwNSw1OCBAQCBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheQomIzQzOyAqIEBwYWdlczogQXJyYXkgb2Ygc291cmNlIHBhZ2VzIHRvIHBvcHVsYXRlCiYjNDM7ICogQHNyY19tcGZuOiBTb3VyY2UgYXJyYXkgb2YgbWlncmF0ZSBQRk5zCiYjNDM7ICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnMKJiM0MzsgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5cwomIzQzOyAqCiYjNDM7ICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uCiYjNDM7ICoKJiM0MzsgKiBFbnRyaWVzIGFyZSBub3JtYWxseSBvbmx5IHBvcHVsYXRlZCBhdCB0aGUgaGVhZCBvZiBlYWNoIHNvdXJjZSBmb2xpbywgd2l0aAomIzQzOyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpbgomIzQzOyAqIHRoZSBjb3JyZXNwb25kaW5nIGRybV9wYWdlbWFwX2FkZHIuIFRoYXQgZG9lcyBub3Qgd29yayB3aGVyZQomIzQzOyAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpIGhhZCB0byBkZW1vdGUgYSBoaWdoZXItb3JkZXIgc291cmNlCiYjNDM7ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW4KJiM0MzsgKiBwZXItcGFnZSwgYW5kIHRoZSBjb3B5IGNhbGxiYWNrIG5lZWRzIGEgc291cmNlIHBhZ2UgZm9yIGVhY2ggb2YgdGhlbS4KJiM0MzsgKiBQb3B1bGF0ZSBldmVyeSBlbnRyeSBmb3IgdGhvc2UgcmFuZ2VzLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoZSBzb3VyY2UgZm9saW8gaXRzZWxmIGlzIG9ubHkgc3BsaXQgbGF0ZXIsIGJ5CiYjNDM7ICogbWlncmF0ZV92bWFfcGFnZXMoKSAvIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCksIHNvIGl0cyBvcmRlciBjYW5ub3QgYmUgdXNlZCB0bwomIzQzOyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqZHN0X21wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyBucGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX21wZm5baV0pOwomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyID0gMDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaiwgbnI7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpIHsKJiM0MzsJCQlpJiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CQluciA9IE5SX1BBR0VTKG9yZGVyKTsKJiM0MzsKJiM0MzsJCWlmIChvcmRlciAmYW1wOyZhbXA7ICEoZHN0X21wZm5baV0gJmFtcDsgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7CiYjNDM7CQkJZm9yIChqID0gMDsgaiAmbHQ7IG5yICZhbXA7JmFtcDsgaSAmIzQzOyBqICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKJiM0MzsJCQkJcGFnZXNbaSAmIzQzOyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhZ2VzW2ldID0gcGFnZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWkgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBwcmV2aW91c2x5IG1hcHBlZCBmb3IgR1BVIFNWTSBtaWdyYXRpb24KICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZApAQCAtODc1LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMLCAqc3JjX3BhZ2U7CiAJCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJCXVuc2lnbmVkIGludCBvcmRlciA9IDA7CiYjNDM7CQlnZnBfdCBnZnAgPSBHRlBfSElHSFVTRVI7CiAKIAkJaWYgKCEoc3JjX21wZm5baV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkpCiAJCQlnb3RvIG5leHQ7CkBAIC04OTEsMTEgJiM0Mzs5NjYsNTMgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAKIAkJb3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7CiAKLQkJLyogVE9ETzogU3VwcG9ydCBmYWxsYmFjayB0byBzaW5nbGUgcGFnZXMgaWYgVEhQIGFsbG9jYXRpb24gZmFpbHMgKi8KLQkJaWYgKHZhcykKLQkJCWZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKEdGUF9ISUdIVVNFUiwgb3JkZXIsIHZhcywgYWRkcik7CiYjNDM7CQkvKgomIzQzOwkJICogQSBsYXJnZSBzb3VyY2UgZm9saW8gaXMgYWx3YXlzIGNvbGxlY3RlZCB3aG9sZSwgYXQgaXRzIGhlYWQKJiM0MzsJCSAqIHBhZ2UsIFBNRCBhbGlnbmVkIGFuZCBmbGFnZ2VkIE1JR1JBVEVfUEZOX0NPTVBPVU5EOiBhbnl0aGluZwomIzQzOwkJICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5CiYjNDM7CQkgKiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCgpIG9yLCBmb3IgdGhlIGV2aWN0aW9uIHBhdGgsIGJ5CiYjNDM7CQkgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kCiYjNDM7CQkgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXMKJiM0MzsJCSAqIHRoZXkgaW5kZXggdGhlIGZvbGlvIGZyb20gQGkuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRShvcmRlciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAoc3JjX3BhZ2UgIT0gZm9saW9fcGFnZShwYWdlX2ZvbGlvKHNyY19wYWdlKSwgMCkgfHwKJiM0MzsJCQkgICAgICAhKHNyY19tcGZuW2ldICZhbXA7IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkpOwomIzQzOwomIzQzOwkJaWYgKG9yZGVyKQomIzQzOwkJCWdmcCB8PSBfX0dGUF9OT1dBUk47CiYjNDM7CiYjNDM7CQlpZiAob3JkZXIgJmFtcDsmYW1wOyBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSkKJiM0MzsJCQlmb2xpbyA9IE5VTEw7CiYjNDM7CQllbHNlIGlmICh2YXMpCiYjNDM7CQkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdmFzLCBhZGRyKTsKIAkJZWxzZQotCQkJZm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTsKJiM0MzsJCQlmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCwgb3JkZXIpOwomIzQzOwomIzQzOwkJaWYgKCFmb2xpbyAmYW1wOyZhbXA7IG9yZGVyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBIaWdoZXItb3JkZXIgYWxsb2NhdGlvbiBmYWlsZWQsIGZhbGwgYmFjayB0bwomIzQzOwkJCSAqIG9yZGVyLTAgYWxsb2NhdGlvbnMgZm9yIHRoZSBlbnRpcmUgcmFuZ2UgY292ZXJlZAomIzQzOwkJCSAqIGJ5IHRoZSBvcmlnaW5hbCBoaWdoZXItb3JkZXIgYWxsb2NhdGlvbiwgd2l0aG91dAomIzQzOwkJCSAqIHNldHRpbmcgTUlHUkFURV9QRk5fQ09NUE9VTkQsIHVudGlsIHdlIG1vdmUgcGFzdAomIzQzOwkJCSAqIHRoYXQgcmFuZ2UuCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBuciA9IE5SX1BBR0VTKG9yZGVyKTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGo7CiYjNDM7CiYjNDM7CQkJZ2ZwICZhbXA7PSB+X19HRlBfTk9XQVJOOwomIzQzOwkJCWZvciAoaiA9IDA7IGogJmx0OyBuciAmYW1wOyZhbXA7IGkgJmx0OyBucGFnZXM7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQkJCWZvbGlvID0gdmFzID8KJiM0MzsJCQkJCXZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOgomIzQzOwkJCQkJZm9saW9fYWxsb2MoZ2ZwLCAwKTsKJiM0MzsJCQkJaWYgKCFmb2xpbykKJiM0MzsJCQkJCWdvdG8gZnJlZV9wYWdlczsKJiM0MzsKJiM0MzsJCQkJcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApOwomIzQzOwkJCQltcGZuW2ldID0gbWlncmF0ZV9wZm4ocGFnZV90b19wZm4ocGFnZSkpOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAogCQlpZiAoIWZvbGlvKQogCQkJZ290byBmcmVlX3BhZ2VzOwpAQCAtOTQwLDExICYjNDM7MTA1NywxMSBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcywKIAkJaWYgKCFwYWdlKQogCQkJZ290byBuZXh0X3B1dDsKIAomIzQzOwkJb3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTsKJiM0MzsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJCW1wZm5baV0gPSAwOwogCi0JCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7Ci0KIG5leHRfcHV0OgogCQlpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7CiAJfQpAQCAtMTEyMCw3ICYjNDM7MTIzNyw3IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pCiAJdW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0OwogCXN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7CiAJdm9pZCAqYnVmOwotCWludCBpLCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyOwogCiAJbnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKQEAgLTExNjAsMjcgJiM0MzsxMjc3LDE5IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pCiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOykgewotCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSAwOwotCi0JCXBhZ2VzW2ldID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmNbaV0pOwotCQlpZiAocGFnZXNbaV0pCi0JCQlvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTsKLQotCQlpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7Ci0JfQomIzQzOwlkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcyhwYWdlcywgc3JjLCBkc3QsIG5wYWdlcyk7CiAKIAllcnIgPSBvcHMtJmd0O2NvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKIGVycl9maW5hbGl6ZToKJiM0MzsJZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi0mZ3Q7ZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLAomIzQzOwkJCQkJRE1BX0ZST01fREVWSUNFLCAmYW1wO3N0YXRlKTsKIAlpZiAoZXJyKQogCQlkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7CiAJbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjLCBkc3QsIG5wYWdlcyk7CiAJbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7Ci0JZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi0mZ3Q7ZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLAotCQkJCQlETUFfRlJPTV9ERVZJQ0UsICZhbXA7c3RhdGUpOwogCiBlcnJfZnJlZToKIAlrdmZyZWUoYnVmKTsKQEAgLTEyMzUsNyAmIzQzOzEzNDQsNyBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAJc3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJdm9pZCAqYnVmOwotCWludCBpLCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCXpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTsKIAlpZiAodGltZV9iZWZvcmU2NChnZXRfamlmZmllc182NCgpLCB6ZGQtJmd0O2Rldm1lbV9hbGxvY2F0aW9uLSZndDt0aW1lc2xpY2VfZXhwaXJhdGlvbikpCkBAIC0xMjkwLDI5ICYjNDM7MTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOykgewotCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSAwOwotCi0JCXBhZ2VzW2ldID0gbWlncmF0ZV9wZm5fdG9fcGFnZShtaWdyYXRlLnNyY1tpXSk7Ci0JCWlmIChwYWdlc1tpXSkKLQkJCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpOwotCi0JCWkgJiM0Mzs9IE5SX1BBR0VTKG9yZGVyKTsKLQl9CiYjNDM7CWRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsCiYjNDM7CQkJCQkgICAgICAgbnBhZ2VzKTsKIAogCWVyciA9IG9wcy0mZ3Q7Y29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9maW5hbGl6ZTsKIAogZXJyX2ZpbmFsaXplOgotCWlmIChlcnIpCi0JCWRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpOwotCW1pZ3JhdGVfdm1hX3BhZ2VzKCZhbXA7bWlncmF0ZSk7Ci0JbWlncmF0ZV92bWFfZmluYWxpemUoJmFtcDttaWdyYXRlKTsKIAlpZiAoZGV2KQogCQlkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCwKIAkJCQkJCW5wYWdlcywgRE1BX0ZST01fREVWSUNFLAogCQkJCQkJJmFtcDtzdGF0ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTsKJiM0MzsJbWlncmF0ZV92bWFfcGFnZXMoJmFtcDttaWdyYXRlKTsKJiM0MzsJbWlncmF0ZV92bWFfZmluYWxpemUoJmFtcDttaWdyYXRlKTsKIGVycl9mcmVlOgogCWt2ZnJlZShidWYpOwogZXJyX291dDoKQEAgLTE0NzYsNiAmIzQzOzE1NzgsMTYgQEAgdm9pZCBkcm1fcGFnZW1hcF9kZXN0cm95KHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIGJvb2wgaXNfYXRvbWljX29yX3JlY2xhaW0KIAkJa2ZyZWUoZHBhZ2VtYXApOwogfQogCiYjNDM7c3RhdGljIGludCBfX2luaXQgZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0ZBVUxUX0lOSkVDVElPTikKJiM0MzsJZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cigmIzM0O2RybV9wYWdlbWFwX2ZhdWx0X2luamVjdCYjMzQ7LCBOVUxMLAomIzQzOwkJCQkgICZhbXA7bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO21vZHVsZV9pbml0KGRybV9wYWdlbWFwX21vZHVsZV9pbml0KTsKJiM0MzsKIHN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX2V4aXQodm9pZCkKIHsKIAlmbHVzaF93b3JrKCZhbXA7ZHJtX3BhZ2VtYXBfd29yayk7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwppbmRleCA5MDhkMmQ0ZWM0M2FjLi5hZTE3YmQ1MTZkMjQ4IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTg5OSwyMiAmIzQzOzg5OSwxMDQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCBQVk1XX1NZTkMgfCBQVk1XX01JR1JBVElPTik7CiYjNDM7CiYjNDM7CXdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsaygmYW1wO3B2bXcpKSB7CiYjNDM7CQlpZiAocHZtdy5wdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlhZGRyID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYQomIzQzOwkJICogbWlncmF0aW9uIGVudHJ5LCBzbyBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZCgpIGNyZWF0ZXMgUFRFCiYjNDM7CQkgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50CiYjNDM7CQkgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvCiYjNDM7CQkgKiBzdG9wIHRoZSB3YWxrIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLgomIzQzOyAqCiYjNDM7ICogbWlncmF0ZV9kZXZpY2VfdW5tYXAoKSB1bm1hcHMgd2l0aCB0cnlfdG9fbWlncmF0ZShmb2xpbywgMCksIGkuZS4gd2l0aG91dAomIzQzOyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlcgomIzQzOyAqIGZvcmsoKSwgZm9yIGluc3RhbmNlIC0tIGVuZHMgdXAgd2l0aCBhIFBNRCBzaXplZCBtaWdyYXRpb24gZW50cnkgaW4gZXZlcnkgb25lCiYjNDM7ICogb2YgdGhlbS4gZm9saW9fc3BsaXRfdW5tYXBwZWQoKSBiZWxvdyBkb2VzIG5vdCBjYXJlLCBpdCBvbmx5IGxvb2tzIGF0IHRoZQomIzQzOyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkCiYjNDM7ICogbGVhdmUgdGhlIG90aGVyIFZNQXMgcG9pbnRpbmcgYSBodWdlIFBNRCBhdCB3aGF0IGlzIG5vdyBhbiBvcmRlci0wIGZvbGlvLgomIzQzOyAqIHJlbW92ZV9taWdyYXRpb25fcHRlcygpIHRyaXBzIG92ZXIgdGhhdCBpbiBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHsKJiM0MzsJCS5ybWFwX29uZSA9IG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvIG5vdCBwYXNzIC5hbm9uX2xvY2s6IGZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZCgpIHJlcXVpcmVzCiYjNDM7CSAqIGZvbGlvX21hcHBlZCgpLCBhbmQgQGZvbGlvIGlzIGFscmVhZHkgZnVsbHkgdW5tYXBwZWQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGlkeCwKIAkJCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgZmF1bHRfZm9saW87CiAJaW50IHJldCA9IDA7CiAKIAkvKgotCSAqIHRha2UgYSByZWZlcmVuY2UsIHNpbmNlIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB3aXRoIGZyZWV6ZSA9IHRydWUKLQkgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLgomIzQzOwkgKiBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoKSB3YWxrcyB0aGUgcm1hcCwgYW5kCiYjNDM7CSAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdAomIzQzOwkgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlCiYjNDM7CSAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKQomIzQzOwkgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS4KIAkgKi8KLQlmb2xpb19nZXQoZm9saW8pOwotCXNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS0mZ3Q7dm1hLCBhZGRyLCB0cnVlKTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgQ1BVIGZhdWx0IG9uIGEgZGV2aWNlIHByaXZhdGUgUE1EIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiB0aGUKJiM0MzsJICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkKJiM0MzsJICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5cwomIzQzOwkgKiBmYWlsIHdpdGggLUVBR0FJTiB3aGlsZSB0aGlzIGZhdWx0IHJlZmVyZW5jZSBpcyBoZWxkLgomIzQzOwkgKgomIzQzOwkgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1ECiYjNDM7CSAqIGVudHJ5LCBzbyBpdCBpcyBhbHdheXMgdGhlIGhlYWQgcGFnZSBvZiBAZm9saW8sIGFuZCB0aGVyZWZvcmUgYWx3YXlzCiYjNDM7CSAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wCiYjNDM7CSAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpbwomIzQzOwkgKiBhZnRlcndhcmRzLCBsZWF2aW5nIHRoZSByZWZlcmVuY2UgZXhhY3RseSB3aGVyZSBpdCBpcyBleHBlY3RlZCB0byBiZQomIzQzOwkgKiByZWxlYXNlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlCiYjNDM7CSAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC4KJiM0MzsJICovCiYjNDM7CWZhdWx0X2ZvbGlvID0gbWlncmF0ZS0mZ3Q7ZmF1bHRfcGFnZSAmYW1wOyZhbXA7CiYjNDM7CQlwYWdlX2ZvbGlvKG1pZ3JhdGUtJmd0O2ZhdWx0X3BhZ2UpID09IGZvbGlvOwomIzQzOwomIzQzOwltaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoZmF1bHRfZm9saW8pCiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCXJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTsKJiM0MzsJaWYgKGZhdWx0X2ZvbGlvKQomIzQzOwkJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCW1pZ3JhdGUtJmd0O3NyY1tpZHhdICZhbXA7PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7CkBAIC05MzUsNyAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIH0KIAogc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGlkeCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaWR4LAogCQkJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gMDsKQEAgLTExMDMsNyAmIzQzOzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCWJvb2wgbm90aWZpZWQgPSBmYWxzZTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOyApIHsKIAkJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKGRzdF9wZm5zW2ldKTsKQEAgLTExNzcsMTIgJiM0MzsxMjU4LDE4IEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsCiAJCQkJCWdvdG8gbmV4dDsKIAkJCQl9CiAJCQkJbnIgPSAxICZsdDsmbHQ7IGZvbGlvX29yZGVyKGZvbGlvKTsKLQkJCQlhZGRyID0gbWlncmF0ZS0mZ3Q7c3RhcnQgJiM0MzsgaSAqIFBBR0VfU0laRTsKLQkJCQlpZiAobWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8obWlncmF0ZSwgaSwgYWRkciwgZm9saW8pKSB7CiYjNDM7CQkJCWlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHsKIAkJCQkJc3JjX3BmbnNbaV0gJmFtcDs9IH4oTUlHUkFURV9QRk5fTUlHUkFURSB8CiAJCQkJCQkJIE1JR1JBVEVfUEZOX0NPTVBPVU5EKTsKIAkJCQkJZ290byBuZXh0OwogCQkJCX0KJiM0MzsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogcmVzZXQgbnIgc28gdGhhdCBvbmx5IGZpcnN0IGFmdGVyLXNwbGl0IGZvbGlvCiYjNDM7CQkJCSAqIGlzIHByb2Nlc3NlZCBiZWxvdwomIzQzOwkJCQkgKi8KJiM0MzsJCQkJVk1fV0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKTsKJiM0MzsJCQkJbnIgPSAxOwogCQkJfSBlbHNlIGlmICgoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgJmFtcDsmYW1wOwogCQkJCShkc3RfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9DT01QT1VORCkgJmFtcDsmYW1wOwogCQkJCSEoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7CkBAIC0xMjIyLDYgJiM0MzsxMzA5LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsCiAJCQlmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpJiM0MztqXSkpOwogCQkJbmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaSYjNDM7al0pKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcAomIzQzOwkJCSAqIGNhY2hlLiBSZWZyZXNoIHRoZSBzYXZlZCBtYXBwaW5nIGJlZm9yZSBtaWdyYXRpb24uCiYjNDM7CQkJICovCiYjNDM7CQkJbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwomIzQzOwogCQkJciA9IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhtYXBwaW5nLCBuZXdmb2xpbywgZm9saW8sIGV4dHJhX2NudCk7CiAJCQlpZiAocikKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSAmYW1wOz0gfk1JR1JBVEVfUEZOX01JR1JBVEU7CkBAIC0xNDAyLDcgJiM0MzsxNDk1LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJaWYgKG5yICZndDsgMSkgewogCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQomIzQzOwkJCWZvciAoaiA9IDE7IGogJmx0OyBuciAmYW1wOyZhbXA7IChpICYjNDM7IGopICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7CiAJCQlpICYjNDM7PSBqIC0gMTsKIAkJCXBmbiAmIzQzOz0gaiAtIDE7CkBAIC0xNDM2LDcgJiM0MzsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJaWYgKG5yICZndDsgMSkgewogCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQomIzQzOwkJCWZvciAoaiA9IDE7IGogJmx0OyBuciAmYW1wOyZhbXA7IChpICYjNDM7IGopICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7CiAJCQlpICYjNDM7PSBqIC0gMTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJNL01NIFBhdGNoIGZvciBGYXVsdCBJbmplY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBmYXVsdCBpbmplY3Rpb24gaW50byBgZHJtX3BhZ2VtYXAuY2AgdGhyb3VnaCB0aGlzIGBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW9gIGZ1bmN0aW9uLiBUaGUgZ29hbCBoZXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGZvcmNlIGEgZmFsbGJhY2sgdG8gb3JkZXItMCBhbGxvY2F0aW9ucywgd2hpY2ggaXMgb2Z0ZW4gZG9uZSBmb3IgZGVidWdnaW5nIG9yIHRvIHRlc3QgYSBzeXN0ZW0mIzM5O3MgcmVzaWxpZW5jZSB0byBzcGVjaWZpYyBmYWlsdXJlcy4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlc2AgYW5kIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm5gLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGludGVydHdpbmVkIHdpdGggdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gdGhlIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlci4KCkluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2Ugc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhpcyBoZWF2aWx5IHN1Z2dlc3RzIHRoYXQgdGhlIGZhdWx0IGluamVjdGlvbiBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGV2aWNlIHBhZ2UgbWlncmF0aW9uLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzLCBhcyBpdCBjb3VsZCBiZSB0cmlja3kgdG8gZGVidWcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZSBwYXRoLiBgZHJtX3BhZ2VtYXAuY2AsIGFzIHdlIGtub3csIGlzIHBhcnQgb2YgdGhlIERSTSBzdGFjaywgYnV0IGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwgdG8gcmV2aWV3IGFsbCB1c2VzIG9mIHRoZSBwYWdlIG1hcHBpbmcgc3RydWN0dXJlIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0byB0cmlnZ2VyIGFuZCB0ZXN0IHRoaXMgaW5qZWN0aW9uLiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgcGFydCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgREVWSUNFX1BSSVZBVEUuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcywgc28gbGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgdXNlIG9mIGBkcm1fcGFnZW1hcF9ldmljdF90b19yYW1gIG9yIGBkcm1fcGFnZW1hcF9kZXN0cm95YCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGxldmVyYWdlIGl0IHRvIHN0dWR5IHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMjA9RVhQT1JUX1NZTUJPTChkcm1fcGFnZW1hcF9wdXQpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjItLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjIzOiAqIGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbSgpIC0gRXZpY3QgR1BVIFNWTSByYW5nZSB0byBSQU1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjQtICogQGRldm1lbV9hbGxvY2F0aW9uOiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTppbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTIzMi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTMwOS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzEwOkVYUE9SVF9TWU1CT0xfR1BMKGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzExLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNDYyPWludCB4ZV9zdm1fYm9fZXZpY3Qoc3RydWN0IHhlX2JvICpibylcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNDYzLXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNDY0Olx0cmV0dXJuIGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShcdTAwMjZiby1cdTAwM2VkZXZtZW1fYWxsb2NhdGlvbik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTQ2NS19XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zNDI9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzQ2LVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNDc6aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbik7XG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTM0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUk0gcGFnZW1hcCBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIHVzZWQgYnkgdGhlIEludGVsIFhlIGRyaXZlciAoYHhlX3N2bS5jYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgc2VlIHRoZXNlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFJpZ2h0LCBhbmQgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgZHJpdmVycyB0aGF0IGxldmVyYWdlIGBERVZJQ0VfUFJJVkFURWAgbWVtb3J5LCBsaWtlIE5vdXZlYXUgYW5kLCBvZiBjb3Vyc2UsIHRoZSBYZSBkcml2ZXIuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IGVpdGhlciBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIG9yLCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIGluIHBhcnRpY3VsYXIsIHdoZXRoZXIgdGhpcyBgbWlncmF0ZV92bWFfcGFnZXNgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGEgbW9yZSBnZW5lcmFsIHBhdGguIElzIGl0IGp1c3QgZGV2aWNlLXNwZWNpZmljIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBgbWlncmF0ZV92bWFfcGFnZXNgIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjM2NTo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTM2Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjk4OjQuIGBgbWlncmF0ZV92bWFfcGFnZXMoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5OS1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTQ5LSAqIDEuIGt2bS1cdTAwM2VzcmN1IC0gUHJvdGVjdHMgS1ZNIG1lbXNsb3RzXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUwOiAqIDIuIGt2bS1cdTAwM2VtbS1cdTAwM2VtbWFwX2xvY2sgLSBmaW5kX3ZtYSwgbWlncmF0ZV92bWFfcGFnZXMgYW5kIGhlbHBlcnMsIGtzbV9tYWR2aXNlXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUxLSAqIDMuIGt2bS1cdTAwM2VhcmNoLnV2bWVtX2xvY2sgLSBwcm90ZWN0cyByZWFkL3dyaXRlcyB0byB1dm1lbSBzbG90cyB0aHVzIGFjdGluZ1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Nzk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01ODAtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODctXHQqbWlnLmRzdCA9IG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKGRwYWdlKSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc4ODpcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc4OS1vdXRfZmluYWxpemU6XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTQ9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTEtXHRyID0gc3ZtX21pZ3JhdGVfY29weV90b192cmFtKG5vZGUsIHByYW5nZSwgXHUwMDI2bWlncmF0ZSwgXHUwMDI2bWZlbmNlLCBzY3JhdGNoLCB0dG1fcmVzX29mZnNldCk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQ1MjpcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1NS1cdFx0XHRcdCAgICBzY3JhdGNoLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3NTY6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzU3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTM0Nz1kcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNS0gKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQyNjogKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjctICogZGV0ZWN0IHRoZSBkZW1vdGlvbiAtIHRoZSBkZXN0aW5hdGlvbiBoYXMgdG8gYmUgaW5zcGVjdGVkIGluc3RlYWQuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjkwPWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTEtZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODkyOlx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTMyNT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQxNS1cdFx0ZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMobnBhZ2VzLCBtaWdyYXRlLmRzdCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNDE2Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDE3LVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjctXHRub3V2ZWF1X2ZlbmNlX25ldyhcdTAwMjZmZW5jZSwgZG1lbS1cdTAwM2VtaWdyYXRlLmNoYW4pO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2YXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcdTAwMjZmZW5jZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NzgzPXN0YXRpYyB2b2lkIG5vdXZlYXVfZG1lbV9taWdyYXRlX2NodW5rKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cdG5vdXZlYXVfZmVuY2VfbmV3KFx1MDAyNmZlbmNlLCBkcm0tXHUwMDNlZG1lbS1cdTAwM2VtaWdyYXRlLmNoYW4pO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODEwOlx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04MTEtXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcdTAwMjZmZW5jZSk7XG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9MTU4PXN0cnVjdCBtaWdyYXRlX3ZtYSB7XG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY1LVx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjctXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xOTM9aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk1LXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbi0tXG5saWIvdGVzdF9obW0uYy0xMDc1LVx0XHRcdFx0XHQvKiBDbGVhciByZW1haW5pbmcgZHN0IGVudHJpZXMgdG8gYXZvaWRcbmxpYi90ZXN0X2htbS5jOjEwNzY6XHRcdFx0XHRcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzL2ZpbmFsaXplKCkgdXNpbmdcbmxpYi90ZXN0X2htbS5jLTEwNzctXHRcdFx0XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuLS1cbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTExNzUtXG5saWIvdGVzdF9obW0uYzoxMTc2Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTExNzctXHRcdGNtZC1cdTAwM2VjcGFnZXMgJiM0Mzs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQ4LVx0XHRkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYzoxMjQ5Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNTAtXHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcxOC1cdH1cbmxpYi90ZXN0X2htbS5jOjE3MTk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTE3MjAtXHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjYwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMC0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMTogKiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgZm9yIHRob3NlIGVudHJpZXMgYWZ0ZXIgY2FsbGluZyBtaWdyYXRlX3ZtYV9wYWdlcygpLFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDItICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAzLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjcwNDogKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwgbWlncmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA1LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA2LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzA3OiAqIHRoZW4gbWlncmF0ZV92bWFfcGFnZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDgtICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTY6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNy0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTktICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzIwOiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjEtICogYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIHBhZ2UgYXJlIHN0aWxsIGxvY2tlZCwgYW5kIHRoZSBtbWFwX2xvY2sgaXMgaGVsZFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTE4MT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMzNy0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzM4OiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzM5LSAqIG1ldGEtZGF0YSBmcm9tIHNvdXJjZSBzdHJ1Y3QgcGFnZSB0byBkZXN0aW5hdGlvbi5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNDY9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ4LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ5OiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTAtICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0IGNvbnRhaW5pbmcgYWxsIG1pZ3JhdGlvbiBpbmZvcm1hdGlvblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1Njp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1Ny17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU5LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2MDpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3BhZ2VzKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB0ZXN0X2htbWAgTW9kdWxlIGFuZCBpdHMgSW1wYWN0IG9uIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBsaWIvdGVzdF9obW0uY2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGl0JiMzOTtzIHV0aWxpemluZyBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRlc3RfaG1tLmNgLCBhcyBJIHJlY2FsbCwgaXMgYSB0ZXN0IG1vZHVsZSBkZXNpZ25lZCBmb3IgSE1NIGFuZCwgc3BlY2lmaWNhbGx5LCBERVZJQ0VfUFJJVkFURSBtZW1vcnkuIEl0JiMzOTtzIGJ1aWx0IHRvIGV4ZXJjaXNlIGJvdGggYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gQnV0IG5vdyBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc29tZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IHRoZXNlIHJlbHkgb24sIG5hbWVseSBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZWAsIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgLCBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gLCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBUaGVzZSBhcmUgY29yZSBNTSBmdW5jdGlvbnMsIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiBob3cgZGV2aWNlIG1lbW9yeSBnZXRzIG1vdmVkIGFyb3VuZC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgYHRlc3RfaG1tYCBtb2R1bGUsIGFuZCBieSBleHRlbnNpb24sIHRoZXNlIHRlc3RzLCBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggb3VyIGZ1enppbmcgZWZmb3J0cyBpbiBTeXprYWxsZXIuIEhtbSwgeWVzLCBpdCBsb29rcyBsaWtlIFN5emthbGxlciBkb2VzIGluZGVlZCBmdXp6IGB0ZXN0X2htbWAgdmlhIGAvZGV2L2htbV9kbWlycm9yKmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTbywgY2FuIHRoaXMgZnV6emluZyBhY3R1YWxseSAqdHJpZ2dlciogdGhlIGNvZGUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIGBtbS9taWdyYXRlX2RldmljZS5jYD8KClRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgYWxsIGFib3V0IFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYW5kIGhvdyB3ZSBoYW5kbGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIHNwbGl0dGluZyBkdXJpbmcgZGV2aWNlIG1pZ3JhdGlvbi4gSSBrbm93IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AgZ2V0cyBjYWxsZWQgd2l0aGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCB3aGVuIGBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKWAgaXMgdHJ1ZS4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFRIUC4KClNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBgdGVzdF9obW1gIGV2ZW4gc3VwcG9ydCBtaWdyYXRpbmcgVEhQPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgYGxpYi90ZXN0X2htbS5jYCB0byBjb25maXJtIHdoZXRoZXIgaXQgaGFzIHRoZSBjYXBhY2l0eSB0byBkZWFsIHdpdGggVEhQLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEhQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVEhQIEludGVyYWN0aW9ucyB3aXRoIERSTSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgbm8gZGlyZWN0IFRIUCB1c2FnZSB3aXRoaW4gYGxpYi90ZXN0X2htbS5jYC4gSG93ZXZlciwgYHRlc3RfaG1tYCByZWxpZXMgb24gc3RhbmRhcmQgYG1tYXBgIGFuZCBgbWFkdmlzZWAuIFRoaXMgbWVhbnMgaWYgc29tZW9uZSBjbGV2ZXJseSBzZXRzIHVwIGEgVEhQIG1hcHBpbmcgYW5kIHRoZW4gdHJpZ2dlcnMgdGhlIGB0ZXN0X2htbWAgaW9jdGwgZm9yIG1pZ3JhdGlvbiB0byBkZXZpY2UgbWVtb3J5LCB0aGUgY29kZSBwYXRoIHdvdWxkIGludm9sdmUgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gVGhlIGdvb2QgbmV3cyBpcyB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgUE1EIHNwbGl0dGluZyBkdXJpbmcgdGhhdCBtaWdyYXRpb24sIHdoaWNoIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRybV9wYWdlbWFwLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AgYW5kIGFyZSB1dGlsaXppbmcgaXQgaW4gYGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbmAuIE15IHNwaWRlciBzZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIGBkcm1fcGFnZW1hcC5jYCBpcyBiZWluZyB1c2VkIGJ5IGB4ZV9zdm0uY2AgYW5kIGBub3V2ZWF1X2RtZW0uY2AuIEhhbmcgb24uLi4gYGRybV9wYWdlbWFwLmNgIGlzIGFjdHVhbGx5IGEgZ2VuZXJpYyBEUk0gcGFnZW1hcCBtb2R1bGUhIFRoaXMgaGFzIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSBgeGVgIG9yIGBub3V2ZWF1YCBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBTeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IHRob3NlIGRyaXZlcnMsIGJ1dCBpZiB0aGVyZSYjMzk7cyBhIGdlbmVyYWxpemVkIHJvdXRlIHRvIGBkcm1fcGFnZW1hcGAsIG9yIGlmIGVpdGhlciBgeGVgIG9yIGBub3V2ZWF1YCBhcmUgc29tZWhvdyBlbmFibGVkIGR1cmluZyB0aGUgdGVzdCwgdGhlbiBgZHJtX3BhZ2VtYXBgIGl0c2VsZiBjb3VsZCBiZSBzdWJqZWN0IHRvIGZ1enppbmcuIEhtbS4uLiB0aGlzIGBkcm1fcGFnZW1hcC5jYCBpcyBhIG5ldyBhZGRpdGlvbiB0byB0aGUgRFJNIHRyZWU/IEkgc2hvdWxkIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kIHdoZW4gaXQgd2FzIGludHJvZHVjZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEyOlx0ZHJtX3BhZ2VtYXAub1xcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEzOlx0ZHJtX3BhZ2VtYXBfdXRpbC5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBidXQgb25seSBpZiBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBlbmFibGVkICphbmQqIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIGZ1bmN0aW9uIG9yIG1vZHVsZSBpcyBhY3R1YWxseSB1c2VkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIG1ha2VmaWxlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgc2VsZWN0IG9yIGRlcGVuZCBvbiBgZHJtX2dwdXN2bV9oZWxwZXJgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBsZXZlcmFnZWQuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGF0IGBkcm1fZ3B1c3ZtX2hlbHBlcmAgbW9kdWxlIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgZHJpdmVycyB3aWxsIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9oZWxwZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTAtXHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBHUFVTVk0gRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gYENPTkZJR19EUk1fR1BVU1ZNYCBkaXJlY3RseSBlbmFibGVzIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBhcyBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIsIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiAqd2hhdCogaXMgc2VsZWN0aW5nIHRoYXQgY29uZmlnIG9wdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSByYXRpb25hbGUsIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2h5IGEgdXNlciBtaWdodCBjaG9vc2UgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMsIGRlcGVuZGVudCBvbiBvdGhlciBkaXNwbGF5IGRyaXZlciBjb21wb25lbnRzLCBvciBqdXN0IGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgZmxhZz8gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgS2NvbmZpZyBoaWVyYXJjaHkgYW5kIGZpZ3VyZSBvdXQgd2hhdCBwdWxscyB0aGF0IHNwZWNpZmljIGZsYWcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEUk1fR1BVU1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyMT1jb25maWcgUlVTVF9EUk1fR1BVVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjctXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMjg6Y29uZmlnIERSTV9HUFVTVk1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICYjNDM7PSBkcm1fZ3B1c3ZtX2hlbHBlci5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NzYyPWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzc3LVx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3ODpcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzktXHR1bnNpZ25lZCBsb25nICpwZm5zO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzg1LVx0aWYgKCFwZm5zKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3ODY6XHRcdHJldHVybiBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc4Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMC1cdFx0aWYgKCEocGZuc1tpXSBcdTAwMjYgSE1NX1BGTl9WQUxJRCkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODIxOlx0XHRcdHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjItXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzAtXHRcdGlmIChjdXIgPT0gcGFnZW1hcCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MzE6XHRcdFx0bmV3X3N0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX0VRVUFMO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzItXHRcdH0gZWxzZSBpZiAoY3VyIFx1MDAyNlx1MDAyNiAoY3VyID09IG90aGVyIHx8ICFvdGhlcikpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODMzOlx0XHRcdG5ld19zdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9PVEhFUjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM0LVx0XHRcdG90aGVyID0gY3VyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzUtXHRcdH0gZWxzZSBpZiAoY3VyKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzNjpcdFx0XHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzctXHRcdH0gZWxzZSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzODpcdFx0XHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzktXHRcdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcdFx0aWYgKHN0YXRlID09IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDctXHRcdFx0c3RhdGUgPSBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0OC1cdFx0fSBlbHNlIGlmIChzdGF0ZSAhPSBuZXdfc3RhdGUpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQ5Olx0XHRcdGlmIChuZXdfc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTSB8fFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTA6XHRcdFx0ICAgIHN0YXRlID09IERSTV9HUFVTVk1fU0NBTl9TWVNURU0pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MTpcdFx0XHRcdHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX01JWEVEO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTI6XHRcdFx0ZWxzZSBpZiAoc3RhdGUgIT0gRFJNX0dQVVNWTV9TQ0FOX01JWEVEKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTM6XHRcdFx0XHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9NSVhFRF9ERVZJQ0U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1NC1cdFx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQxLVx0c2VsZWN0IERSTV9FWEVDXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo0MjpcdHNlbGVjdCBEUk1fR1BVU1ZNIGlmICFVTUxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVx0c2VsZWN0IERSTV9HUFVWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODUtXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg2Olx0c2VsZWN0IERSTV9HUFVTVk1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1Zy0xMDYtICAgICAgIGJvb2wgXCYjMzQ7SW5qZWN0IHVzZXJwdHIgaW52YWxpZGF0aW9uIC1FSU5WQUwgZXJyb3JzXCYjMzQ7XG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1ZzoxMDc6ICAgICAgIGRlcGVuZHMgb24gRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWctMTA4LSAgICAgICBkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU9MTU2PXhlLSQoQ09ORklHX0RSTV9YRV9HUFVTVk0pICYjNDM7PSB4ZV9zdm0ub1xuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjE1Nzp4ZS0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0geGVfdXNlcnB0ci5vXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTU4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0MTE9c3RhdGljIGludCB4ZV9wdF9wcmVfY29tbWl0KHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZSAqcHRfdXBkYXRlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MjMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQyNS0vKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0NTM9c3RhdGljIGlubGluZSB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKSB7IH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDU1LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTctI2lmZGVmIENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1Rcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1OTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU5Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTYxND1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjMwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2MzE6XHRpZiAobWlncmF0aW9uX3N0YXRlID09IERSTV9HUFVTVk1fU0NBTl9FUVVBTCkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2MzItXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19EUk1fWEVfREVCVUdfVk0pKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0yMzM9aW50IHhlX3N2bV9pbml0KHN0cnVjdCB4ZV92bSAqdm0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM0LXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDoyMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM2LVx0cmV0dXJuIGRybV9ncHVzdm1faW5pdChcdTAwMjZ2bS1cdTAwM2Vzdm0uZ3B1c3ZtLCBcJiMzNDtYZSBTVk0gKHNpbXBsZSlcJiMzNDssIFx1MDAyNnZtLVx1MDAzZXhlLVx1MDAzZWRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9MjQ0PXZvaWQgeGVfc3ZtX2Zpbmkoc3RydWN0IHhlX3ZtICp2bSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0yNDUte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjI0NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0yNDctXHR4ZV9hc3NlcnQodm0tXHUwMDNleGUsIHhlX3ZtX2lzX2Nsb3NlZCh2bSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0zODU9c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0zOTItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6MzkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKSAvKiBOZWVkIHRvIHN1cHBvcnQgdXNlcnB0ciB3aXRob3V0IFhFX0dQVVNWTSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTM5NC0jZGVmaW5lIHhlX3N2bV9hc3NlcnRfaW5fbm90aWZpZXIodm1fXykgXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9NDM2PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZV9zdm1fbm90aWZpZXJfdW5sb2NrKHN0cnVjdCB4ZV92bSAqdm0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQzOC19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDM5OiNlbmRpZiAvKiBDT05GSUdfRFJNX0dQVVNWTSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQ0MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oPTQ4PXN0cnVjdCB4ZV91c2VycHRyIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTk5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuaDoxMDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTEwMS12b2lkIHhlX3VzZXJwdHJfcmVtb3ZlKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9MzYwNj1zdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfY2hlY2tfYXJncyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZtICp2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zNzE2LVx0XHQgICAgWEVfSU9DVExfREJHKHhlLCBvcCA9PSBEUk1fWEVfVk1fQklORF9PUF9NQVBfVVNFUlBUUiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjM3MTc6XHRcdFx0XHQgIUlTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pKSB8fFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtMzcxOC1cdFx0ICAgIFhFX0lPQ1RMX0RCRyh4ZSwgb2JqIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC01LVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjY6I2lmbmRlZiBfX0RSTV9HUFVTVk1fSF9fXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NzojZGVmaW5lIF9fRFJNX0dQVVNWTV9IX19cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC04LVxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zMjc9dm9pZCBkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzMyLSAqIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCAtIFNjYW4gcmVzdWx0IGZyb20gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzMzogKiBARFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEOiBBdCBsZWFzdCBvbmUgcGFnZSB3YXMgbm90IHByZXNlbnQgb3IgaW5hY2Nlc3NpYmxlLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzNDogKiBARFJNX0dQVVNWTV9TQ0FOX0VRVUFMOiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgaW5kaWNhdGVkIGFzXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzM1LSAqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkgZnVuY3Rpb24uXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM2OiAqIEBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI6IEFsbCBwYWdlcyBiZWxvbmcgdG8gZXhhY3RseSBvbmUgZGV2X3BhZ2VtYXAsIHdoaWNoIGlzXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzM3LSAqICpOT1QqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkuIEFsbCBwYWdlcyBiZWxvbmcgdG9cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzgtICogdGhlIHNhbWUgZGV2aWNlIHByaXZhdGUgb3duZXIuXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM5OiAqIEBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNOiBBbGwgcGFnZXMgYXJlIHByZXNlbnQgYW5kIHN5c3RlbSBwYWdlcy5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDA6ICogQERSTV9HUFVTVk1fU0NBTl9NSVhFRF9ERVZJQ0U6IEFsbCBwYWdlcyBhcmUgZGV2aWNlIHBhZ2VzIGFuZCBiZWxvbmcgdG8gYXQgbGVhc3RcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNDEtICogdHdvIGRpZmZlcmVudCBzdHJ1Y3QgZGV2X3BhZ2VtYXBzLiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzYW1lIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQyLSAqIG93bmVyLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0MzogKiBARFJNX0dQVVNWTV9TQ0FOX01JWEVEOiBQYWdlcyBhcmUgcHJlc2VudCBhbmQgYXJlIGEgbWl4IG9mIHN5c3RlbSBwYWdlc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0NC0gKiBhbmQgZGV2aWNlLXByaXZhdGUgcGFnZXMuIEFsbCBkZXZpY2UtcHJpdmF0ZSBwYWdlcyBiZWxvbmcgdG8gdGhlIHNhbWUgZGV2aWNlXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTM0Nz1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQge1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0ODpcdERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDk6XHREUk1fR1BVU1ZNX1NDQU5fRVFVQUwsXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUwOlx0RFJNX0dQVVNWTV9TQ0FOX09USEVSLFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1MTpcdERSTV9HUFVTVk1fU0NBTl9TWVNURU0sXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUyOlx0RFJNX0dQVVNWTV9TQ0FOX01JWEVEX0RFVklDRSxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNTM6XHREUk1fR1BVU1ZNX1NDQU5fTUlYRUQsXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzU0LX07XG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTUzMT1fX2RybV9ncHVzdm1fbm90aWZpZXJfbmV4dChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTU3MC1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDo1NzE6I2VuZGlmIC8qIF9fRFJNX0dQVVNWTV9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdQVSBWaXJ0dWFsaXphdGlvbiBTdXBwb3J0KioKCk9rYXksIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgaXMgcHVsbGVkIGluIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAsIHdoaWNoIGlzIGluIHR1cm4gc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVgLiBUaGF0IG1lYW5zIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwmIzM5O3MgWGUgZHJpdmVyLCBpcyBkZWZpbml0ZWx5IHVzaW5nIHRoaXMgR1BVIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dC4uLiBoYW5nIG9uIGEgbWludXRlLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LiBSaWdodCwgU3l6a2FsbGVyLCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQsIEdDRS9RRU1VLCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgaGF2ZSBwaHlzaWNhbCBJbnRlbCBYZSBHUFVzLiBUaGlzIGNvdWxkIHByZXNlbnQgYSBwcm9ibGVtLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYXNzdW1wdGlvbnMgaGVyZS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGRybV9wYWdlbWFwLmNgIGFsc28gdXNlZCBieSBgbm91dmVhdWA/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5vdXZlYXVgIGFjdHVhbGx5IG1ha2VzIHVzZSBvZiBgZHJtX3BhZ2VtYXBgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGlzIGNvdWxkIGNoYW5nZSB0aGluZ3MgYW5kIHByb3ZpZGUgYSBiZXR0ZXIgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgKERSTSkgUGFnZSBNYXBwaW5nIGluIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlyZWN0IHJlbmRlcmluZy4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwmIzM5O3MgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGFuZCBob3cgZ3JhcGhpY3MgZHJpdmVycyBhbGxvY2F0ZSBhbmQgbWFuYWdlIEdQVSBtZW1vcnkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgJiMzNDtub3V2ZWF1JiMzNDsgZHJpdmVyLCB3aGljaCBpcyBOdmlkaWEmIzM5O3Mgb3Blbi1zb3VyY2UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgKmRvZXNuJiMzOTt0KiBzZWVtIHRvIGJlIGxldmVyYWdpbmcgdGhlIGBkcm1fcGFnZW1hcGAgaW5mcmFzdHJ1Y3R1cmUsIGF0IGxlYXN0IG5vdCBpbiBhIHdheSB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBteSBxdWljayBzY2FuLiBUaGlzIGlzIHNvbWV3aGF0IHN1cnByaXNpbmcsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyY2hpdGVjdHVyYWwgY2hvaWNlLgoKTm93LCB0aGlzIHNwYXJrcyBhbm90aGVyIHRob3VnaHQuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgdGhlIEFNRCBzaWRlIGxvb2tzIGxpa2UuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIGBhbWRncHVgIGRyaXZlciwgQU1EJiMzOTtzIGZsYWdzaGlwIG9wZW4tc291cmNlIGdyYXBoaWNzIGRyaXZlciwgaGFuZGxlIHRoaXM/IERvZXMgYGFtZGdwdWAgZm9sbG93IGEgc2ltaWxhciBwYXRoIGFuZCBhdm9pZCBgZHJtX3BhZ2VtYXBgIGZvciBpdHMgbWVtb3J5IG1hbmFnZW1lbnQ/IE9yLCBkb2VzIGl0IGhhdmUgYSBjb250cmFzdGluZyBhcHByb2FjaD8gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGludG8gdGhhdCwgYW5kIHRoZW4sIGNvbXBhcmUgdGhvc2UgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcGFnZW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IEkmIzM5O20gdGhpbmtpbmcgaGVyZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgZHJtX3BhZ2VtYXAuY2AqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRybV9wYWdlbWFwLmNgIHNlZW1zIHRvIGJlIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gdGhlIGB4ZWAgZHJpdmVyIGF0IHRoZSBtb21lbnQsIHdoaWNoIHN0cmlrZXMgbWUgYXMgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGhhdmUgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBCdXQgd2FpdCwgYSBtZW1vcnkgam9nLi4uIGlzbiYjMzk7dCBgZHJtX3BhZ2VtYXAuY2AgcGFydCBvZiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGU/IE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgZHJtX2dwdXN2bV9oZWxwZXJgIHNvbGVseSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyIG9yIGRvZXMgaXQgaGF2ZSBvdGhlciBjb25zdW1lcnMgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIG9mIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQ0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0xODItICAtICYjMzk7ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ib19zYWZlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MTgzOiAgLSAmIzM5O2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UmIzM5O1xuLmNsYW5nLWZvcm1hdC0xODQtICAtICYjMzk7ZHJtX2dwdXZhX2Zvcl9lYWNoX29wJiMzOTtcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03MS0gICA6ZG9jOiBPdmVydmlld1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzQtICAgOmRvYzogTG9ja2luZ1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzctICAgOmRvYzogUGFydGlhbCBVbm1hcHBpbmcgb2YgUmFuZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC04MC0gICA6ZG9jOiBFeGFtcGxlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSYjMzk7cyBwYWdlcyBiZWluZyB2YWxpZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NTogKiAoZHJtX2dwdXN2bV9yYW5nZV9wYWdlc192YWxpZCkgd2hlbiB0aGUgZHJpdmVyIGlzIGNvbW1pdHRpbmcgR1BVIGJpbmRpbmdzLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05Ni0gKiBUaGlzIGxvY2sgY29ycmVzcG9uZHMgdG8gdGhlIGBgZHJpdmVyLVx1MDAzZXVwZGF0ZWBgIGxvY2sgbWVudGlvbmVkIGluXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDItICogbG9jayB0byBzYWZlZ3VhcmQgY29yZSBHUFUgU1ZNIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbW9kaWZ5IHN0YXRlLCBzdWNoIGFzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0IGFuZCBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZS4gVGhpcyBsb2NrIGlzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNC0gKiBkZW5vdGVkIGFzICYjMzk7ZHJpdmVyX3N2bV9sb2NrJiMzOTsgaW4gY29kZSBleGFtcGxlcy4gRmluZXIgZ3JhaW5lZCBkcml2ZXIgc2lkZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDUtICogbG9ja2luZyBzaG91bGQgYWxzbyBiZSBwb3NzaWJsZSBmb3IgY29uY3VycmVudCBHUFUgZmF1bHQgcHJvY2Vzc2luZyB3aXRoaW4gYVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDY6ICogc2luZ2xlIEdQVSBTVk0uIFRoZSAmIzM5O2RyaXZlcl9zdm1fbG9jayYjMzk7IGNhbiBiZSB2aWEgZHJtX2dwdXN2bV9kcml2ZXJfc2V0X2xvY2tcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3LSAqIHRvIGFkZCBhbm5vdGF0aW9ucyB0byBHUFUgU1ZNLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQyLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzogKlx0aW50IGRyaXZlcl9iaW5kX3JhbmdlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0LSAqXHR7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5OiAqXHRcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTA6ICpcdFx0aWYgKGRybV9ncHVzdm1fcmFuZ2VfcGFnZXNfdmFsaWQocmFuZ2UpKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTEtICpcdFx0XHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCByYW5nZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTMtICpcdFx0XHRlcnIgPSAtRUFHQUlOO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTQ6ICpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2soZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU5OiAqXHRpbnQgZHJpdmVyX2dwdV9mYXVsdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MC0gKlx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBncHV2YV9zdGFydCwgdW5zaWduZWQgbG9uZyBncHV2YV9lbmQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MS0gKlx0e1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjI6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjMtICpcdFx0aW50IGVycjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2OS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzA6ICpcdFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KGdwdXN2bSwgZmF1bHRfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTcxLSAqXHRcdFx0XHRcdFx0XHRncHV2YV9zdGFydCwgZ3B1dmFfZW5kLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg1LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4NjogKlx0XHRlcnIgPSBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyhncHVzdm0sIHJhbmdlLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcdFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUCB8fCBlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVQRVJNKSB7XHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODgtICpcdFx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcdFx0XHRcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5MC0gKlx0XHRcdGdvdG8gcmV0cnk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjA4OiAqXHR2b2lkIF9fZHJpdmVyX2dhcmJhZ2VfY29sbGVjdG9yKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwOTogKlx0XHRcdFx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMC0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE0LSAqXHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncy5wYXJ0aWFsX3VubWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTU6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KGdwdXN2bSwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTYtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXHRcdGRyaXZlcl91bmJpbmRfcmFuZ2UocmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTg6ICpcdFx0ZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxOS0gKlx0fVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMjAtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjIxOiAqXHR2b2lkIGRyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMjItICpcdHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzMi0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzM6ICpcdHZvaWQgZHJpdmVyX2ludmFsaWRhdGlvbihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzQ6ICpcdFx0XHRcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNS0gKlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM2LSAqXHR7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNzogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0geyAuaW5fbm90aWZpZXIgPSB0cnVlLCB9O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzg6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlID0gTlVMTDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM5LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQyOiAqXHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UocmFuZ2UsIG5vdGlmaWVyLCBtbXVfcmFuZ2UtXHUwMDNlc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0My0gKlx0XHRcdFx0XHQgIG1tdV9yYW5nZS1cdTAwM2VlbmQpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQ0OiAqXHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV91bm1hcF9wYWdlcyhncHVzdm0sIHJhbmdlLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDUtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0OC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDk6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgbW11X3JhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjUwLSAqXHRcdFx0ZHJpdmVyX2dhcmJhZ2VfY29sbGVjdG9yX2FkZChncHVzdm0sIHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTI2OD1ucGFnZXNfaW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNzMtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSBub3RpZmllciBmcm9tIEdQVSBTVk1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc4LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3OTogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9ub3RpZmllciBpZiBmb3VuZCBvciBOVUxMXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgxOnN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgyOmRybV9ncHVzdm1fbm90aWZpZXJfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODMtXHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjg5LVx0aWYgKGl0cmVlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6XHRcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5MS1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5My19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NDpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ni0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjk3OiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZCgpIC0gRmluZCBHUFUgU1ZNIHJhbmdlIGZyb20gR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTgtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMwMS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fcmFuZ2UgaWYgZm91bmQgb3IgTlVMTFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwNDpzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwNTpkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDYtXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzEyLVx0aWYgKGl0cmVlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTM6XHRcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNi19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMxNzpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTgtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZSgpIC0gSW52YWxpZGF0ZSBhIEdQVSBTVk0gbm90aWZpZXIuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKiBAbW5pOiBQb2ludGVyIHRvIHRoZSBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MzMxPXN0YXRpYyBib29sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzMjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMzNS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzNjpcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllciA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMzNy1cdFx0Y29udGFpbmVyX29mKG1uaSwgdHlwZW9mKCpub3RpZmllciksIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzM4Olx0c3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSA9IG5vdGlmaWVyLVx1MDAzZWdwdXN2bTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzUxLS8qXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM1MjogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyAtIE1NVSBpbnRlcnZhbCBub3RpZmllciBvcGVyYXRpb25zIGZvciBHUFUgU1ZNXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU1Olx0LmludmFsaWRhdGUgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1Ni19O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzU4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTk6ICogZHJtX2dwdXN2bV9pbml0KCkgLSBJbml0aWFsaXplIHRoZSBHUFUgU1ZNLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc1OiAqIE5vdGU6IElmIG9ubHkgdXNpbmcgdGhlIHNpbXBsZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSAoZ2V0L3VubWFwL2ZyZWUpLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtICogdGhlbiBvbmx5IEBncHVzdm0sIEBuYW1lLCBhbmQgQGRybSBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBzYW1lIGJhc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc3LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzg6ICogc2V0dXAgaXMgbmVlZGVkLCB3aGVyZSB0aGUgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSB3aWxsIHNpbXBseSBuZXZlciB1c2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc5LSAqIHRoZSBvdGhlciBmaWVsZHMuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODItICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MzppbnQgZHJtX2dwdXN2bV9pbml0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4NC1cdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODctXHRcdCAgICB1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NpemUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4ODpcdFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODktXHRcdCAgICBjb25zdCB1bnNpZ25lZCBsb25nICpjaHVua19zaXplcywgaW50IG51bV9jaHVua3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTUtXHR9IGVsc2Uge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozOTY6XHRcdC8qIE5vIGZ1bGwgU1ZNIG1vZGUsIG9ubHkgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSS4gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk3LVx0XHRpZiAob3BzIHx8IG51bV9jaHVua3MgfHwgbW1fcmFuZ2UgfHwgbm90aWZpZXJfc2l6ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQyNjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2luaXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MjctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyOC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDI5OiAqIHRvX2RybV9ncHVzdm1fbm90aWZpZXIoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKnRvX2RybV9ncHVzdm1fbm90aWZpZXIoc3RydWN0IHJiX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzNS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNjpcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlLnJiKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDQwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0NS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDQ2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0NzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0OC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTUtXHRpZiAobm9kZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2Olx0XHRoZWFkID0gXHUwMDI2KHRvX2RybV9ncHVzdm1fbm90aWZpZXIobm9kZSkpLVx1MDAzZWVudHJ5O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTctXHRlbHNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjMtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ2NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDcwOnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3MTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3Mi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzctLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3ODogKiBkcm1fZ3B1c3ZtX2ZpbmkoKSAtIEZpbmFsaXplIHRoZSBHUFUgU1ZNLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzktICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ4NDp2b2lkIGRybV9ncHVzdm1fZmluaShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODY6XHRzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsICpuZXh0O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ4ODpcdGRybV9ncHVzdm1fZm9yX2VhY2hfbm90aWZpZXJfc2FmZShub3RpZmllciwgbmV4dCwgZ3B1c3ZtLCAwLCBMT05HX01BWCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODk6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwgKl9fbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDkwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0OTc6XHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2Vfc2FmZShyYW5nZSwgX19uZXh0LCBub3RpZmllciwgMCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk4LVx0XHRcdFx0XHQgICAgICAgTE9OR19NQVgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ5OTpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTAwLVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA1LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTA2OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fZmluaSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNy1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDk6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE3OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUxODpkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE5LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOlx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MjEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU0MTogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZyZWUoKSAtIEZyZWUgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDItICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU0Ni0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ3OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NDg6XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTU5OiAqIHRvX2RybV9ncHVzdm1fcmFuZ2UoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2MDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTYyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fcmFuZ2Ugc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2NDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnRvX2RybV9ncHVzdm1fcmFuZ2Uoc3RydWN0IHJiX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2NjpcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlLnJiKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2OS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTcwOiAqIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSByYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzEtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc1LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NzY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Nzc6XHRcdFx0XHQgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Nzgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1ODI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2sobm90aWZpZXItXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgzLVx0aW50ZXJ2YWxfdHJlZV9pbnNlcnQoXHUwMDI2cmFuZ2UtXHUwMDNlaXRyZWUsIFx1MDAyNm5vdGlmaWVyLVx1MDAzZXJvb3QpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg2LVx0aWYgKG5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NzpcdFx0aGVhZCA9IFx1MDAyNih0b19kcm1fZ3B1c3ZtX3JhbmdlKG5vZGUpKS1cdTAwM2VlbnRyeTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkxLVx0bGlzdF9hZGQoXHUwMDI2cmFuZ2UtXHUwMDNlZW50cnksIGhlYWQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhub3RpZmllci1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTMtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTY6ICogX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk3LSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYwMS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjAyOnN0YXRpYyB2b2lkIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYwNC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MDktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYxMDogKiBkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKCkgLSBBbGxvY2F0ZSBHUFUgU1ZNIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYxMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjIyOmRybV9ncHVzdm1fcmFuZ2VfYWxsb2Moc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjIzOlx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjQtXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyNzpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjI4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQ5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKCkgLSBHZXQgdGhlIGxhcmdlc3QgQ1BVIG1hcHBpbmcgb3JkZXIuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY1MS0gKiBAaG1tX3BmbjogVGhlIGN1cnJlbnQgaG1tX3Bmbi5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Mi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjYzOnN0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHVuc2lnbmVkIGxvbmcgaG1tX3BmbixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjY0LVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9pbmRleCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc5OiAqIGRybV9ncHVzdm1fY2hlY2tfcGFnZXMoKSAtIENoZWNrIHBhZ2VzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjkwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTE6c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTI6XHRcdFx0XHQgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY5My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM3LVx0XHR9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjczODpcdFx0aSAmIzQzOz0gMHgxIFx1MDAzY1x1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM5LVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQ2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDc6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDg6ICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQ5LSAqIEBkZXZfcHJpdmF0ZV9vd25lcjogVGhlIHN0cnVjdCBkZXZfcHJpdmF0ZV9vd25lciB0byB1c2UgdG8gZGV0ZXJtaW5lXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzYwOiAqIFJldHVybjogU2VlIFx1MDAyNmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NjI6ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2My1cdFx0XHRcdFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY2LVx0c3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbm90aWZpZXIgPSBcdTAwMjZyYW5nZS1cdTAwM2Vub3RpZmllci1cdTAwM2Vub3RpZmllcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzY3Olx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Njg6XHR1bnNpZ25lZCBsb25nIGVuZCA9IGRybV9ncHVzdm1fcmFuZ2VfZW5kKHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY5LVx0c3RydWN0IGhtbV9yYW5nZSBobW1fcmFuZ2UgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzctXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzc4Olx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3OS1cdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MDktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgxMDpcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTEtXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgxMjpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODEzLVx0XHRnb3RvIHJldHJ5O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTY6XHRcdGkgJiM0Mzs9IDF1bCBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1Ny1cdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTk6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjQtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjU6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjYtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2Ny0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY4OiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04ODQ9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg1OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4ODY6XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODg3LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwMi1cdFx0aWYgKHN0YXJ0IFx1MDAzZT0gdmFzLVx1MDAzZXZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2YXMtXHUwMDNldm1fZW5kIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDM6XHRcdCAgICBzdGFydCBcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDQ6XHRcdCAgICBlbmQgXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwNS1cdFx0ICAgIHN0YXJ0IFx1MDAzZT0gZ3B1dmFfc3RhcnQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2M9IGdwdXZhX2VuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxNi1cdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTc6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTk6XHRcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kKG5vdGlmaWVyLCBzdGFydCwgZW5kKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTIwLVx0XHRpZiAocmFuZ2UpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMS1cdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkzMjpcdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MzMtXHRcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICYjNDM7IGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzOC1cdFx0aWYgKGVuZCAtIHN0YXJ0IFx1MDAzYz0gY2hlY2tfcGFnZXNfdGhyZXNob2xkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mzk6XHRcdCAgICAhZHJtX2dwdXN2bV9jaGVja19wYWdlcyhncHVzdm0sIG5vdGlmaWVyLCBzdGFydCwgZW5kLCBkZXZfcHJpdmF0ZV9vd25lcikpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQwLVx0XHRcdCYjNDM7JiM0MztpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQ5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NTA6ICogZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKCkgLSBBc3NlcnQgR1BVIFNWTSBkcml2ZXIgbG9jayBpcyBoZWxkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1NC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU1OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NTYte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYwLSNlbHNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk2MTpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX2RyaXZlcl9sb2NrX2hlbGQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYyLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2Ni0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY3OiAqIGRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoKSAtIEZpbmQgc3RhcnQgYWRkcmVzcyBmb3IgZmlyc3QgVk1BIGluIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9OTc1PXVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTc2OmRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTc3LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ny19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk5ODpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmRfdm1hX3N0YXJ0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk5LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAwLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDAxOiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQoKSAtIEZpbmQgb3IgaW5zZXJ0IEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAwMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxMi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTAxMzpzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMTQ6ZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDE1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxNy1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZ3B1dmFfZW5kLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDE4Olx0XHRcdFx0Y29uc3Qgc3RydWN0IGRybV9ncHVzdm1fY3R4ICpjdHgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTkte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIwOlx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIxOlx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDIyLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBncHVzdm0tXHUwMDNlbW07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDI4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDI5Olx0ZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKGdwdXN2bSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDM4Olx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoZ3B1c3ZtLCBmYXVsdF9hZGRyLCBmYXVsdF9hZGRyICYjNDM7IDEpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM5LVx0aWYgKCFub3RpZmllcikge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDQwOlx0XHRub3RpZmllciA9IGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoZ3B1c3ZtLCBmYXVsdF9hZGRyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA0MS1cdFx0aWYgKElTX0VSUihub3RpZmllcikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNDctXHRcdFx0XHRcdFx0ICAgbW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDg6XHRcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9ub3RpZmllcl9zdGFydChub3RpZmllciksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDk6XHRcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9ub3RpZmllcl9zaXplKG5vdGlmaWVyKSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA1MDpcdFx0XHRcdFx0XHQgICBcdTAwMjZkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNTEtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDcyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDczOlx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQobm90aWZpZXIsIGZhdWx0X2FkZHIsIGZhdWx0X2FkZHIgJiM0MzsgMSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNzQtXHRpZiAocmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDg0Olx0Y2h1bmtfc2l6ZSA9IGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShncHVzdm0sIG5vdGlmaWVyLCB2YXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwODUtXHRcdFx0XHRcdFx0IGZhdWx0X2FkZHIsIGdwdXZhX3N0YXJ0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA5My1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA5NDpcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9hbGxvYyhncHVzdm0sIG5vdGlmaWVyLCBmYXVsdF9hZGRyLCBjaHVua19zaXplLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDk1LVx0XHRcdFx0ICAgICAgIG1pZ3JhdGVfZGV2bWVtKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMDAtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMDE6XHRkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydChub3RpZmllciwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTAyLVx0aWYgKG5vdGlmaWVyX2FsbG9jKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTAzOlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChncHVzdm0sIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwNC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMTYtXHRpZiAobm90aWZpZXJfYWxsb2MpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMTc6XHRcdGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShncHVzdm0sIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTExOC1lcnJfbW11bmxvY2s6XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIxLX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEyMjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyMy1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyNC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEyNTogKiBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoKSAtIFVubWFwIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBHUFUgU1ZNIHBhZ2VzIChpbnRlcm5hbClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFN5emthbGxlciBSZWFjaGFiaWxpdHkgb2YgRGV2aWNlIE1pZ3JhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcm1fZ3B1c3ZtYCBmcmFtZXdvcmsuIEl0IHNlZW1zIGxpa2UgYSBnZW5lcmljIGhlbHBlciBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSwgYW5kIHJpZ2h0IG5vdywgb25seSB0aGUgYHhlYCBkcml2ZXIgdXNlcyBpdC4gSG1tLCB3YWl0IGEgbWludXRlLCBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZHJtX2dwdXN2bV9oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGlzIGEgYmlnZ2VyIGFyZWEgdG8gY29uc2lkZXIuIElzIGFueXRoaW5nICplbHNlKiB1c2luZyBgZHJtX2dwdXN2bWA/IE5vLCBqdXN0IGB4ZWAuIFNpbmNlIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBmdXp6IGB4ZWAgKHJlcXVpcmVzIHJlYWwgSW50ZWwgR1BVIGhhcmR3YXJlKSwgY2hhbmdlcyBzcGVjaWZpY2FsbHkgaW4gYGRybV9wYWdlbWFwLmNgIGFyZSBwcm9iYWJseSB1bnJlYWNoYWJsZSBpbiBhIHR5cGljYWwgU3l6a2FsbGVyIGVudmlyb25tZW50LgoKQnV0IHdoYXQgYWJvdXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgPyBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGlzIGlzIHVzZWQgYnkgYHRlc3RfaG1tLmNgLCB3aGljaCBTeXprYWxsZXIgKmRvZXMqIGZ1enogdmlhIGAvZGV2L2htbV9kbWlycm9yKmAuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgYXJlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciBkZXZpY2UgbWlncmF0aW9uLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGVtLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaW50ZXJlc3RpbmcgYnVncy4KCkNhbiBgdGVzdF9obW1gIGFjdHVhbGx5IHRyaWdnZXIgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYD8gV2VsbCwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AsIGFuZCB0aGF0JiMzOTtzIHdoZW4gYGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYCBpcyB0cnVlLiBPa2F5LCBjYW4gd2UgbWFwIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGFuZCB0aGVuIG1pZ3JhdGUgaXQgdXNpbmcgYHRlc3RfaG1tYD8gWWVzLCBgdGVzdF9obW1gIHVzZXMgc3RhbmRhcmQgYG1tYXBgIGNhbGxzLCBhbmQgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgdG8gY3JlYXRlIFRIUHMsIHdoaWNoIGNvdWxkIHRoZW4gYmUgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSB1c2luZyB0aGUgYHRlc3RfaG1tYCBpb2N0bHMuCgpMZXQmIzM5O3MgZGlnIGludG8gYHRlc3RfaG1tYCBpdHNlbGYuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBkdW1teSBkZXZpY2UgbWVtb3J5IHVzaW5nIGBERVZJQ0VfUFJJVkFURWAgcGFnZXMuIFdoZW4gYSB1c2VyIGNhbGxzIGBITU1fRE1JUlJPUl9DTURfTUlHUkFURV9UT19ERVZJQ0VgLCBpdCBlbmRzIHVwIGNhbGxpbmcgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIElmIHdlIGRpZCBtYXAgYSBUSFAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAgd291bGQgaGFuZGxlIHRoZSBQTUQuIEdvb2QhIFdhaXQsIGBtaWdyYXRlX3ZtYV9zZXR1cGAgKmRvZXMqIGhhbmRsZSBUSFBzISBUaGF0IGlzIGV4Y2VsbGVudCBuZXdzLiBOb3csIEkgbmVlZCB0byBjaGVjayBgbWlncmF0ZV92bWFfc2V0dXBgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBjb25maXJtIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz02NjA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY2LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2Njc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzMwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTczMS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjktfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3NzA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc3MS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcyLSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDc5OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4MC0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNTQ5PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU2MS1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTU2MjpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE1NjMtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5pdHR5LWdyaXR0eTogZG9lcyB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBzdGFuZHMsIGNvcnJlY3RseSBoYW5kbGUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcyk/IFdlIGtub3cgaG93IGNydWNpYWwgVEhQIG1hbmFnZW1lbnQgaXMgZm9yIHBlcmZvcm1hbmNlIGluIG1vZGVybiBzeXN0ZW1zLCBhbmQgYSBtaXNzdGVwIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgaXMgVEhQLWF3YXJlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3MgZm9yIGh1Z2UgcGFnZSBtYXBwaW5ncz8gRG9lcyBpdCBwcm9wZXJseSByZS1tYXAgaHVnZSBwYWdlcyBpZiB0aGV5IGFyZSBzcGxpdCBvciBtZXJnZWQgZHVyaW5nIG1pZ3JhdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IGR1cmluZyB0aGUgZW50aXJlIHByb2Nlc3MgdGhhdCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbj8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIGtleSBxdWVzdGlvbnMgdGhhdCBJIG5lZWQgYW5zd2VyZWQgdG8gY29uZmlybSBpdCBpcyB0aHJlYWQtc2FmZS4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGEgY2xvc2VyIGluc3BlY3Rpb24gb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyBhbmQgcGFnZSBmbGFncywgaXMgaW4gb3JkZXIuIFRoaXMgZnVuY3Rpb24gaXMgY29tcGxleCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggVEhQIG1hbmFnZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGhlcmUsIG90aGVyd2lzZSwgaXQgY291bGQgY2F1c2UgYmlnIHByb2JsZW1zIGluIGEgbGl2ZSBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz04Mj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMtXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDovKiogbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCAtIGNvbGxlY3QgVEhQIHBhZ2VzIHdpdGhvdXQgc3BsaXR0aW5nIHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUtICogZm9saW8gZm9yIGRldmljZSBwcml2YXRlIHBhZ2VzLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzY6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzctXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsayxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjU2LVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjI1NzpcdFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0yNTgtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NTM9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjUtXHQgKiBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgemFwcyByYXRoZXIgdGhhbiBkZW1vdGVzIGEgUE1EIGluIGEgVk1BIHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTY2Olx0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjctXHQgKiBWTUEgdHlwZSwgc28gYSBmaWxlIFRIUCBjYW4gcmVhY2ggaGVyZTsgdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGVfdm1hKClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTk4Ni1cdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5ODc6XHQgKiByZWZlcmVuY2UgdGFrZW4gYnkgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGlzIHN0aWxsIGhlbGQuXG5tbS9taWdyYXRlX2RldmljZS5jLTk4OC1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRIUCBNaWdyYXRpb24gTG9naWMqKgoKT2theSwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGtpY2tzIGluIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBodWdlIFBNRHMsIG1lYW5pbmcgVEhQcyBhcmUgZGVmaW5pdGVseSBzdXBwb3J0ZWQgZHVyaW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIHBoYXNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXRzZWxmIGlzIHRoZSB3b3JraG9yc2UgYmVoaW5kIGJvdGggYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4KClNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBgdGVzdF9obW1gIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGlmIGl0JiMzOTtzIG1pZ3JhdGluZyBhIFRIUCB0byBkZXZpY2UgbWVtb3J5LiBUaGVuLCBpZiB0aGUgZGVzdGluYXRpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBUSFBzLCBvciBpZiB0aGUgYWxsb2NhdGlvbiBnb2VzIGJlbGx5LXVwLCB0aGUgY29kZSB3aWxsIHNwbGl0IHRoZSBmb2xpby4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSB6b29tIGluIG9uIHRoYXQgY3JpdGljYWwgY29uZGl0aW9uLi4uIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBjYWxscyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIG9ubHkgd2hlbiB0aGUgc291cmNlIFBGTiBpcyBtYXJrZWQgZm9yIG1pZ3JhdGlvbiAoYE1JR1JBVEVfUEZOX01JR1JBVEVgKSwgaXQmIzM5O3MgYSBsYXJnZSBmb2xpbyAoYGZvbGlvX3Rlc3RfbGFyZ2VgKSwgYW5kICpjcnVjaWFsbHkqLCB0aGUgZGVzdGluYXRpb24gUEZOIGRvZXMgKm5vdCogaGF2ZSBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIHNldC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJZiB0aGUgZGVzdGluYXRpb24gbGFja3MgYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgaXQgdGVsbHMgdXMgdGhlIGRlc3RpbmF0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIFRIUCwgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGluIGB0ZXN0X2htbS5jYCwgYXJlIHdlIHNldHRpbmcgYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCBvbiB0aGUgZGVzdGluYXRpb24gd2hlbiBtaWdyYXRpbmc/IFRoYXQmIzM5O3MgdGhlIGxpbmNocGluLiBJZiB3ZSAqZG9uJiMzOTt0KiwgdGhlbiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlcmNpc2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlHUkFURV9QRk5fQ09NUE9VTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxuLS1cbmxpYi90ZXN0X2htbS5jLTIxNC1cdFx0c3BhZ2UgPSBCQUNLSU5HX1BBR0Uoc3BhZ2UpO1xubGliL3Rlc3RfaG1tLmM6MjE1Olx0XHRpZiAoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSB7XG5saWIvdGVzdF9obW0uYy0yMTYtXHRcdFx0ZHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvX2FsbG9jKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxuLS1cbmxpYi90ZXN0X2htbS5jLTIyOC1cdFx0aWYgKG9yZGVyKVxubGliL3Rlc3RfaG1tLmM6MjI5Olx0XHRcdGRzdF9wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmMtMjMwLVx0XHRmb2xpb19jb3B5KHBhZ2VfZm9saW8oZHBhZ2UpLCBwYWdlX2ZvbGlvKHNwYWdlKSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9NzM5PXN0YXRpYyB2b2lkIGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXG4tLVxubGliL3Rlc3RfaG1tLmMtNzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqcnBhZ2U7XG5saWIvdGVzdF9obW0uYzo3NTA6XHRcdGJvb2wgaXNfbGFyZ2UgPSAqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORDtcbmxpYi90ZXN0X2htbS5jLTc1MS1cdFx0aW50IHdyaXRlID0gKCpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKSA/IE1JR1JBVEVfUEZOX1dSSVRFIDogMDtcbi0tXG5saWIvdGVzdF9obW0uYy04MjUtXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8oZHBhZ2UpO1xubGliL3Rlc3RfaG1tLmM6ODI2Olx0XHRcdCpkc3QgfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYy04MjctXG4tLVxubGliL3Rlc3RfaG1tLmM9ODk0PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX2ZpbmFsaXplX2FuZF9tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxuLS1cbmxpYi90ZXN0X2htbS5jLTkyMC1cbmxpYi90ZXN0X2htbS5jOjkyMTpcdFx0aWYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKVxubGliL3Rlc3RfaG1tLmMtOTIyLVx0XHRcdG5yID0gZm9saW9fbnJfcGFnZXMocGFnZV9mb2xpbyhkcGFnZSkpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTEwMDQ9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHkoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMzItXHRcdGlmIChvcmRlcilcbmxpYi90ZXN0X2htbS5jOjEwMzM6XHRcdFx0KmRzdCA9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmMtMTAzNC1cdFx0aWYgKCpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMzgtXHRcdFx0ZG1pcnJvci1cdTAwM2VmbGFncyBcdTAwMjY9IH5ITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0M7XG5saWIvdGVzdF9obW0uYzoxMDM5Olx0XHRcdCpkc3QgXHUwMDI2PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYy0xMDQwLVx0XHRcdGRwYWdlID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIENvZGUgaW4gbW0vbWlncmF0ZV9kZXZpY2UuYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgY2FuIGJlIHRyaWdnZXJlZCwgYW5kIGB0ZXN0X2htbS5jYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHJvdXRlLiBJdCBkZWZpbml0ZWx5ICpzdXBwb3J0cyogYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgYW5kIHRoZXJlJiMzOTtzIGV2ZW4gYSBmbGFnLCBgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCwgdGhhdCAqY2xlYXJzKiBpdCBhbmQgc2V0cyBgZHBhZ2UgPSBOVUxMYC4gQWN0dWFsbHksIHdhaXQgYSBzZWNvbmQuLi4gaWYgYGRwYWdlYCBpcyBOVUxMLCB0aGUgbWlncmF0aW9uIGZhaWxzIG91dHJpZ2h0LgoKVGhlIGtleSBpcywgaWYgYHRlc3RfaG1tYCBhbGxvY2F0ZXMgYW4gKm9yZGVyLTAqIHBhZ2UgaW5zdGVhZCBvZiBhIFRIUCwgaXQgd29uJiMzOTt0IHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIGluIHRoZSBmaXJzdCBwbGFjZSEgTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJICpmb3JjZSogYHRlc3RfaG1tYCB0byBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzIHdoZW4gaXQgbm9ybWFsbHkgdHJpZXMgZm9yIGEgVEhQPwoKTG9va2luZyBhdCBgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5YCwgaXQgdXNlcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAuIEl0IGNoZWNrcyBgaXNfbGFyZ2UgPSAqc3JjICZhbXA7IE1JR1JBVEVfUEZOX0NPTVBPVU5EYC4gSWYgYGlzX2xhcmdlYCAobWVhbmluZyB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSBsYXJnZSBwYWdlKSB0aGUgY29kZSB0cmllcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCB0cnVlKWAuIElmIHRoYXQgZmFpbHMsIGl0ICpmYWxscyBiYWNrKiB0byBhbiBvcmRlci0wIGFsbG9jYXRpb24gd2l0aCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSlgIGFuZCBzZXRzIGBpc19sYXJnZWAgdG8gZmFsc2UuIEJpbmdvISBJZiB0aGUgJiMzNDt0cnVlJiMzNDsgYWxsb2NhdGlvbiBmYWlscywgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayEKClRoYXQgZmFsbGJhY2sgcGF0aCBtZWFucyB0aGF0IGl0ICp3b24mIzM5O3QqIHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZSBmYWxsYmFjayBwYXRoIGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgbWVhbnMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBnZXRzIGNhbGxlZC4gU28geWVzLCB0aGUgY29kZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgKnJlYWNoYWJsZSogdGhyb3VnaCBgdGVzdF9obW1gIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSAmIzM0O3RydWUmIzM0OyBhbGxvY2F0aW9uIGZhaWx1cmUuCgpOb3csIHdoYXQgYWJvdXQgYGRybV9wYWdlbWFwLmNgPyBJdCBpbnRyb2R1Y2VzIGZhdWx0IGluamVjdGlvbiwgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AsIGFuZCBtb2RpZmllcyBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXNgIGFuZCBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYC4gQnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoOiBgZHJtX3BhZ2VtYXAuY2AgaXMgb25seSB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlci4gQW5kIGB4ZWAgaXNuJiMzOTt0IGZ1enplZCBpbiB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwOyBpdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIGxpa2VseSAqbm90KiByZWFjaGFibGUuIFdhaXQsIGxldCBtZSBqdXN0IHBhdXNlLi4uIGlzIGBkcm1fcGFnZW1hcC5jYCAqZXhjbHVzaXZlbHkqIHVzZWQgYnkgYHhlYD8gSXMgaXQgdXNlZCBieSAqYW55KiBvdGhlciBkcml2ZXI/IEkgdGhvdWdodCBJIGNoZWNrZWQgZWFybGllciBhbmQgZGV0ZXJtaW5lZCBpdCB3YXNuJiMzOTt0IGJ1dCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSB1c2FnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9wYWdlbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEyOlx0ZHJtX3BhZ2VtYXAub1xcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEzOlx0ZHJtX3BhZ2VtYXBfdXRpbC5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgtI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxOTojaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMC0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3ByaW50LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3OC0gKlx0XHRpZiAoZHJpdmVyX21pZ3JhdGlvbl9wb2xpY3kocmFuZ2UpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE3OTogKlx0XHRcdGVyciA9IGRybV9wYWdlbWFwX3BvcHVsYXRlX21tKGRyaXZlcl9jaG9vc2VfZHJtX3BhZ2VtYXAoKSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgwLSAqXHRcdFx0XHRcdFx0ICAgICAgZ3B1dmFfc3RhcnQsIGdwdXZhX2VuZCwgZ3B1c3ZtLVx1MDAzZW1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9ODg1PWRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMwLVx0XHQgKiByYW5nZXMuIFdoZW4gbWlncmF0aW5nIHRoZSBTVk0gcmFuZ2VzLCBzb21lIHByb2Nlc3NlcyBmYWlsIGluXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkzMTpcdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMi1cdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTEzMz1zdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMzYte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTM3Olx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IHN2bV9wYWdlcy1cdTAwM2VkcGFnZW1hcDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzOC1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGdwdXN2bS1cdTAwM2Vkcm0tXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTE2My1cdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTE2NDpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqYWRkciA9IFx1MDAyNnN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcltqXTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExODg6XHRcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTg5LVx0XHRzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXAgPSBOVUxMO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTQwOD1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzItXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzM6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDM0LVx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXNfZmxhZ3MgZmxhZ3M7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTIwLVx0XHQgICAgaXNfZGV2aWNlX2NvaGVyZW50X3BhZ2UocGFnZSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUyMTpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICpfX3pkZCA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1MjI6XHRcdFx0XHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1MjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM2LVx0XHRcdFx0cGFnZW1hcCA9IHBhZ2VfcGdtYXAocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1Mzc6XHRcdFx0XHRkcGFnZW1hcCA9IGRybV9wYWdlbWFwX3BhZ2VfdG9fZHBhZ2VtYXAocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1MzgtXHRcdFx0XHRpZiAoZHJtX1dBUk5fT04oZ3B1c3ZtLVx1MDAzZWRybSwgIWRwYWdlbWFwKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1My1cdFx0XHRcdCAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTU0Olx0XHRcdFx0ZHJtX3BhZ2VtYXBfZ2V0KGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NTpcdFx0XHRcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTU2LVx0XHRcdFx0c3ZtX3BhZ2VzLVx1MDAzZWRwYWdlbWFwID0gZHBhZ2VtYXA7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjA3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjA4Olx0XHRcdHN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcltqXSA9IGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MDktXHRcdFx0XHQoYWRkciwgRFJNX0lOVEVSQ09OTkVDVF9TWVNURU0sIG9yZGVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExLSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZHJ2LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyOiNpbmNsdWRlIFx1MDAzY2RybS9kcm1fcGFnZW1hcC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzojaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXBfdXRpbC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNC0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3ByaW50LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xOD1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG1pZ3JhdGVfdG9fcmFtX2ZhdWx0X2luamVjdCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjEtICogRm9yY2UgYSBoaWdoZXItb3JkZXIgZGVzdGluYXRpb24gZm9saW8gYWxsb2NhdGlvbiB0byBmYWlsIGluXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMjogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSwgZXhlcmNpc2luZyB0aGUgb3JkZXItMCBmYWxsYmFja1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMtICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI1LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjY6c3RhdGljIGJvb2wgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNy17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzAtI2Vsc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMxOnN0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc2LSAqIC0gRGV2aWNlIE1lbW9yeSBBbGxvY2F0aW9uczpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjc3OiAqICAgICAgRW1iZWRkZWQgc3RydWN0dXJlIGNvbnRhaW5pbmcgZW5vdWdoIGluZm9ybWF0aW9uIGZvciB0aGUgZHJtX3BhZ2VtYXAgdG9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc4LSAqICAgICAgbWlncmF0ZSB0byAvIGZyb20gZGV2aWNlIG1lbW9yeS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgLSBHUFUgU1ZNIHpvbmUgZGV2aWNlIGRhdGFcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg3LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODktICogQGRldm1lbV9hbGxvY2F0aW9uOiBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkwOiAqIEBkcGFnZW1hcDogUmVmY291bnRlZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIHN0cnVjdCBkcm1fcGFnZW1hcC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTgtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5OTpzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwMC1cdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTAxOlx0c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb247XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDI6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTAzLX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA2OiAqIGRybV9wYWdlbWFwX3pkZF9hbGxvYygpIC0gQWxsb2NhdGUgYSB6ZGQgc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3OiAqIEBkcGFnZW1hcDogUG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBzdHJ1Y3QgZHJtX3BhZ2VtYXAuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTQ6c3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1OmRybV9wYWdlbWFwX3pkZF9hbGxvYyhzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNzpcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjQtXHR6ZGQtXHUwMDNlZGV2bWVtX2FsbG9jYXRpb24gPSBOVUxMO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTI1Olx0emRkLVx1MDAzZWRwYWdlbWFwID0gZHJtX3BhZ2VtYXBfZ2V0KGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzE6ICogZHJtX3BhZ2VtYXBfemRkX2dldCgpIC0gR2V0IGEgcmVmZXJlbmNlIHRvIGEgemRkIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMi0gKiBAemRkOiBQb2ludGVyIHRvIHRoZSB6ZGQgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNy0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzODpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqZHJtX3BhZ2VtYXBfemRkX2dldChzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0NC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0NTogKiBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveSgpIC0gRGVzdHJveSBhIHpkZCBzdHJ1Y3R1cmUuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDYtICogQHJlZjogUG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGNvdW50IHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDktICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTA6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE1MS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTI6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQgPVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTUzOlx0XHRjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkLCByZWZjb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTQ6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0gPSB6ZGQtXHUwMDNlZGV2bWVtX2FsbG9jYXRpb247XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTU6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gemRkLVx1MDAzZWRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTU2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2Mi1cdGtmcmVlKHpkZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNjM6XHRkcm1fcGFnZW1hcF9wdXQoZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTY0LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNjYtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNjc6ICogZHJtX3BhZ2VtYXBfemRkX3B1dCgpIC0gUHV0IGEgemRkIHJlZmVyZW5jZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2OC0gKiBAemRkOiBQb2ludGVyIHRvIHRoZSB6ZGQgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3Mi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE3MzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF96ZGRfcHV0KHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3NC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNzU6XHRrcmVmX3B1dChcdTAwMjZ6ZGQtXHUwMDNlcmVmY291bnQsIGRybV9wYWdlbWFwX3pkZF9kZXN0cm95KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3Ni19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTc4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTc5OiAqIGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X2ZvbGlvKCkgLSBQdXQgYSBtaWdyYXRpb24gZm9saW9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4MC0gKiBAZm9saW86IFBvaW50ZXIgdG8gdGhlIGZvbGlvIHRvIHB1dFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE4NDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxOTE6ICogZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMoKSAtIFB1dCBtaWdyYXRpb24gcGFnZXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE5Mi0gKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXNcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxOTc6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXModW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTgtXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4pXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjEzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjE0Olx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhmb2xpbyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTUtXHRcdG1pZ3JhdGVfcGZuW2ldID0gMDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMjItLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMjM6ICogZHJtX3BhZ2VtYXBfZ2V0X2Rldm1lbV9wYWdlKCkgLSBHZXQgYSByZWZlcmVuY2UgdG8gYSBkZXZpY2UgbWVtb3J5IHBhZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIyNC0gKiBAcGFnZTogUG9pbnRlciB0byB0aGUgcGFnZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIzMC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzItXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMzpcdFx0XHRcdFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjM0LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzYtXHRcdFx0ICAgICAgIG9yZGVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzNzpcdGZvbGlvX3NldF96b25lX2RldmljZV9kYXRhKHBhZ2VfZm9saW8ocGFnZSksIGRybV9wYWdlbWFwX3pkZF9nZXQoemRkKSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzgtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0MC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI0MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcygpIC0gTWFwIGRldmljZSBwcml2YXRlIG1pZ3JhdGlvblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQyLSAqIHBhZ2VzIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQzLSAqIEBkZXY6IFRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgbWlncmF0aW9uLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjQ0OiAqIEBsb2NhbF9kcGFnZW1hcDogVGhlIGRybV9wYWdlbWFwIGxvY2FsIHRvIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQ1LSAqIEBwYWdlbWFwX2FkZHI6IEFycmF5IHRvIHN0b3JlIERNQSBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIG1hcHBlZCBwYWdlcy5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0yNTg9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjU5OmRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX2RldmljZV9wcml2YXRlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmxvY2FsX2RwYWdlbWFwLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjYxOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNjItXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjY0LVx0XHRcdFx0XHQgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2NTpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Ni17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjcwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2UobWlncmF0ZV9wZm5baV0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjcxOlx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzI6XHRcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzM6XHRcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyIGFkZHI7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNzQtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Mjg0Olx0XHR6ZGQgPSBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yODUtXHRcdGRwYWdlbWFwID0gemRkLVx1MDAzZWRwYWdlbWFwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxNi0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMxNzogKiBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAtIERSTSBwYWdlbWFwIElPVkEgc3RhdGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxOC0gKiBAZG1hX3N0YXRlOiBETUEgSU9WQSBzdGF0ZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMjQ6c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUge1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzI1LVx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlIGRtYV9zdGF0ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMzA6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKCkgLSBNYXAgc3lzdGVtIG9yIGRldmljZSBjb2hlcmVudFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzMxLSAqIG1pZ3JhdGlvbiBwYWdlcyBmb3IgR1BVIFNWTSBtaWdyYXRpb25cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0zNDY9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzQ3OmRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDg6XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNDktXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM1MS1cdFx0XHRcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzUyOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNTMte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5My1cdFx0cGFnZW1hcF9hZGRyW2ldID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjM5NDpcdFx0XHRkcm1fcGFnZW1hcF9hZGRyX2VuY29kZShkbWFfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5NS1cdFx0XHRcdFx0XHREUk1fSU5URVJDT05ORUNUX1NZU1RFTSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MDk6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDEwLSAqIEBwYWdlczogQXJyYXkgb2Ygc291cmNlIHBhZ2VzIHRvIHBvcHVsYXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDE4LSAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDE5OiAqIHRoZSBjb3JyZXNwb25kaW5nIGRybV9wYWdlbWFwX2FkZHIuIFRoYXQgZG9lcyBub3Qgd29yayB3aGVyZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDIwOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpIGhhZCB0byBkZW1vdGUgYSBoaWdoZXItb3JkZXIgc291cmNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjE6ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyMi0gKiBwZXItcGFnZSwgYW5kIHRoZSBjb3B5IGNhbGxiYWNrIG5lZWRzIGEgc291cmNlIHBhZ2UgZm9yIGVhY2ggb2YgdGhlbS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjgtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0Mjk6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQzMC1cdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcmNfbXBmbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NjE6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjItICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjMtICogQG1pZ3JhdGVfcGZuOiBBcnJheSBvZiBtaWdyYXRlIHBmbnMgc2V0IHVwIGZvciB0aGUgbWFwcGVkIHBhZ2VzLiBVc2VkIHRvXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NjQ6ICogZGV0ZXJtaW5lIHRoZSBkcm1fcGFnZW1hcCBvZiBhIHBlZXIgZGV2aWNlIHByaXZhdGUgcGFnZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ2NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSBvZiBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXNcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzQtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc3LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc5LVx0XHRcdFx0XHQgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgKnN0YXRlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgxLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00OTUtXHRcdGlmIChpc196b25lX2RldmljZV9wYWdlKHBhZ2UpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0OTY6XHRcdFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkID0gZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHBhZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDk3Olx0XHRcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSB6ZGQtXHUwMDNlZHBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00OTgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE2PXN0YXRpYyBpbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxNzpkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MTgtXHRcdFx0XHQgICAgc3RydWN0IGRldmljZSAqcmVtb3RlX2RldmljZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxOTpcdFx0XHRcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnJlbW90ZV9kcGFnZW1hcCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMC1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxvY2FsX3BmbnNbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMS1cdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcmVtb3RlX3BhZ2VzW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjI6XHRcdFx0XHQgICAgc3RydWN0IGRybV9wYWdlbWFwX2FkZHIgcGFnZW1hcF9hZGRyW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjMtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjQ6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNi1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNy17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1Mjg6XHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfZGV2aWNlX3ByaXZhdGVfcGFnZXMocmVtb3RlX2RldmljZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyOS1cdFx0XHRcdFx0XHRcdCAgICAgICByZW1vdGVfZHBhZ2VtYXAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQxLW91dDpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0MjpcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMocmVtb3RlX2RldmljZSwgcGFnZW1hcF9hZGRyLCBsb2NhbF9wZm5zLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQzLVx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSwgTlVMTCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTQ3PXN0YXRpYyBpbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0ODpkcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQ5LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHN5c19wZm5zW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTAtXHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlICpsb2NhbF9wYWdlc1tdLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTUxOlx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1Mi1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTM6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTY6XHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKGRldm1lbS1cdTAwM2VkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTctXHRcdFx0XHRcdFx0ICAgICAgIHBhZ2VtYXBfYWRkciwgc3lzX3BmbnMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTY2LW91dDpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU2NzpcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBzeXNfcGZucywgbnBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTY4LVx0XHRcdFx0XHRETUFfVE9fREVWSUNFLCBzdGF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc2LSAqIEBkZXZpY2U6IG1pZ3JhdGluZyBkZXZpY2UuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1Nzc6ICogQGRwYWdlbWFwOiBQb2ludGVyIHRvIHN0cnVjdCBkcm1fcGFnZW1hcCB1c2VkIGJ5IHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc4LSAqIEBvcHM6IFRoZSBjb3B5IG9wcyB0byBiZSB1c2VkIGZvciB0aGUgbWlncmF0aW5nIGRldmljZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01ODA9c3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODItXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODM6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg0Olx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4NS19O1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg3OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODgtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3BmbnNbXSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTAtXHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpwYWdlc1tdLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTkxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU5Mi1cdFx0XHRcdCAgICAgc3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jICpsYXN0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTkzLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbWlncmF0ZV9yYW5nZV9sb2MgKmN1cixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU5NDpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX21pZ3JhdGVfZGV0YWlscyAqbWRldGFpbHMpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTk2Olx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU5Ny1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYwOC1cdGlmIChsYXN0LVx1MDAzZWRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjA5Olx0XHRyZXQgPSBkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MTAtXHRcdFx0XHRcdFx0XHQgIGxhc3QtXHUwMDNlZGV2aWNlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYxOC1cdGVsc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYxOTpcdFx0cmV0ID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KGRldm1lbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyY19wZm5zW2xhc3QtXHUwMDNlc3RhcnRdLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYzMS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYzMjogKiBkcm1fcGFnZW1hcF9jcGFnZXMoKSAtIENvdW50IGNvbGxlY3RlZCBwYWdlc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjMzLSAqIEBtaWdyYXRlX3BmbjogQXJyYXkgb2YgbWlncmF0ZV9wZm4gZW50cmllcyB0byBhY2NvdW50XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjQyOnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfY3BhZ2VzKHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY0My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjY2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjY3OiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKCkgLSBNaWdyYXRlIGEgc3RydWN0IG1tX3N0cnVjdCByYW5nZSB0byBkZXZpY2UgbWVtb3J5XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02NjgtICogQGRldm1lbV9hbGxvY2F0aW9uOiBUaGUgZGV2aWNlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIG1pZ3JhdGUgdG8uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjg5LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkwOmludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY5MS1cdFx0XHRcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkzOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY5NC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTU6XHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njk2Olx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjk3LVx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwID0gZHBhZ2VtYXAtXHUwMDNlcGFnZW1hcDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MDgtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjcwOTpcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MTAtXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzExOlx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTcxMi1cdHZvaWQgKmJ1Zjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NDUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo3NDY6XHR6ZGQgPSBkcm1fcGFnZW1hcF96ZGRfYWxsb2MoZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzQ3LVx0aWYgKCF6ZGQpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NjgtXHRpZiAobWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzY5Olx0ICAgIGRybV9wYWdlbWFwX2NwYWdlcyhtaWdyYXRlLnNyYywgbnBhZ2VzKSAhPSBucGFnZXMpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc3MC1cdFx0Lypcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTktXHRcdGlmIChzcmNfcGFnZSBcdTAwMjZcdTAwMjYgaXNfZGV2aWNlX3ByaXZhdGVfcGFnZShzcmNfcGFnZSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMDpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICpzcmNfemRkID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMTpcdFx0XHRcdGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShzcmNfcGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MjItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODUzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODU0Olx0XHRkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2UocGFnZSwgb3JkZXIsIHpkZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NTUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTY6XHRcdC8qIElmIHdlIHN3aXRjaGVkIHRoZSBtaWdyYXRpbmcgZHJtX3BhZ2VtYXAsIG1pZ3JhdGUgcHJldmlvdXMgcGFnZXMgbm93ICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTc6XHRcdGVyciA9IGRybV9wYWdlbWFwX21pZ3JhdGVfcmFuZ2UoZGV2bWVtX2FsbG9jYXRpb24sIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1OC1cdFx0XHRcdFx0XHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcdTAwMjZsYXN0LCBcdTAwMjZjdXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODcwLVx0Y3VyLm9wcyA9IE5VTEw7IC8qIEZvcmNlIG1pZ3JhdGlvbiAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODcxOlx0ZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShkZXZtZW1fYWxsb2NhdGlvbiwgbWlncmF0ZS5zcmMsIG1pZ3JhdGUuZHN0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODcyLVx0XHRcdFx0XHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcdTAwMjZsYXN0LCBcdTAwMjZjdXIsIG1kZXRhaWxzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04ODYtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4ODc6XHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODg4LVx0XHRmb3IgKGkgPSBucGFnZXM7IGkgXHUwMDNjIG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTsgJiM0MzsmIzQzO2kpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEwLWVycl9mcmVlOlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTExOlx0ZHJtX3BhZ2VtYXBfemRkX3B1dCh6ZGQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEyLVx0a3ZmcmVlKGJ1Zik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTE4LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkxOTpFWFBPUlRfU1lNQk9MX0dQTChkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjAtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MjI6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgLSBQb3B1bGF0ZSBSQU0gUEZOcyBmb3IgYSBWTSBhcmVhXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjMtICogQHZhczogUG9pbnRlciB0byB0aGUgVk0gYXJlYSBzdHJ1Y3R1cmUsIGNhbiBiZSBOVUxMXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTM3LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTM4OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTM5LVx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2MS1cdFx0aWYgKGZhdWx0X3BhZ2UpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MjpcdFx0XHRpZiAoZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHNyY19wYWdlKSAhPVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTYzOlx0XHRcdCAgICBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEoZmF1bHRfcGFnZSkpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NjQtXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTc0LVx0XHQgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5NzU6XHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTc2LVx0XHQgKiB0aGV5IGluZGV4IHRoZSBmb2xpbyBmcm9tIEBpLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk4NTpcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4Ni1cdFx0XHRmb2xpbyA9IE5VTEw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3MC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzE6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDcyOnN0YXRpYyBMTElTVF9IRUFEKGRybV9wYWdlbWFwX3VuaG9sZF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzM6c3RhdGljIERFQ0xBUkVfV09SSyhkcm1fcGFnZW1hcF93b3JrLCBkcm1fcGFnZW1hcF9kZXZfdW5ob2xkX3dvcmspO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwNzUtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDc2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCAtIFN0cnVjdCB0byBhaWQgaW4gZHJtX2RldmljZSByZWxlYXNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3NzogKiBAbGluazogTGluayBpbnRvIGRybV9wYWdlbWFwX3VuaG9sZF9saXN0IGZvciBkZWZlcnJlZCByZWZlcmVuY2UgcmVsZWFzZXMuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc4LSAqIEBkcm06IGRybSBkZXZpY2UgdG8gcHV0LlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3OS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA4MDogKiBXaGVuIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIHJlbGVhc2VkLCB3ZSBhbHNvIG5lZWQgdG8gcmVsZWFzZSB0aGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwODEtICogcmVmZXJlbmNlIGl0IGhvbGRzIG9uIHRoZSBkcm0gZGV2aWNlLiBIb3dldmVyLCB0eXBpY2FsbHkgdGhhdCBuZWVkc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Mi0gKiB0byBiZSBkb25lIHNlcGFyYXRlbHkgZnJvbSBhIHN5c3RlbS13aWRlIHdvcmtxdWV1ZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODM6ICogRWFjaCB0aW1lIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIGluaXRpYWxpemVkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg0LSAqIChvciByZS1pbml0aWFsaXplZCBpZiBjYWNoZWQpIHRoZXJlZm9yZSBhbGxvY2F0ZSBhIHNlcGFyYXRlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDg1OiAqIGRybV9wYWdlbWFwX2Rldl9ob2xkIGl0ZW0sIGZyb20gd2hpY2ggd2UgcHV0IHRoZSBkcm0gZGV2aWNlIGFuZFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Ni0gKiBhc3NvY2lhdGVkIG1vZHVsZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwODctICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDg4OnN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg5LVx0c3RydWN0IGxsaXN0X25vZGUgbGluaztcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDkyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA5MzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk0LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTU6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpkcGFnZW1hcCksIHJlZik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDk2Olx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCA9IGRwYWdlbWFwLVx1MDAzZWRldl9ob2xkO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA5Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk5LVx0ICogV2Uga25vdyB0aGUgcGFnZW1hcCBwcm92aWRlciBpcyBhbGl2ZSBhdCB0aGlzIHBvaW50LCBzaW5jZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwMDpcdCAqIHRoZSBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTAxLVx0ICogcGFnZW1hcCBwcm92aWRlciBkcm1fZGV2aWNlIGFuZCBpdHMgbW9kdWxlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMDMtXHRkcGFnZW1hcC1cdTAwM2VkZXZfaG9sZCA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTA0Olx0ZHJtX3BhZ2VtYXBfc2hyaW5rZXJfYWRkKGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMDU6XHRsbGlzdF9hZGQoXHUwMDI2ZGV2X2hvbGQtXHUwMDNlbGluaywgXHUwMDI2ZHJtX3BhZ2VtYXBfdW5ob2xkX2xpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwNjpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZHJtX3BhZ2VtYXBfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA3LVx0Lypcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA5LVx0ICogcGFnZV9mcmVlKCksIHRoZSBjYWxsZXIgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSBvbiB0aGUgZGV2X3BhZ2VtYXAsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTEwOlx0ICogb3IgaWYgY2FsbGVkIGZyb20gZHJtX3BhZ2VtYXBfcHV0KCksIHRoZSBkaXJlY3QgY2FsbGVyIGlzIHN0aWxsIGFsaXZlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExMS1cdCAqIFRoaXMgZW5zdXJlcyB3ZSBjYW4mIzM5O3QgcmFjZSB3aXRoIFRISVMgbW9kdWxlIHVubG9hZC5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE0LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTExNTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9kZXZfdW5ob2xkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTE3Olx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRybV9wYWdlbWFwX3VuaG9sZF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTg6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKmRldl9ob2xkLCAqbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVx0LypcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XHQgKiBEZWZlcnJlZCByZWxlYXNlIG9mIGRybV9wYWdlbWFwIHByb3ZpZGVyIGRldmljZSBhbmQgbW9kdWxlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyMi1cdCAqIFRISVMgbW9kdWxlIGlzIGtlcHQgYWxpdmUgZHVyaW5nIHRoZSByZWxlYXNlIGJ5IHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMzpcdCAqIGZsdXNoX3dvcmsoKSBpbiB0aGUgZHJtX3BhZ2VtYXBfZXhpdCgpIGZ1bmN0aW9uLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyNC1cdCAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMzUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM2OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEzNzpkcm1fcGFnZW1hcF9kZXZfaG9sZChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzOC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM5Olx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNDAtXHRzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZHBhZ2VtYXAtXHUwMDNlZHJtO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNTQtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTU1OiAqIGRybV9wYWdlbWFwX3JlaW5pdCgpIC0gUmVpbml0aWFsaXplIGEgZHJtX3BhZ2VtYXBcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNTY6ICogQGRwYWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgdG8gcmVpbml0aWFsaXplXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU3LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTU4OiAqIFJlaW5pdGlhbGl6ZSBhIGRybV9wYWdlbWFwLCBmb3Igd2hpY2ggZHJtX3BhZ2VtYXBfcmVsZWFzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE1OS0gKiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gVGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2MDogKiBzaXR1YXRpb24gd2hlcmUgdGhlIGRyaXZlciBjYWNoZXMgYSBkZXN0cm95ZWQgZHJtX3BhZ2VtYXAuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTYxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNjQ6aW50IGRybV9wYWdlbWFwX3JlaW5pdChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY2Olx0ZHBhZ2VtYXAtXHUwMDNlZGV2X2hvbGQgPSBkcm1fcGFnZW1hcF9kZXZfaG9sZChkcGFnZW1hcCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY3LVx0aWYgKElTX0VSUihkcGFnZW1hcC1cdTAwM2VkZXZfaG9sZCkpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3Mi19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTczOkVYUE9SVF9TWU1CT0woZHJtX3BhZ2VtYXBfcmVpbml0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NjogKiBkcm1fcGFnZW1hcF9pbml0KCkgLSBJbml0aWFsaXplIGEgcHJlLWFsbG9jYXRlZCBkcm1fcGFnZW1hcFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NzogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byBpbml0aWFsaXplLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3OC0gKiBAcGFnZW1hcDogVGhlIGFzc29jaWF0ZWQgZGV2X3BhZ2VtYXAgcHJvdmlkaW5nIHRoZSBkZXZpY2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBkcm1fcGFnZW1hcC5jYCBhbmQgaXRzIHJvbGUuIFJpZ2h0IG5vdywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeGVgIGRyaXZlciB1dGlsaXplcyBpdCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYGRybV9ncHVzdm1gLiBCdXQgc29tZXRoaW5nJiMzOTtzIG5pZ2dsaW5nIGF0IG1lLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgb25seSBkcml2ZXIgaW52b2x2ZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYG5vdXZlYXVgIGRyaXZlciBkaXJlY3RvcnksIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIG9yIGZvcmdvdHRlbiBhIG51YW5jZWQgaW50ZXJhY3Rpb24uIEl0JiMzOTtzIGJlc3QgdG8gYmUgc3lzdGVtYXRpYywgYW5kIGRvdWJsZS1jaGVjaywgYW5kIG5vdCBsZXQgYXNzdW1wdGlvbnMgbGVhZCBtZSBhc3RyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBHcmFwaGljcyBEcml2ZXIgT3B0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGhpdHRpbmcgYSB3YWxsIHdpdGggYG5vdXZlYXVgLiBOb3RoaW5nJiMzOTtzIG1hdGNoaW5nIHVwIHRoZXJlLCB3aGljaCBpcyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyIGdpdmVuIHRoZSBleHBlY3RlZCBoYXJkd2FyZS4gT2theSwgbGV0JiMzOTtzIHBpdm90LiBJZiBgbm91dmVhdWAgaXNuJiMzOTt0IGNvb3BlcmF0aW5nLCB0aGVuIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGBhbWRncHVgLiBJdCYjMzk7cyBhIGtleSBkcml2ZXIgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZSBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vYW1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzOTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IHRoZSBjaGFuZ2VzIGluIGBkcm1fcGFnZW1hcC5jYCB3ZXJlIGRlYWQgY29kZSwgc2luY2UgdGhlIGB4ZWAgZHJpdmVyIGlzbiYjMzk7dCBwYXJ0IG9mIHN0YW5kYXJkIFN5emthbGxlciBmdXp6aW5nLiBJdCBuZWVkcyBzcGVjaWZpYyBJbnRlbCBYZSBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IHRoZSBTeXprYWxsZXIgZGVmYXVsdC4gQnV0IHdhaXQsIHRob3NlIGNoYW5nZXMgaW4gYGRybV9wYWdlbWFwLmNgIGFyZSAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUuIEJ1dCBJIHNlZSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYW5kIEkga25vdyBgdGVzdF9obW0uY2AgaXMgZnV6emVkLCBzbyAqdGhhdCogY29kZSBpcyByZWFjaGFibGUuCgpSaWdodCwgYHRlc3RfaG1tLmNgIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBjYWxscyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFNvIHRoZSBjb3JlIE1NIGNoYW5nZXMsIGxpa2UgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhcmUgKmRlZmluaXRlbHkqIGhpdCB3aGVuIGB0ZXN0X2htbWAgbWlncmF0ZXMgVEhQcy4gSSBjYW4gdHJ1c3QgdGhvc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBleGVjdXRlZCBhbmQgdGVzdGVkLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcnVuZG93biBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0aGF0IHdlcmUgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2U6CiogICBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZWAKKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgCiogICBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gCiogICBgX19taWdyYXRlX2RldmljZV9wYWdlc2AKKiAgIGBtaWdyYXRlX2RldmljZV9yYW5nZWAKKiAgIGBtaWdyYXRlX2RldmljZV9wZm5zYAoKT2theSwgdGhlIGxhc3QgdHdvLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXJlIGV4cG9ydGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGB0ZXN0X2htbWAgYWN0dWFsbHkgKnVzZXMqIHRoZW0gZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdXNlZnVsLiBMZXQgbWUgc2NhbiBgdGVzdF9obW0uY2AgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG4tLVxubGliL3Rlc3RfaG1tLmMtMjAwLVxubGliL3Rlc3RfaG1tLmM6MjAxOlx0bWlncmF0ZV9kZXZpY2VfcmFuZ2Uoc3JjX3BmbnMsIHN0YXJ0X3BmbiwgbnBhZ2VzKTtcbmxpYi90ZXN0X2htbS5jLTIwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSYjNDM7JiM0MzspIHtcbi0tXG5saWIvdGVzdF9obW0uYy0yMzEtXHR9XG5saWIvdGVzdF9obW0uYzoyMzI6XHRtaWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYzoyMzM6XHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYy0yMzQtXHRrdmZyZWUoc3JjX3BmbnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQyOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG1pZ3JhdGVfZGV2aWNlYCBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRlc3RfaG1tLmNgIGluZGVlZCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplYC4gVGhhdCBtZWFucyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IHRlc3QuIEV4Y2VsbGVudC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSAqa2V5KiBmdW5jdGlvbnMuIExldCYjMzk7cyBsaXN0IHRob3NlIGluaXRpYWxseTogYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBCdXQgd2FpdC4uLiBjaGVja2luZyB0aGUgY29kZSBhZ2FpbiBJIHNlZSB0aGF0IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AgYW5kIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhcmUgc3RhdGljLCBzbyB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQuCgpUaGVyZWZvcmUsIHRoZSBhY3R1YWxseSAqZXhwb3J0ZWQqIGZ1bmN0aW9ucyBhcmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gIE9rYXksIHNvIHRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBsaXN0IGFzIG15IEZvY3VzU3ltYm9scy4gSGFuZyBvbiwgdGhvdWdoIOKAkyBgbWlncmF0ZV92bWFfcGFnZXNgICppdHNlbGYqIGRvZXNuJiMzOTt0IGhhdmUgY2hhbmdlczsgaXQgY2FsbHMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgdGhhdCBpcyBzdGF0aWMuICBTbyBJIG9ubHkgbmVlZCB0byBsaXN0IGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXMgYmVpbmcgb2YgaW50ZXJlc3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gYENPTkZJR19URVNUX0hNTWAgaXMgb2J2aW91c2x5IG5lZWRlZCB0byBlbmFibGUgYHRlc3RfaG1tYC4gIEkgYWxzbyByZWNhbGwgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYmVpbmcgcmVxdWlyZWQgYnkgYG1pZ3JhdGVfZGV2aWNlLmNgLiBOZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGluIGBtbS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjIzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYFRFU1RfSE1NYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgVEVTVF9ITU1gLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGFueSBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgZm9yIGEgZGVidWctcmVsYXRlZCBvcHRpb24gbGlrZSB0aGlzLiBCeSBleGFtaW5pbmcgdGhhdCBmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgVEVTVF9ITU1gIGFjdHVhbGx5ICpkb2VzKiwgaG93IGl0JiMzOTtzIHVzZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBlbmFibGVkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUgdGhhdCYjMzk7cyB1c2luZyBpdC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBjb25maWd1cmF0aW9uLXJlbGF0ZWQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzM1My1cbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVEVTVF9ITU0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGBURVNUX0hNTWAgLSB0aGF0JiMzOTtzIGEga2V5IG1vZHVsZSwgb2J2aW91c2x5LiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgcnVubmluZyBpdCwgdHdlYWtpbmcgaXQsIG9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGEgdGhvcm91Z2ggZGVwZW5kZW5jeSBjaGVjay4gTm8gcG9pbnQgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlIHRyb3VibGVzaG9vdGluZyB1bmV4cGVjdGVkIHJlc3VsdHMgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4mIzM0OwoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzLCBtb2R1bGVzLCBhbmQgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBwcmVzZW50LCBjb3JyZWN0bHkgdmVyc2lvbmVkLCBhbmQgYWNjZXNzaWJsZS4gSXMgdGhlcmUgYSBkZWZpbmVkIGJ1aWxkIHByb2Nlc3Mgb3IgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IEkgbmVlZCB0byByZWZlciB0bz8gV2hhdCBhYm91dCBkYXRhIGZpbGVzPyBEb2VzIGl0IHJlbHkgb24gYW55IHNoYXJlZCBsaWJyYXJpZXMgb3IgY3VzdG9tIEMmIzQzOyYjNDM7IGNvZGUgdGhhdCYjMzk7cyBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgbW9kdWxlJiMzOTtzIG1hbmlmZXN0PyYjMzQ7IAoKRXNzZW50aWFsbHksICYjMzQ7SSYjMzk7bSBub3QgZ29pbmcgdG8gcHJvY2VlZCBiZWZvcmUgSSBoYXZlIGEgKnNvbGlkKiB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYFRFU1RfSE1NYCByZWxpZXMgdXBvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgZGVwZW5kZW5jaWVzIGZpbGUgdG8gY2hlY2sgb3IgYSBsaXN0IG9mIGltcG9ydHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUuJiMzNDsgRnJvbSB0aGVyZSwgSSB3aWxsIGxpa2VseSBmb3JtdWxhdGUgYSBwbGFuIHRvIHJ1biB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtURVNUX0hNTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjk1MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgRGVidWcgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYFRFU1RfSE1NYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBleGFtaW5pbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG9zc2libHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBkZWJ1ZyBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgYFRFU1RfSE1NYCBpbmZsdWVuY2VzIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGZlYXR1cmVzIGl0IGVuYWJsZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gdGhvcm91Z2hseSB0byBjb25maWRlbnRseSBjb25maWd1cmUgYW5kIHRyb3VibGVzaG9vdCBhbnkgSE1NIHJlbGF0ZWQgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGluIG15IHdvcmsuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7IGluIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1MDpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzUxOlx0XG4zMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzUzOlx0XG4zMzU0Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNTY6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNTc6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNTg6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzU5Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzYwOlx0XHRoZWxwXG4zMzYxOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM2MjpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzYzOlx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNjQ6XHRcbjMzNjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzNjY6XHRcbjMzNjc6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzY4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYFRFU1RfSE1NYCBoYXMgZGVwZW5kZW5jaWVzLCBzcGVjaWZpY2FsbHkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gTmF0dXJhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCB0aHJlZSBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgc28gSSYjMzk7bGwgaW5jbHVkZSBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uIEkgcmVtZW1iZXIgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIGl0ICpjb3VsZCogYmUgYnVpbHQgYXMgYSBtb2R1bGUuIEhvd2V2ZXIsIFN5emthbGxlciB1c3VhbGx5IHdvcmtzIGJlc3Qgd2hlbiBvcHRpb25zIGFyZSBlaXRoZXIgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLiBTbywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgU3l6a2FsbGVyICpzaG91bGQqIGxvYWQgaXQgYXMgbG9uZyBhcyB0aGUgbW9kdWxlIGlzIHByZXNlbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhcm91bmQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9taWdyYXRlX2RldmljZS5jYC4gSG1tLCBJJiMzOTtkIGJldHRlciBjb25maXJtIHRoYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDA3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLi4uIHRoYXQmIzM5O3MgdGhlIGtleSB0byBjb21waWxpbmcgYG1pZ3JhdGVfZGV2aWNlLmNgLiBNYWtlcyBzZW5zZSwgdGhlIGZpbGUgbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkZXBlbmRlbmNpZXMgKmVuYWJsZSogdGhpcyBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgdG8gc2VlIHdoYXQgcHVsbHMgaXQgaW4uIFdoYXQmIzM5O3MgdXBzdHJlYW0gdGhhdCBtYWtlcyB0aGlzIHBvc3NpYmxlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gR290dGEgZGlnIGEgbGl0dGxlIGRlZXBlciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjkxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGV2aWNlIE1pZ3JhdGlvbiBMb2dpYyBGbG93KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhhdCBkb3duLiBJdCYjMzk7cyBjbGVhcmx5IGEgY29tYmluYXRpb246IGl0ICptdXN0KiBpbnZvbHZlIGEgYE1JR1JBVElPTmAgcHJvY2VzcyBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYSBgWk9ORV9ERVZJQ0VgLiBGaW5lLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTWFrZXMgc2Vuc2UgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIHNjb3BlLgoKTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIGhlcmU/IExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0IGRlZmluZXMgYSBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbXBvbmVudCBpbiBkZXRhaWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERFVklDRV9NSUdSQVRJT05gLiBXaGF0IGRvZXMgdGhhdCB6b25lIHJlcHJlc2VudD8gV2hhdCBhcmUgdGhlIGtleSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHdpdGhpbiB0aGF0IHpvbmU/IFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDYxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRvdWJsZS1DaGVja2luZyB0aGUgYERFVklDRV9QUklWQVRFYCBWYXJpYWJsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYERFVklDRV9QUklWQVRFYCB2YXJpYWJsZS4gSXQmIzM5O3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBXZSYjMzk7dmUgZ290IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgYnV0IHdpdGggb3VyIGxldmVsIG9mIGNvbXBsZXhpdHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIHN0aWxsIGhhbmRsaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGNvcnJlY3RseS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIGhvdyBgREVWSUNFX1BSSVZBVEVgIGludGVyYWN0cyB3aXRoIHRoZSBzZWN1cml0eSBjb250ZXh0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgZGV2aWNlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgYXJlIHN0aWxsIGFzIGFudGljaXBhdGVkIGFuZCBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgcGFydGljdWxhcmx5IGFyb3VuZCBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBkYXRhIGxlYWthZ2UuIEdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiB0aGUgZGF0YSB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBpdCwgSSB3YW50IHRvIGJlIDEwMCUgY2VydGFpbiB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGxhc3QgcmV2aXNpb24gdG8gdGhlIGZpcm13YXJlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50cyBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHNwb3QtY2hlY2sgd2l0aCB0aGUgZGVidWdnZXIgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIGFib3V0IG1haW50YWluaW5nIHRoYXQgY3JpdGljYWwgbGV2ZWwgb2Ygcmlnb3IsIG5vdCBqdXN0IGFzc3VtaW5nIGl0JiMzOTtzIHNvbGlkIGJlY2F1c2UgaXQgKnNob3VsZCogYmUuIEl0JiMzOTtzIG15IGd1dCB0ZWxsaW5nIG1lIHRvIG1ha2Ugc3VyZSwgaXQganVzdCBuZXZlciBodXJ0cyB0byBiZSBleHRyYSBjYXV0aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTc0CgkJCQkJCQlvdXRwdXQ6IDMwNQoJCQkJCQkJdGhvdWdodHM6IDE3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTt2ZSBnb3QgZGVwZW5kZW5jaWVzLiBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBJZiBgVEVTVF9ITU1gIGlzIGVuYWJsZWQsIHdlJiMzOTtyZSBhbHNvIHB1bGxpbmcgaW4gYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgSSBzaG91bGQgYmUgdXNpbmcgZm9yIHRoaXMgbXVzdCBpbmNsdWRlIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUlHUkFUSU9OYC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGBkcm1fcGFnZW1hcC5jYCBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBkcm1fZ3B1c3ZtYCwgd2hpY2ggdGhlIGB4ZWAgZHJpdmVyIHV0aWxpemVzLiBTaW5jZSB3ZSYjMzk7cmUgbm90IGZ1enppbmcgdGhlIGB4ZWAgZHJpdmVyLCB0aGF0JiMzOTtzIGxpa2VseSBhIGRlYWQgZW5kIGZvciBvdXIgcHVycG9zZXMuIEhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbnMgZm9yIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgYHRlc3RfaG1tLmNgIG1vZHVsZSwgd2hpY2ggaXMgYWN0aXZlbHkgZnV6emVkIGJ5IFN5emthbGxlci4gVGhlc2UgY2hhbmdlcyBmb2N1cyBvbiBoYW5kbGluZyBUSFAgc3BsaXR0aW5nIGR1cmluZyBkZXZpY2UgbWlncmF0aW9uIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbSBvciBhbGxvY2F0aW9uIGZhaWxzLiBGdW5jdGlvbmFsbHkgdGhhdCYjMzk7cyBwZXJmZWN0IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgc2luY2UgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIHRoZXJlIGFzIHdlbGwuIFdhaXQsIGBtaWdyYXRlX3ZtYV9wYWdlc2AgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYHRlc3RfaG1tLmNgIHNwZWNpZmljYWxseSBpbiBmdW5jdGlvbnMgc3VjaCBhcyBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAgYW5kIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCB3aGVyZWFzIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgaXMgdXNlZCBieSBgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmtgLiBTbywgYWxsIG9mIHRoZW0gYXJlIHJlYWNoYWJsZS4KClF1aWNrIHNhbml0eSBjaGVjazogaXMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBzdGF0aWM/IFllcywgaXQgaXMuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0OiBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGUgYGRybV9wYWdlbWFwLmNgIGNvZGUgbWlnaHQgYmUgcmVhY2hhYmxlIHZpYSBhbm90aGVyIHJvdXRlLiBPa2F5LCBgZHJtX3BhZ2VtYXAuY2AgaGFzIGBkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdGAgd2hpY2ggcmVnaXN0ZXJzIGEgZGVidWdmcyBmaWxlLiBBaCwgSSBzZWU6IGBkcm1fcGFnZW1hcC5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5IHdpdGggYENPTkZJR19aT05FX0RFVklDRWAgZW5hYmxlZCBhbmQgYGRybV9ncHVzdm1faGVscGVyYCBzZWxlY3RlZCwgd2hpY2ggaW4gdHVybiBpcyBzZWxlY3RlZCBieSBgQ09ORklHX0RSTV9HUFVTVk1gIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAuIFNvIGlmIGBDT05GSUdfRFJNX1hFX0dQVVNWTWAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYGRybV9wYWdlbWFwLmNgIHdvbiYjMzk7dCBiZSBjb21waWxlZC4gQ291bGQgYENPTkZJR19EUk1fWEVgIGJlIGVuYWJsZWQgaW4gU3l6a2FsbGVyPyBVc3VhbGx5IGl0IGVuYWJsZXMgYWxsIGRyaXZlcnMsIHNvIHByb2JhYmx5LiBJZiBpdCBpcyBlbmFibGVkLCBgZHJtX3BhZ2VtYXAuY2AgKndvdWxkKiBjb21waWxlLiBCdXQgZXZlbiB0aGVuLCB0aG9zZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLiBTaW5jZSB3ZSYjMzk7cmUgdW5saWtlbHkgdG8gaGF2ZSBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSwgdGhhdCBkcml2ZXIgd29uJiMzOTt0IHByb2JlLCBhbmQgdGhvc2UgZnVuY3Rpb25zIHdvdWxkbiYjMzk7dCBiZSBjYWxsZWQuIFNvLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYHRlc3RfaG1tLmNgLgoKVG8gc3VtbWFyaXplOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBoYW5kbGUgVEhQIHNwbGl0dGluZyBkdXJpbmcgZGV2aWNlIG1pZ3JhdGlvbi4gSXQgYWxzbyB0b3VjaGVzIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgZm9yIGZhdWx0IGluamVjdGlvbiB0ZXN0aW5nLCB0aG91Z2ggdGhhdCBwYXJ0IGlzIHVucmVhY2hhYmxlIGZvciB1cy4gVGhlIGNvcmUgTU0gY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLCBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBUaGUgZHJpdmVyIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHdoaWNoIHRyaWdnZXJzIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuCgpTbyB0aGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYCBhcmUgd2hhdCBJIG5lZWQ6Ci0gYFRFU1RfSE1NYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKLSBgREVWSUNFX1BSSVZBVEVgCi0gYFpPTkVfREVWSUNFYAotIGBNSUdSQVRJT05gCgpNeSBtYWluIEZvY3VzU3ltYm9scyBhcmU6Ci0gYG1pZ3JhdGVfdm1hX3BhZ2VzYAotIGBtaWdyYXRlX2RldmljZV9wYWdlc2AKLSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgCi0gYG1pZ3JhdGVfZGV2aWNlX3BmbnNgCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGZucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1NIGRldmljZSBtaWdyYXRpb24gbG9naWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIHN1cHBvcnQgc3BsaXR0aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdoZW4gbWlncmF0aW5nIHRvIGRldmljZSBtZW1vcnkgaWYgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgVEhQcyBvciB0aGUgYWxsb2NhdGlvbiBmYWlscy4gSXQgYWxzbyBhZGRzIGZhdWx0IGluamVjdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIHRvIHRlc3QgdGhpcyBmYWxsYmFjay4gV2hpbGUgdGhlIERSTSBwYWdlbWFwIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBYZSBkcml2ZXIgKHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBpcyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzKSwgdGhlIGNvcmUgTU0gY2hhbmdlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYHRlc3RfaG1tYCBwc2V1ZG8tZGV2aWNlIGRyaXZlci4gU3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBgdGVzdF9obW1gLCB3aGljaCBjYW4gbWFwIFRIUHMgYW5kIG1pZ3JhdGUgdGhlbSB0byBkZXZpY2UgbWVtb3J5LCB0cmlnZ2VyaW5nIHRoZSBtb2RpZmllZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHBhdGhzLiBUaGUgYHRlc3RfaG1tYCBkcml2ZXIgZXZlbiBoYXMgYSBzcGVjaWZpYyBmbGFnIChgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCkgdG8gc2ltdWxhdGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggd2lsbCBkaXJlY3RseSBleGVyY2lzZSB0aGUgbmV3IFRIUCBzcGxpdHRpbmcgZmFsbGJhY2sgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6MzIuOTYzMjk1MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY2MTc4ODUyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wYWdlc1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcmFuZ2VcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BmbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1NIGRldmljZSBtaWdyYXRpb24gbG9naWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIHN1cHBvcnQgc3BsaXR0aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdoZW4gbWlncmF0aW5nIHRvIGRldmljZSBtZW1vcnkgaWYgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgVEhQcyBvciB0aGUgYWxsb2NhdGlvbiBmYWlscy4gSXQgYWxzbyBhZGRzIGZhdWx0IGluamVjdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIHRvIHRlc3QgdGhpcyBmYWxsYmFjay4gV2hpbGUgdGhlIERSTSBwYWdlbWFwIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBYZSBkcml2ZXIgKHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBpcyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzKSwgdGhlIGNvcmUgTU0gY2hhbmdlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYHRlc3RfaG1tYCBwc2V1ZG8tZGV2aWNlIGRyaXZlci4gU3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBgdGVzdF9obW1gLCB3aGljaCBjYW4gbWFwIFRIUHMgYW5kIG1pZ3JhdGUgdGhlbSB0byBkZXZpY2UgbWVtb3J5LCB0cmlnZ2VyaW5nIHRoZSBtb2RpZmllZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHBhdGhzLiBUaGUgYHRlc3RfaG1tYCBkcml2ZXIgZXZlbiBoYXMgYSBzcGVjaWZpYyBmbGFnIChgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCkgdG8gc2ltdWxhdGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggd2lsbCBkaXJlY3RseSBleGVyY2lzZSB0aGUgbmV3IFRIUCBzcGxpdHRpbmcgZmFsbGJhY2sgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjMyLjk2MzMwMjU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMyNTkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTk1ZmY1YzliMjdlMTgzNTgwMWExYmE4YWQ1MjE5YjRhM2I3MGNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xcbmluZGV4IDg5MmIzMjVmYTk5YjguLjZhZThjOWFhMzZjY2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAgKiBDb3B5cmlnaHQgwqkgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1mZW5jZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG5AQCAtMTIsNiArMTMsMjcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcF91dGlsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX3ByaW50LmhcXHUwMDNlXFxuIFxcbisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuK3N0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcXG4rXFxuKy8qXFxuKyAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxcbisgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSwgZXhlcmNpc2luZyB0aGUgb3JkZXItMCBmYWxsYmFja1xcbisgKiAoYW5kLCBpbiB0dXJuLCB0aGUgVEhQIHNwbGl0IHBhdGggaW4gX19taWdyYXRlX2RldmljZV9wYWdlcygpKSB3aXRob3V0XFxuKyAqIGhhdmluZyB0byBkcml2ZSB0aGUgc3lzdGVtIGludG8gYWN0dWFsIG1lbW9yeSBwcmVzc3VyZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzaG91bGRfZmFpbChcXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogRE9DOiBPdmVydmlld1xcbiAgKlxcbkBAIC0zODMsNiArNDA1LDU4IEBAIGRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxcbisgKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxcbisgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcXG4rICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnNcXG4rICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheXNcXG4rICpcXG4rICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uXFxuKyAqXFxuKyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXFxuKyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxcbisgKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcXG4rICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cXG4rICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXFxuKyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCB0aGUgc291cmNlIGZvbGlvIGl0c2VsZiBpcyBvbmx5IHNwbGl0IGxhdGVyLCBieVxcbisgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXFxuKyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmRzdF9tcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX21wZm5baV0pO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGosIG5yO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7XFxuK1xcdFxcdG5yID0gTlJfUEFHRVMob3JkZXIpO1xcbitcXG4rXFx0XFx0aWYgKG9yZGVyIFxcdTAwMjZcXHUwMDI2ICEoZHN0X21wZm5baV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IGkgKyBqIFxcdTAwM2MgbnBhZ2VzOyBqKyspXFxuK1xcdFxcdFxcdFxcdHBhZ2VzW2kgKyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhZ2VzW2ldID0gcGFnZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aSArPSBucjtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXFxuICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZFxcbkBAIC04NzUsNiArOTQ5LDcgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKnNyY19wYWdlO1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbitcXHRcXHRnZnBfdCBnZnAgPSBHRlBfSElHSFVTRVI7XFxuIFxcbiBcXHRcXHRpZiAoIShzcmNfbXBmbltpXSBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuQEAgLTg5MSwxMSArOTY2LDUzIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbiBcXG4gXFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7XFxuIFxcbi1cXHRcXHQvKiBUT0RPOiBTdXBwb3J0IGZhbGxiYWNrIHRvIHNpbmdsZSBwYWdlcyBpZiBUSFAgYWxsb2NhdGlvbiBmYWlscyAqL1xcbi1cXHRcXHRpZiAodmFzKVxcbi1cXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhHRlBfSElHSFVTRVIsIG9yZGVyLCB2YXMsIGFkZHIpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxcbitcXHRcXHQgKiBwYWdlLCBQTUQgYWxpZ25lZCBhbmQgZmxhZ2dlZCBNSUdSQVRFX1BGTl9DT01QT1VORDogYW55dGhpbmdcXG4rXFx0XFx0ICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5XFxuK1xcdFxcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcXG4rXFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbitcXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG4rXFx0XFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdBUk5fT05fT05DRShvcmRlciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxcbitcXHRcXHRcXHQgICAgICAhKHNyY19tcGZuW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSk7XFxuK1xcbitcXHRcXHRpZiAob3JkZXIpXFxuK1xcdFxcdFxcdGdmcCB8PSBfX0dGUF9OT1dBUk47XFxuK1xcbitcXHRcXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKCkpXFxuK1xcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4rXFx0XFx0ZWxzZSBpZiAodmFzKVxcbitcXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2MoR0ZQX0hJR0hVU0VSLCBvcmRlcik7XFxuK1xcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2MoZ2ZwLCBvcmRlcik7XFxuK1xcbitcXHRcXHRpZiAoIWZvbGlvIFxcdTAwMjZcXHUwMDI2IG9yZGVyKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEhpZ2hlci1vcmRlciBhbGxvY2F0aW9uIGZhaWxlZCwgZmFsbCBiYWNrIHRvXFxuK1xcdFxcdFxcdCAqIG9yZGVyLTAgYWxsb2NhdGlvbnMgZm9yIHRoZSBlbnRpcmUgcmFuZ2UgY292ZXJlZFxcbitcXHRcXHRcXHQgKiBieSB0aGUgb3JpZ2luYWwgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb24sIHdpdGhvdXRcXG4rXFx0XFx0XFx0ICogc2V0dGluZyBNSUdSQVRFX1BGTl9DT01QT1VORCwgdW50aWwgd2UgbW92ZSBwYXN0XFxuK1xcdFxcdFxcdCAqIHRoYXQgcmFuZ2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yID0gTlJfUEFHRVMob3JkZXIpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGo7XFxuK1xcbitcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfl9fR0ZQX05PV0FSTjtcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBucGFnZXM7IGorKywgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRmb2xpbyA9IHZhcyA/XFxuK1xcdFxcdFxcdFxcdFxcdHZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOlxcbitcXHRcXHRcXHRcXHRcXHRmb2xpb19hbGxvYyhnZnAsIDApO1xcbitcXHRcXHRcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcbitcXHRcXHRcXHRcXHRwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XFxuK1xcdFxcdFxcdFxcdG1wZm5baV0gPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihwYWdlKSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghZm9saW8pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9wYWdlcztcXG5AQCAtOTQwLDExICsxMDU3LDExIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbiBcXHRcXHRpZiAoIXBhZ2UpXFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9wdXQ7XFxuIFxcbitcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xcbitcXG4gXFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuIFxcdFxcdG1wZm5baV0gPSAwO1xcbiBcXG4tXFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4tXFxuIG5leHRfcHV0OlxcbiBcXHRcXHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcXG4gXFx0fVxcbkBAIC0xMTIwLDcgKzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbiBcXHR1bnNpZ25lZCBsb25nICpzcmMsICpkc3Q7XFxuIFxcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7XFxuIFxcdHZvaWQgKmJ1ZjtcXG4tXFx0aW50IGksIGVyciA9IDA7XFxuK1xcdGludCBlcnIgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyO1xcbiBcXG4gXFx0bnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5AQCAtMTE2MCwyNyArMTI3NywxOSBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maW5hbGl6ZTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7KSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XFxuLVxcbi1cXHRcXHRwYWdlc1tpXSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjW2ldKTtcXG4tXFx0XFx0aWYgKHBhZ2VzW2ldKVxcbi1cXHRcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcXG4tXFxuLVxcdFxcdGkgKz0gTlJfUEFHRVMob3JkZXIpO1xcbi1cXHR9XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBzcmMsIGRzdCwgbnBhZ2VzKTtcXG4gXFxuIFxcdGVyciA9IG9wcy1cXHUwMDNlY29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZmluYWxpemU7XFxuIFxcbiBlcnJfZmluYWxpemU6XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0RE1BX0ZST01fREVWSUNFLCBcXHUwMDI2c3RhdGUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7XFxuIFxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xcbiBcXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmMsIGRzdCwgbnBhZ2VzKTtcXG4tXFx0ZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRETUFfRlJPTV9ERVZJQ0UsIFxcdTAwMjZzdGF0ZSk7XFxuIFxcbiBlcnJfZnJlZTpcXG4gXFx0a3ZmcmVlKGJ1Zik7XFxuQEAgLTEyMzUsNyArMTM0NCw3IEBAIHN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4gXFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcbiBcXHR2b2lkICpidWY7XFxuLVxcdGludCBpLCBlcnIgPSAwO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdHpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcXG4gXFx0aWYgKHRpbWVfYmVmb3JlNjQoZ2V0X2ppZmZpZXNfNjQoKSwgemRkLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNldGltZXNsaWNlX2V4cGlyYXRpb24pKVxcbkBAIC0xMjkwLDI5ICsxMzk5LDIyIEBAIHN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZmluYWxpemU7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbi1cXG4tXFx0XFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcXG4tXFx0XFx0aWYgKHBhZ2VzW2ldKVxcbi1cXHRcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcXG4tXFxuLVxcdFxcdGkgKz0gTlJfUEFHRVMob3JkZXIpO1xcbi1cXHR9XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBucGFnZXMpO1xcbiBcXG4gXFx0ZXJyID0gb3BzLVxcdTAwM2Vjb3B5X3RvX3JhbShwYWdlcywgcGFnZW1hcF9hZGRyLCBucGFnZXMsIE5VTEwpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maW5hbGl6ZTtcXG4gXFxuIGVycl9maW5hbGl6ZTpcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0ZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMobnBhZ2VzLCBtaWdyYXRlLmRzdCk7XFxuLVxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG4tXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbiBcXHRpZiAoZGV2KVxcbiBcXHRcXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bnBhZ2VzLCBETUFfRlJPTV9ERVZJQ0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbitcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuK1xcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFxcdTAwMjZtaWdyYXRlKTtcXG4gZXJyX2ZyZWU6XFxuIFxcdGt2ZnJlZShidWYpO1xcbiBlcnJfb3V0OlxcbkBAIC0xNDc2LDYgKzE1NzgsMTYgQEAgdm9pZCBkcm1fcGFnZW1hcF9kZXN0cm95KHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIGJvb2wgaXNfYXRvbWljX29yX3JlY2xhaW1cXG4gXFx0XFx0a2ZyZWUoZHBhZ2VtYXApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9faW5pdCBkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdCh2b2lkKVxcbit7XFxuKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKVxcbitcXHRmYXVsdF9jcmVhdGVfZGVidWdmc19hdHRyKFxcXCJkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RcXFwiLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rbW9kdWxlX2luaXQoZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQpO1xcbitcXG4gc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNmRybV9wYWdlbWFwX3dvcmspO1xcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbmluZGV4IDkwOGQyZDRlYzQzYWMuLmFlMTdiZDUxNmQyNDggMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtODk5LDIyICs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIFBWTVdfU1lOQyB8IFBWTVdfTUlHUkFUSU9OKTtcXG4rXFxuK1xcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG4rXFx0XFx0aWYgKHB2bXcucHRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuK1xcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGVtb3RlIHdpdGggZnJlZXplID0gZmFsc2U6IHRoZSBQTUQgYWxyZWFkeSBob2xkcyBhXFxuK1xcdFxcdCAqIG1pZ3JhdGlvbiBlbnRyeSwgc28gX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoKSBjcmVhdGVzIFBURVxcbitcXHRcXHQgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50XFxuK1xcdFxcdCAqIGFsb25lLiBUaGVyZSBpcyBhdCBtb3N0IG9uZSBQTUQgbWFwcGluZyBAZm9saW8gcGVyIFZNQSwgc29cXG4rXFx0XFx0ICogc3RvcCB0aGUgd2FsayBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3BsaXRfaHVnZV9wbWRfYWRkcmVzcyh2bWEsIGFkZHIsIGZhbHNlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLlxcbisgKlxcbisgKiBtaWdyYXRlX2RldmljZV91bm1hcCgpIHVubWFwcyB3aXRoIHRyeV90b19taWdyYXRlKGZvbGlvLCAwKSwgaS5lLiB3aXRob3V0XFxuKyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlclxcbisgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxcbisgKiBvZiB0aGVtLiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIGJlbG93IGRvZXMgbm90IGNhcmUsIGl0IG9ubHkgbG9va3MgYXQgdGhlXFxuKyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkXFxuKyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cXG4rICogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgdHJpcHMgb3ZlciB0aGF0IGluIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbitcXHRcXHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxcbitcXHR9O1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG8gbm90IHBhc3MgLmFub25fbG9jazogZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKCkgcmVxdWlyZXNcXG4rXFx0ICogZm9saW9fbWFwcGVkKCksIGFuZCBAZm9saW8gaXMgYWxyZWFkeSBmdWxseSB1bm1hcHBlZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0cm1hcF93YWxrKGZvbGlvLCBcXHUwMDI2cndjKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGlkeCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgZmF1bHRfZm9saW87XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogdGFrZSBhIHJlZmVyZW5jZSwgc2luY2Ugc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHdpdGggZnJlZXplID0gdHJ1ZVxcbi1cXHQgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLlxcbitcXHQgKiBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoKSB3YWxrcyB0aGUgcm1hcCwgYW5kXFxuK1xcdCAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdFxcbitcXHQgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlXFxuK1xcdCAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKVxcbitcXHQgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS5cXG4gXFx0ICovXFxuLVxcdGZvbGlvX2dldChmb2xpbyk7XFxuLVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgQ1BVIGZhdWx0IG9uIGEgZGV2aWNlIHByaXZhdGUgUE1EIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiB0aGVcXG4rXFx0ICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKClcXG4rXFx0ICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5c1xcbitcXHQgKiBmYWlsIHdpdGggLUVBR0FJTiB3aGlsZSB0aGlzIGZhdWx0IHJlZmVyZW5jZSBpcyBoZWxkLlxcbitcXHQgKlxcbitcXHQgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1EXFxuK1xcdCAqIGVudHJ5LCBzbyBpdCBpcyBhbHdheXMgdGhlIGhlYWQgcGFnZSBvZiBAZm9saW8sIGFuZCB0aGVyZWZvcmUgYWx3YXlzXFxuK1xcdCAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wXFxuK1xcdCAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpb1xcbitcXHQgKiBhZnRlcndhcmRzLCBsZWF2aW5nIHRoZSByZWZlcmVuY2UgZXhhY3RseSB3aGVyZSBpdCBpcyBleHBlY3RlZCB0byBiZVxcbitcXHQgKiByZWxlYXNlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlXFxuK1xcdCAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC5cXG4rXFx0ICovXFxuK1xcdGZhdWx0X2ZvbGlvID0gbWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRwYWdlX2ZvbGlvKG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpID09IGZvbGlvO1xcbitcXG4rXFx0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcXG4rXFxuK1xcdGlmIChmYXVsdF9mb2xpbylcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0cmV0ID0gZm9saW9fc3BsaXRfdW5tYXBwZWQoZm9saW8sIDApO1xcbitcXHRpZiAoZmF1bHRfZm9saW8pXFxuK1xcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRtaWdyYXRlLVxcdTAwM2VzcmNbaWR4XSBcXHUwMDI2PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuQEAgLTkzNSw3ICsxMDE3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTEwMyw3ICsxMTg1LDYgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4gXFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqO1xcbiBcXHRib29sIG5vdGlmaWVkID0gZmFsc2U7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7ICkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaV0pO1xcbkBAIC0xMTc3LDEyICsxMjU4LDE4IEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRuciA9IDEgXFx1MDAzY1xcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRhZGRyID0gbWlncmF0ZS1cXHUwMDNlc3RhcnQgKyBpICogUEFHRV9TSVpFO1xcbi1cXHRcXHRcXHRcXHRpZiAobWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8obWlncmF0ZSwgaSwgYWRkciwgZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0c3JjX3BmbnNbaV0gXFx1MDAyNj0gfihNSUdSQVRFX1BGTl9NSUdSQVRFIHxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiByZXNldCBuciBzbyB0aGF0IG9ubHkgZmlyc3QgYWZ0ZXItc3BsaXQgZm9saW9cXG4rXFx0XFx0XFx0XFx0ICogaXMgcHJvY2Vzc2VkIGJlbG93XFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpO1xcbitcXHRcXHRcXHRcXHRuciA9IDE7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoKHNyY19wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0KGRzdF9wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCEoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG5AQCAtMTIyMiw2ICsxMzA5LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuIFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19wZm5zW2kral0pKTtcXG4gXFx0XFx0XFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaStqXSkpO1xcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxcbitcXHRcXHRcXHQgKiBjYWNoZS4gUmVmcmVzaCB0aGUgc2F2ZWQgbWFwcGluZyBiZWZvcmUgbWlncmF0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXG4gXFx0XFx0XFx0ciA9IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhtYXBwaW5nLCBuZXdmb2xpbywgZm9saW8sIGV4dHJhX2NudCk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRcXHRzcmNfcGZuc1tpK2pdIFxcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xcbkBAIC0xNDAyLDcgKzE0OTUsNyBAQCBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRcXHRpZiAobnIgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdFxcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgbnI7IGorKylcXG4rXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IChpICsgaikgXFx1MDAzYyBucGFnZXM7IGorKylcXG4gXFx0XFx0XFx0XFx0c3JjX3BmbnNbaStqXSA9IDA7XFxuIFxcdFxcdFxcdGkgKz0gaiAtIDE7XFxuIFxcdFxcdFxcdHBmbiArPSBqIC0gMTtcXG5AQCAtMTQzNiw3ICsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbiBcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbiBcXHRcXHRcXHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yOyBqKyspXFxuK1xcdFxcdFxcdGZvciAoaiA9IDE7IGogXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiAoaSArIGopIFxcdTAwM2MgbnBhZ2VzOyBqKyspXFxuIFxcdFxcdFxcdFxcdHNyY19wZm5zW2kral0gPSAwO1xcbiBcXHRcXHRcXHRpICs9IGogLSAxO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjMzLjQyNzE3MjM4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NjE1Mzk5OTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG5pbmRleCA4OTJiMzI1ZmE5OWI4Li42YWU4YzlhYTM2Y2NiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb3B5cmlnaHQgwqkgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWZlbmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtMTIsNiArMTMsMjcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXBfdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9wcmludC5oXHUwMDNlXG4gXG4rI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuK3N0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbitcbisvKlxuKyAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxuKyAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpLCBleGVyY2lzaW5nIHRoZSBvcmRlci0wIGZhbGxiYWNrXG4rICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuKyAqIGhhdmluZyB0byBkcml2ZSB0aGUgc3lzdGVtIGludG8gYWN0dWFsIG1lbW9yeSBwcmVzc3VyZS5cbisgKi9cbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbit7XG4rXHRyZXR1cm4gc2hvdWxkX2ZhaWwoXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuIC8qKlxuICAqIERPQzogT3ZlcnZpZXdcbiAgKlxuQEAgLTM4Myw2ICs0MDUsNTggQEAgZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIC0gUG9wdWxhdGUgdGhlIHNvdXJjZSBwYWdlIGFycmF5XG4rICogQHBhZ2VzOiBBcnJheSBvZiBzb3VyY2UgcGFnZXMgdG8gcG9wdWxhdGVcbisgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbisgKiBAZHN0X21wZm46IERlc3RpbmF0aW9uIGFycmF5IG9mIG1pZ3JhdGUgUEZOc1xuKyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlzXG4rICpcbisgKiBQb3B1bGF0ZSBAcGFnZXMgd2l0aCB0aGUgZGV2aWNlIHBhZ2VzIHRoZSBjb3B5IGNhbGxiYWNrIGlzIHRvIHJlYWQgZnJvbS5cbisgKlxuKyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXG4rICogdGhlIGNvcHkgY2FsbGJhY2sgZGVyaXZpbmcgdGhlIHJlc3Qgb2YgdGhlIGZvbGlvIGZyb20gdGhlIG9yZGVyIHJlY29yZGVkIGluXG4rICogdGhlIGNvcnJlc3BvbmRpbmcgZHJtX3BhZ2VtYXBfYWRkci4gVGhhdCBkb2VzIG5vdCB3b3JrIHdoZXJlXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcbisgKiBmb2xpbyB0byBvcmRlci0wIGRlc3RpbmF0aW9uIGZvbGlvczogdGhlIGRybV9wYWdlbWFwX2FkZHIgZW50cmllcyBhcmUgdGhlblxuKyAqIHBlci1wYWdlLCBhbmQgdGhlIGNvcHkgY2FsbGJhY2sgbmVlZHMgYSBzb3VyY2UgcGFnZSBmb3IgZWFjaCBvZiB0aGVtLlxuKyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXG4rICpcbisgKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcbisgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG4rICogZGV0ZWN0IHRoZSBkZW1vdGlvbiAtIHRoZSBkZXN0aW5hdGlvbiBoYXMgdG8gYmUgaW5zcGVjdGVkIGluc3RlYWQuXG4rICovXG4rc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcmNfbXBmbixcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpkc3RfbXBmbixcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7KSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfbXBmbltpXSk7XG4rXHRcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaiwgbnI7XG4rXG4rXHRcdGlmICghcGFnZSkge1xuK1x0XHRcdGkrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0XHRuciA9IE5SX1BBR0VTKG9yZGVyKTtcbitcbitcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiAhKGRzdF9tcGZuW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcbitcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgaSArIGogXHUwMDNjIG5wYWdlczsgaisrKVxuK1x0XHRcdFx0cGFnZXNbaSArIGpdID0gZm9saW9fcGFnZShwYWdlX2ZvbGlvKHBhZ2UpLCBqKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYWdlc1tpXSA9IHBhZ2U7XG4rXHRcdH1cbitcbitcdFx0aSArPSBucjtcbitcdH1cbit9XG4rXG4gLyoqXG4gICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXG4gICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXG5AQCAtODc1LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEwsICpzcmNfcGFnZTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbitcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0hJR0hVU0VSO1xuIFxuIFx0XHRpZiAoIShzcmNfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTg5MSwxMSArOTY2LDUzIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFxuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8oc3JjX3BhZ2UpKTtcbiBcbi1cdFx0LyogVE9ETzogU3VwcG9ydCBmYWxsYmFjayB0byBzaW5nbGUgcGFnZXMgaWYgVEhQIGFsbG9jYXRpb24gZmFpbHMgKi9cbi1cdFx0aWYgKHZhcylcbi1cdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhHRlBfSElHSFVTRVIsIG9yZGVyLCB2YXMsIGFkZHIpO1xuK1x0XHQvKlxuK1x0XHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxuK1x0XHQgKiBwYWdlLCBQTUQgYWxpZ25lZCBhbmQgZmxhZ2dlZCBNSUdSQVRFX1BGTl9DT01QT1VORDogYW55dGhpbmdcbitcdFx0ICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5XG4rXHRcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcbitcdFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxuK1x0XHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcbitcdFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRShvcmRlciBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxuK1x0XHRcdCAgICAgICEoc3JjX21wZm5baV0gXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkpO1xuK1xuK1x0XHRpZiAob3JkZXIpXG4rXHRcdFx0Z2ZwIHw9IF9fR0ZQX05PV0FSTjtcbitcbitcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbitcdFx0XHRmb2xpbyA9IE5VTEw7XG4rXHRcdGVsc2UgaWYgKHZhcylcbitcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xuIFx0XHRlbHNlXG4tXHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTtcbitcdFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCwgb3JkZXIpO1xuK1xuK1x0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiBvcmRlcikge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSGlnaGVyLW9yZGVyIGFsbG9jYXRpb24gZmFpbGVkLCBmYWxsIGJhY2sgdG9cbitcdFx0XHQgKiBvcmRlci0wIGFsbG9jYXRpb25zIGZvciB0aGUgZW50aXJlIHJhbmdlIGNvdmVyZWRcbitcdFx0XHQgKiBieSB0aGUgb3JpZ2luYWwgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb24sIHdpdGhvdXRcbitcdFx0XHQgKiBzZXR0aW5nIE1JR1JBVEVfUEZOX0NPTVBPVU5ELCB1bnRpbCB3ZSBtb3ZlIHBhc3RcbitcdFx0XHQgKiB0aGF0IHJhbmdlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnIgPSBOUl9QQUdFUyhvcmRlcik7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBqO1xuK1xuK1x0XHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9OT1dBUk47XG4rXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIG5wYWdlczsgaisrLCBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdFx0XHRmb2xpbyA9IHZhcyA/XG4rXHRcdFx0XHRcdHZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOlxuK1x0XHRcdFx0XHRmb2xpb19hbGxvYyhnZnAsIDApO1xuK1x0XHRcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuK1xuK1x0XHRcdFx0cGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuK1x0XHRcdFx0bXBmbltpXSA9IG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKCFmb2xpbylcbiBcdFx0XHRnb3RvIGZyZWVfcGFnZXM7XG5AQCAtOTQwLDExICsxMDU3LDExIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0XHRpZiAoIXBhZ2UpXG4gXHRcdFx0Z290byBuZXh0X3B1dDtcbiBcbitcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcbiBcdFx0cHV0X3BhZ2UocGFnZSk7XG4gXHRcdG1wZm5baV0gPSAwO1xuIFxuLVx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xuLVxuIG5leHRfcHV0OlxuIFx0XHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcbiBcdH1cbkBAIC0xMTIwLDcgKzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuIFx0dW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0O1xuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuK1x0aW50IGVyciA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyO1xuIFxuIFx0bnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbkBAIC0xMTYwLDI3ICsxMjc3LDE5IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKHNyY1tpXSk7XG4tXHRcdGlmIChwYWdlc1tpXSlcbi1cdFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcbi1cbi1cdFx0aSArPSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4rXHRkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcyhwYWdlcywgc3JjLCBkc3QsIG5wYWdlcyk7XG4gXG4gXHRlcnIgPSBvcHMtXHUwMDNlY29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbmFsaXplO1xuIFxuIGVycl9maW5hbGl6ZTpcbitcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLFxuK1x0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UsIFx1MDAyNnN0YXRlKTtcbiBcdGlmIChlcnIpXG4gXHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcbiBcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xuIFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcbi1cdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFLCBcdTAwMjZzdGF0ZSk7XG4gXG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbkBAIC0xMjM1LDcgKzEzNDQsNyBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuIFx0dm9pZCAqYnVmO1xuLVx0aW50IGksIGVyciA9IDA7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdHpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcbiBcdGlmICh0aW1lX2JlZm9yZTY0KGdldF9qaWZmaWVzXzY0KCksIHpkZC1cdTAwM2VkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2V0aW1lc2xpY2VfZXhwaXJhdGlvbikpXG5AQCAtMTI5MCwyOSArMTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcbi1cdH1cbitcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsXG4rXHRcdFx0XHRcdCAgICAgICBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4tXHRpZiAoZXJyKVxuLVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbi1cdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuLVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gXHRpZiAoZGV2KVxuIFx0XHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcbiBcdFx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzdGF0ZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbitcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuK1x0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbiBlcnJfb3V0OlxuQEAgLTE0NzYsNiArMTU3OCwxNiBAQCB2b2lkIGRybV9wYWdlbWFwX2Rlc3Ryb3koc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCwgYm9vbCBpc19hdG9taWNfb3JfcmVjbGFpbVxuIFx0XHRrZnJlZShkcGFnZW1hcCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19pbml0IGRybV9wYWdlbWFwX21vZHVsZV9pbml0KHZvaWQpXG4re1xuKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0ZBVUxUX0lOSkVDVElPTilcbitcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXCJkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RcIiwgTlVMTCxcbitcdFx0XHRcdCAgXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbittb2R1bGVfaW5pdChkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdCk7XG4rXG4gc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZXhpdCh2b2lkKVxuIHtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2ZHJtX3BhZ2VtYXBfd29yayk7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDkwOGQyZDRlYzQzYWMuLmFlMTdiZDUxNmQyNDggMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtODk5LDIyICs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4re1xuK1x0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIFBWTVdfU1lOQyB8IFBWTVdfTUlHUkFUSU9OKTtcbitcbitcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xuK1x0XHRpZiAocHZtdy5wdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4rXHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYVxuK1x0XHQgKiBtaWdyYXRpb24gZW50cnksIHNvIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKCkgY3JlYXRlcyBQVEVcbitcdFx0ICogc2l6ZWQgbWlncmF0aW9uIGVudHJpZXMgZnJvbSBpdCBhbmQgbGVhdmVzIHRoZSByZWZjb3VudFxuK1x0XHQgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvXG4rXHRcdCAqIHN0b3AgdGhlIHdhbGsgaGVyZS5cbitcdFx0ICovXG4rXHRcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogRGVtb3RlIGV2ZXJ5IFBNRCBzaXplZCBtaWdyYXRpb24gZW50cnkgdGhhdCBtYXBzIEBmb2xpbyB0byBQVEUgc2l6ZWQgb25lcy5cbisgKlxuKyAqIG1pZ3JhdGVfZGV2aWNlX3VubWFwKCkgdW5tYXBzIHdpdGggdHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApLCBpLmUuIHdpdGhvdXRcbisgKiBUVFVfU1BMSVRfSFVHRV9QTUQsIHNvIGEgZm9saW8gdGhhdCB3YXMgUE1EIG1hcHBlZCBpbiBzZXZlcmFsIFZNQXMgLS0gYWZ0ZXJcbisgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxuKyAqIG9mIHRoZW0uIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgYmVsb3cgZG9lcyBub3QgY2FyZSwgaXQgb25seSBsb29rcyBhdCB0aGVcbisgKiByZWZjb3VudCwgc28gc3BsaXR0aW5nIHRoZSBmb2xpbyB3aXRob3V0IGRlbW90aW5nIGFsbCBvZiB0aG9zZSBmaXJzdCB3b3VsZFxuKyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cbisgKiByZW1vdmVfbWlncmF0aW9uX3B0ZXMoKSB0cmlwcyBvdmVyIHRoYXQgaW4gbWlncmF0ZV92bWFfZmluYWxpemUoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuK1x0XHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxuK1x0fTtcbitcbitcdC8qXG4rXHQgKiBEbyBub3QgcGFzcyAuYW5vbl9sb2NrOiBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKSByZXF1aXJlc1xuK1x0ICogZm9saW9fbWFwcGVkKCksIGFuZCBAZm9saW8gaXMgYWxyZWFkeSBmdWxseSB1bm1hcHBlZCBoZXJlLlxuK1x0ICovXG4rXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIGZhdWx0X2ZvbGlvO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKlxuLVx0ICogdGFrZSBhIHJlZmVyZW5jZSwgc2luY2Ugc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHdpdGggZnJlZXplID0gdHJ1ZVxuLVx0ICogZHJvcHMgYSByZWZlcmVuY2UgYXQgdGhlIGVuZC5cbitcdCAqIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncygpIHdhbGtzIHRoZSBybWFwLCBhbmRcbitcdCAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdFxuK1x0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxuK1x0ICogVk1BIHR5cGUsIHNvIGEgZmlsZSBUSFAgY2FuIHJlYWNoIGhlcmU7IHRoZSByZXN0IG9mIHRoZSBtaWdyYXRlX3ZtYSgpXG4rXHQgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS5cbiBcdCAqL1xuLVx0Zm9saW9fZ2V0KGZvbGlvKTtcbi1cdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cdTAwM2V2bWEsIGFkZHIsIHRydWUpO1xuK1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBBIENQVSBmYXVsdCBvbiBhIGRldmljZSBwcml2YXRlIFBNRCBob2xkcyBhbiBleHRyYSByZWZlcmVuY2Ugb24gdGhlXG4rXHQgKiBmb2xpbywgdGFrZW4gYnkgZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoKS4gZm9saW9fc3BsaXRfdW5tYXBwZWQoKVxuK1x0ICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5c1xuK1x0ICogZmFpbCB3aXRoIC1FQUdBSU4gd2hpbGUgdGhpcyBmYXVsdCByZWZlcmVuY2UgaXMgaGVsZC5cbitcdCAqXG4rXHQgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1EXG4rXHQgKiBlbnRyeSwgc28gaXQgaXMgYWx3YXlzIHRoZSBoZWFkIHBhZ2Ugb2YgQGZvbGlvLCBhbmQgdGhlcmVmb3JlIGFsd2F5c1xuK1x0ICogZW5kcyB1cCBpbiB0aGUgaGVhZCBmb2xpbyBhZnRlciBhbiB1bmlmb3JtIHNwbGl0IHRvIG9yZGVyIDAuIERyb3BcbitcdCAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpb1xuK1x0ICogYWZ0ZXJ3YXJkcywgbGVhdmluZyB0aGUgcmVmZXJlbmNlIGV4YWN0bHkgd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdG8gYmVcbitcdCAqIHJlbGVhc2VkLlxuK1x0ICpcbitcdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxuK1x0ICogcmVmZXJlbmNlIHRha2VuIGJ5IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBpcyBzdGlsbCBoZWxkLlxuK1x0ICovXG4rXHRmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSBcdTAwMjZcdTAwMjZcbitcdFx0cGFnZV9mb2xpbyhtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpID09IGZvbGlvO1xuK1xuK1x0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcbitcbitcdGlmIChmYXVsdF9mb2xpbylcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbitcdGlmIChmYXVsdF9mb2xpbylcbitcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRtaWdyYXRlLVx1MDAzZXNyY1tpZHhdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuQEAgLTkzNSw3ICsxMDE3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTAzLDcgKzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdGJvb2wgbm90aWZpZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpuZXdwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpXSk7XG5AQCAtMTE3NywxMiArMTI1OCwxOCBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0XHRcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRuciA9IDEgXHUwMDNjXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cdFx0XHRcdGFkZHIgPSBtaWdyYXRlLVx1MDAzZXN0YXJ0ICsgaSAqIFBBR0VfU0laRTtcbi1cdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBhZGRyLCBmb2xpbykpIHtcbitcdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+KE1JR1JBVEVfUEZOX01JR1JBVEUgfFxuIFx0XHRcdFx0XHRcdFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuK1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIHJlc2V0IG5yIHNvIHRoYXQgb25seSBmaXJzdCBhZnRlci1zcGxpdCBmb2xpb1xuK1x0XHRcdFx0ICogaXMgcHJvY2Vzc2VkIGJlbG93XG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XG4rXHRcdFx0XHRuciA9IDE7XG4gXHRcdFx0fSBlbHNlIGlmICgoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0KGRzdF9wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcbkBAIC0xMjIyLDYgKzEzMDksMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpK2pdKSk7XG4gXHRcdFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaStqXSkpO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuK1x0XHRcdCAqIGNhY2hlLiBSZWZyZXNoIHRoZSBzYXZlZCBtYXBwaW5nIGJlZm9yZSBtaWdyYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1xuIFx0XHRcdHIgPSBmb2xpb19taWdyYXRlX21hcHBpbmcobWFwcGluZywgbmV3Zm9saW8sIGZvbGlvLCBleHRyYV9jbnQpO1xuIFx0XHRcdGlmIChyKVxuIFx0XHRcdFx0c3JjX3BmbnNbaStqXSBcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xuQEAgLTE0MDIsNyArMTQ5NSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqKyspXG4rXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICsgaikgXHUwMDNjIG5wYWdlczsgaisrKVxuIFx0XHRcdFx0c3JjX3BmbnNbaStqXSA9IDA7XG4gXHRcdFx0aSArPSBqIC0gMTtcbiBcdFx0XHRwZm4gKz0gaiAtIDE7XG5AQCAtMTQzNiw3ICsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIFx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4gXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbitcdFx0XHRmb3IgKGogPSAxOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgKGkgKyBqKSBcdTAwM2MgbnBhZ2VzOyBqKyspXG4gXHRcdFx0XHRzcmNfcGZuc1tpK2pdID0gMDtcbiBcdFx0XHRpICs9IGogLSAxO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjozMy40MjcxNzM4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTg5ODAwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFJNL01NIFBhdGNoIGZvciBGYXVsdCBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCBhbmQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGZhdWx0IGluamVjdGlvbiBpbnRvIGBkcm1fcGFnZW1hcC5jYCB0aHJvdWdoIHRoaXMgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AgZnVuY3Rpb24uIFRoZSBnb2FsIGhlcmUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gZm9yY2UgYSBmYWxsYmFjayB0byBvcmRlci0wIGFsbG9jYXRpb25zLCB3aGljaCBpcyBvZnRlbiBkb25lIGZvciBkZWJ1Z2dpbmcgb3IgdG8gdGVzdCBhIHN5c3RlbSdzIHJlc2lsaWVuY2UgdG8gc3BlY2lmaWMgZmFpbHVyZXMuIFRoaXMgZGlyZWN0bHkgdG91Y2hlcyBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXNgIGFuZCBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYCwgc28gaXQncyBjbGVhcmx5IGludGVydHdpbmVkIHdpdGggdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gdGhlIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlci5cblxuSW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3ZSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBrZXkgbWlncmF0aW9uIGZ1bmN0aW9uczogYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmVgLCBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBUaGlzIGhlYXZpbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZmF1bHQgaW5qZWN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBkZXZpY2UgcGFnZSBtaWdyYXRpb24uIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGFzIGl0IGNvdWxkIGJlIHRyaWNreSB0byBkZWJ1Zy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgcGF0aC4gYGRybV9wYWdlbWFwLmNgLCBhcyB3ZSBrbm93LCBpcyBwYXJ0IG9mIHRoZSBEUk0gc3RhY2ssIGJ1dCBpdCB3b3VsZCBiZSBiZW5lZmljaWFsIHRvIHJldmlldyBhbGwgdXNlcyBvZiB0aGUgcGFnZSBtYXBwaW5nIHN0cnVjdHVyZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gdHJpZ2dlciBhbmQgdGVzdCB0aGlzIGluamVjdGlvbi4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIHBhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IERFVklDRV9QUklWQVRFLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZXMsIHNvIGxldCdzIGNoZWNrIGZvciBhbnkgdXNlIG9mIGBkcm1fcGFnZW1hcF9ldmljdF90b19yYW1gIG9yIGBkcm1fcGFnZW1hcF9kZXN0cm95YCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGxldmVyYWdlIGl0IHRvIHN0dWR5IHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjozOS4wMTY5NzY3NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzI5MjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fcGFnZW1hcF9ldmljdF90b19yYW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIyMD1FWFBPUlRfU1lNQk9MKGRybV9wYWdlbWFwX3B1dCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyMjM6ICogZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKCkgLSBFdmljdCBHUFUgU1ZNIHJhbmdlIHRvIFJBTVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjQtICogQGRldm1lbV9hbGxvY2F0aW9uOiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMzAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTppbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTMwOS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTMxMDpFWFBPUlRfU1lNQk9MX0dQTChkcm1fcGFnZW1hcF9ldmljdF90b19yYW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMTEtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTQ2Mj1pbnQgeGVfc3ZtX2JvX2V2aWN0KHN0cnVjdCB4ZV9ibyAqYm8pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE0NjMte1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNDY0OlxcdHJldHVybiBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oXFx1MDAyNmJvLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE0NjUtfVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zNDI9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNDYtXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNDc6aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbik7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjQxLjI0NDI3NzA1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDA1MTYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBNZW1vcnkgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEUk0gcGFnZW1hcCBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCBieSB0aGUgSW50ZWwgWGUgZHJpdmVyIChgeGVfc3ZtLmNgKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBzZWUgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyBsaWtlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gUmlnaHQsIGFuZCB0aGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciBkcml2ZXJzIHRoYXQgbGV2ZXJhZ2UgYERFVklDRV9QUklWQVRFYCBtZW1vcnksIGxpa2UgTm91dmVhdSBhbmQsIG9mIGNvdXJzZSwgdGhlIFhlIGRyaXZlci5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCBieSBlaXRoZXIgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBvciwgZXZlbiBtb3JlIGludGVyZXN0aW5nbHksIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoaXMgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBmdW5jdGlvbiBpcyByZWFjaGFibGUgdGhyb3VnaCBhIG1vcmUgZ2VuZXJhbCBwYXRoLiBJcyBpdCBqdXN0IGRldmljZS1zcGVjaWZpYyBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBjb3VsZCBpbXBhY3Qgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTGV0J3MgdHJhY2UgdGhyb3VnaCBgbWlncmF0ZV92bWFfcGFnZXNgIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjQ1LjQ4NDc5NTE1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5OTk0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI2Ni1mdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIG1ha2UgZHJpdmVycyBlYXNpZXIgdG8gd3JpdGUgYW5kIHRvIGNlbnRyYWxpemUgY29tbW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozNjU6NC4gYGBtaWdyYXRlX3ZtYV9wYWdlcygpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI5ODo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjk5LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy00OS0gKiAxLiBrdm0tXFx1MDAzZXNyY3UgLSBQcm90ZWN0cyBLVk0gbWVtc2xvdHNcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUwOiAqIDIuIGt2bS1cXHUwMDNlbW0tXFx1MDAzZW1tYXBfbG9jayAtIGZpbmRfdm1hLCBtaWdyYXRlX3ZtYV9wYWdlcyBhbmQgaGVscGVycywga3NtX21hZHZpc2VcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUxLSAqIDMuIGt2bS1cXHUwMDNlYXJjaC51dm1lbV9sb2NrIC0gcHJvdGVjdHMgcmVhZC93cml0ZXMgdG8gdXZtZW0gc2xvdHMgdGh1cyBhY3RpbmdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Nzk6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01ODAtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg3LVxcdCptaWcuZHN0ID0gbWlncmF0ZV9wZm4ocGFnZV90b19wZm4oZHBhZ2UpKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc4ODpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc4OS1vdXRfZmluYWxpemU6XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUxLVxcdHIgPSBzdm1fbWlncmF0ZV9jb3B5X3RvX3ZyYW0obm9kZSwgcHJhbmdlLCBcXHUwMDI2bWlncmF0ZSwgXFx1MDAyNm1mZW5jZSwgc2NyYXRjaCwgdHRtX3Jlc19vZmZzZXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDUyOlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQ1My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1NS1cXHRcXHRcXHRcXHQgICAgc2NyYXRjaCwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjc1NjpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03NTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0zNDc9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNS0gKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjY6ICogbWlncmF0ZV92bWFfcGFnZXMoKSAvIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCksIHNvIGl0cyBvcmRlciBjYW5ub3QgYmUgdXNlZCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNy0gKiBkZXRlY3QgdGhlIGRlbW90aW9uIC0gdGhlIGRlc3RpbmF0aW9uIGhhcyB0byBiZSBpbnNwZWN0ZWQgaW5zdGVhZC5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTY5MD1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTEtZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg5MjpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODkzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTMyNT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDE1LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MTY6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MTctXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRtZW0tXFx1MDAzZW1pZ3JhdGUuY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXFx0bm91dmVhdV9kbWVtX2ZlbmNlX2RvbmUoXFx1MDAyNmZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTc4Mz1zdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XFx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODExLVxcdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFxcdTAwMjZmZW5jZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NS1cXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NS12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwNzUtXFx0XFx0XFx0XFx0XFx0LyogQ2xlYXIgcmVtYWluaW5nIGRzdCBlbnRyaWVzIHRvIGF2b2lkXFxubGliL3Rlc3RfaG1tLmM6MTA3NjpcXHRcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcy9maW5hbGl6ZSgpIHVzaW5nXFxubGliL3Rlc3RfaG1tLmMtMTA3Ny1cXHRcXHRcXHRcXHRcXHQgKiB1bmluaXRpYWxpemVkIHZhbHVlcy5cXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE3NS1cXG5saWIvdGVzdF9obW0uYzoxMTc2OlxcdFxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTc3LVxcdFxcdGNtZC1cXHUwMDNlY3BhZ2VzICs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcXHUwMDI2YXJncyk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDgtXFx0XFx0ZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5KFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG5saWIvdGVzdF9obW0uYzoxMjQ5OlxcdFxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMjUwLVxcdFxcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzE4LVxcdH1cXG5saWIvdGVzdF9obW0uYzoxNzE5OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xNzIwLVxcdC8qXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY2MD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMC0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDE6ICogbWlncmF0aW9uIHdhcyBzdWNjZXNzZnVsIGZvciB0aG9zZSBlbnRyaWVzIGFmdGVyIGNhbGxpbmcgbWlncmF0ZV92bWFfcGFnZXMoKSxcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMi0gKiBqdXN0IGxpa2UgZm9yIHJlZ3VsYXIgbWlncmF0aW9uLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAzLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDQ6ICogQWZ0ZXIgdGhhdCwgdGhlIGNhbGxlcnMgbXVzdCBjYWxsIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgdG8gZ28gb3ZlciBlYWNoIGVudHJ5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDUtICogaW4gdGhlIHNyYyBhcnJheSB0aGF0IGhhcyB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZ1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA2LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcXG5tbS9taWdyYXRlX2RldmljZS5jOjcwNzogKiB0aGVuIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzb3VyY2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwOC0gKiBzdHJ1Y3QgcGFnZSB0byB0aGUgZGVzdGluYXRpb24gc3RydWN0IHBhZ2UuICBJZiBpdCBmYWlscyB0byBtaWdyYXRlIHRoZVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTUtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjcxNjogKiBPbmNlIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucyB0aGUgY2FsbGVyIG1heSBpbnNwZWN0IHdoaWNoIHBhZ2VzIHdlcmVcXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNy0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcxOS0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzIwOiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzIxLSAqIGJvdGggZGVzdGluYXRpb24gYW5kIHNvdXJjZSBwYWdlIGFyZSBzdGlsbCBsb2NrZWQsIGFuZCB0aGUgbW1hcF9sb2NrIGlzIGhlbGRcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTE4MT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzM3LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzM4OiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMzOS0gKiBtZXRhLWRhdGEgZnJvbSBzb3VyY2Ugc3RydWN0IHBhZ2UgdG8gZGVzdGluYXRpb24uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNDY9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ5OiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUwLSAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVjdCBjb250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTY6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU3LXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzYwOkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6NDcuMzQ0ODAwNjI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMDg3MjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0ZXN0X2htbWAgTW9kdWxlIGFuZCBpdHMgSW1wYWN0IG9uIE1lbW9yeSBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCdzIHV0aWxpemluZyBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRlc3RfaG1tLmNgLCBhcyBJIHJlY2FsbCwgaXMgYSB0ZXN0IG1vZHVsZSBkZXNpZ25lZCBmb3IgSE1NIGFuZCwgc3BlY2lmaWNhbGx5LCBERVZJQ0VfUFJJVkFURSBtZW1vcnkuIEl0J3MgYnVpbHQgdG8gZXhlcmNpc2UgYm90aCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBCdXQgbm93IEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzb21lIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgdGhlc2UgcmVseSBvbiwgbmFtZWx5IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoZXNlIGFyZSBjb3JlIE1NIGZ1bmN0aW9ucywgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIGhvdyBkZXZpY2UgbWVtb3J5IGdldHMgbW92ZWQgYXJvdW5kLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGVzZSB0ZXN0cywgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gU3l6a2FsbGVyLiBIbW0sIHllcywgaXQgbG9va3MgbGlrZSBTeXprYWxsZXIgZG9lcyBpbmRlZWQgZnV6eiBgdGVzdF9obW1gIHZpYSBgL2Rldi9obW1fZG1pcnJvcipgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTbywgY2FuIHRoaXMgZnV6emluZyBhY3R1YWxseSAqdHJpZ2dlciogdGhlIGNvZGUgdGhhdCdzIGJlZW4gbW9kaWZpZWQgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgP1xuXG5UaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFsbCBhYm91dCBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFuZCBob3cgd2UgaGFuZGxlIFBNRCAoUGFnZSBNYXAgRGlyZWN0b3J5KSBzcGxpdHRpbmcgZHVyaW5nIGRldmljZSBtaWdyYXRpb24uIEkga25vdyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIGdldHMgY2FsbGVkIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agd2hlbiBgZm9saW9fdGVzdF9sYXJnZShmb2xpbylgIGlzIHRydWUuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIFRIUC5cblxuU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIGB0ZXN0X2htbWAgZXZlbiBzdXBwb3J0IG1pZ3JhdGluZyBUSFA/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBgbGliL3Rlc3RfaG1tLmNgIHRvIGNvbmZpcm0gd2hldGhlciBpdCBoYXMgdGhlIGNhcGFjaXR5IHRvIGRlYWwgd2l0aCBUSFAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjUzLjk3NTY3NjMzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAxNjk4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRIUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6NTQuMjE1ODU0OTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1ODE5MDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFRIUCBJbnRlcmFjdGlvbnMgd2l0aCBEUk0gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSBubyBkaXJlY3QgVEhQIHVzYWdlIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLiBIb3dldmVyLCBgdGVzdF9obW1gIHJlbGllcyBvbiBzdGFuZGFyZCBgbW1hcGAgYW5kIGBtYWR2aXNlYC4gVGhpcyBtZWFucyBpZiBzb21lb25lIGNsZXZlcmx5IHNldHMgdXAgYSBUSFAgbWFwcGluZyBhbmQgdGhlbiB0cmlnZ2VycyB0aGUgYHRlc3RfaG1tYCBpb2N0bCBmb3IgbWlncmF0aW9uIHRvIGRldmljZSBtZW1vcnksIHRoZSBjb2RlIHBhdGggd291bGQgaW52b2x2ZSBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGUgZ29vZCBuZXdzIGlzIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBQTUQgc3BsaXR0aW5nIGR1cmluZyB0aGF0IG1pZ3JhdGlvbiwgd2hpY2ggaXMgY3J1Y2lhbC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRybV9wYWdlbWFwLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgaW50cm9kdWNlZCBgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvYCBhbmQgYXJlIHV0aWxpemluZyBpdCBpbiBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgYGRybV9wYWdlbWFwLmNgIGlzIGJlaW5nIHVzZWQgYnkgYHhlX3N2bS5jYCBhbmQgYG5vdXZlYXVfZG1lbS5jYC4gSGFuZyBvbi4uLiBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgYSBnZW5lcmljIERSTSBwYWdlbWFwIG1vZHVsZSEgVGhpcyBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgYHhlYCBvciBgbm91dmVhdWAgZnV6emVkIGJ5IHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgdGFyZ2V0IHRob3NlIGRyaXZlcnMsIGJ1dCBpZiB0aGVyZSdzIGEgZ2VuZXJhbGl6ZWQgcm91dGUgdG8gYGRybV9wYWdlbWFwYCwgb3IgaWYgZWl0aGVyIGB4ZWAgb3IgYG5vdXZlYXVgIGFyZSBzb21laG93IGVuYWJsZWQgZHVyaW5nIHRoZSB0ZXN0LCB0aGVuIGBkcm1fcGFnZW1hcGAgaXRzZWxmIGNvdWxkIGJlIHN1YmplY3QgdG8gZnV6emluZy4gSG1tLi4uIHRoaXMgYGRybV9wYWdlbWFwLmNgIGlzIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBEUk0gdHJlZT8gSSBzaG91bGQgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IHRvIHVuZGVyc3RhbmQgd2hlbiBpdCB3YXMgaW50cm9kdWNlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjo1OS45NzQwNDc4MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTU5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9wYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMjpcXHRkcm1fcGFnZW1hcC5vXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTM6XFx0ZHJtX3BhZ2VtYXBfdXRpbC5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDAuMDIyMjEzNjMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg1MDkyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkcm1fZ3B1c3ZtX2hlbHBlcmAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYnV0IG9ubHkgaWYgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZW5hYmxlZCAqYW5kKiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBmdW5jdGlvbiBvciBtb2R1bGUgaXMgYWN0dWFsbHkgdXNlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgbWFrZWZpbGVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvZGUgcGF0aHMgdGhhdCBtaWdodCBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBkcm1fZ3B1c3ZtX2hlbHBlcmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxldmVyYWdlZC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoYXQgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRldmljZSBkcml2ZXJzIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlc2Ugc3BlY2lmaWMgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDMuNTYwNzI2NDI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3NDgzNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9ncHVzdm1faGVscGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0xMDc9b2JqLSQoQ09ORklHX0RSTV9HUFVWTSkgKz0gZHJtX2dwdXZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTA4LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMDk6ZHJtX2dwdXN2bV9oZWxwZXIteSA6PSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMC1cXHRkcm1fZ3B1c3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTExOmRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cXHRkcm1fcGFnZW1hcC5vXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSArPSBkcm1fZ3B1c3ZtX2hlbHBlci5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDUuMTc4MjE4NjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDA1ODM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEdQVVNWTSBEZXBlbmRlbmN5IENoYWluKipcblxuUmlnaHQsIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgZGlyZWN0bHkgZW5hYmxlcyB0aGUgYGRybV9ncHVzdm1faGVscGVyYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBhcyBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIsIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiAqd2hhdCogaXMgc2VsZWN0aW5nIHRoYXQgY29uZmlnIG9wdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSByYXRpb25hbGUsIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2h5IGEgdXNlciBtaWdodCBjaG9vc2UgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMsIGRlcGVuZGVudCBvbiBvdGhlciBkaXNwbGF5IGRyaXZlciBjb21wb25lbnRzLCBvciBqdXN0IGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgZmxhZz8gTGV0J3MgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBLY29uZmlnIGhpZXJhcmNoeSBhbmQgZmlndXJlIG91dCB3aGF0IHB1bGxzIHRoYXQgc3BlY2lmaWMgZmxhZy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDguNTc4ODA1MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTU1MTY3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFJNX0dQVVNWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0yMjE9Y29uZmlnIFJVU1RfRFJNX0dQVVZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjctXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MjI4OmNvbmZpZyBEUk1fR1BVU1ZNXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NjI9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3Ny1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3ODpcXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3OS1cXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03ODUtXFx0aWYgKCFwZm5zKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzg2OlxcdFxcdHJldHVybiBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03ODctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMC1cXHRcXHRpZiAoIShwZm5zW2ldIFxcdTAwMjYgSE1NX1BGTl9WQUxJRCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgyMTpcXHRcXHRcXHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODMwLVxcdFxcdGlmIChjdXIgPT0gcGFnZW1hcCkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODMxOlxcdFxcdFxcdG5ld19zdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9FUVVBTDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzMi1cXHRcXHR9IGVsc2UgaWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAoY3VyID09IG90aGVyIHx8ICFvdGhlcikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzMzpcXHRcXHRcXHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzQtXFx0XFx0XFx0b3RoZXIgPSBjdXI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzUtXFx0XFx0fSBlbHNlIGlmIChjdXIpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzNjpcXHRcXHRcXHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM3LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Mzg6XFx0XFx0XFx0bmV3X3N0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzOS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cXHRcXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcXHRcXHRpZiAoc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDctXFx0XFx0XFx0c3RhdGUgPSBuZXdfc3RhdGU7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDgtXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSAhPSBuZXdfc3RhdGUpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0OTpcXHRcXHRcXHRpZiAobmV3X3N0YXRlID09IERSTV9HUFVTVk1fU0NBTl9TWVNURU0gfHxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MDpcXHRcXHRcXHQgICAgc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MTpcXHRcXHRcXHRcXHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9NSVhFRDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MjpcXHRcXHRcXHRlbHNlIGlmIChzdGF0ZSAhPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRUQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTM6XFx0XFx0XFx0XFx0c3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXFx0c2VsZWN0IERSTV9FWEVDXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6NDI6XFx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVxcdHNlbGVjdCBEUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4NjpcXHRzZWxlY3QgRFJNX0dQVVNWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWctMTA2LSAgICAgICBib29sIFxcXCJJbmplY3QgdXNlcnB0ciBpbnZhbGlkYXRpb24gLUVJTlZBTCBlcnJvcnNcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWc6MTA3OiAgICAgICBkZXBlbmRzIG9uIERSTV9HUFVTVk1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1Zy0xMDgtICAgICAgIGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTE1Nj14ZS0kKENPTkZJR19EUk1fWEVfR1BVU1ZNKSArPSB4ZV9zdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZToxNTc6eGUtJChDT05GSUdfRFJNX0dQVVNWTSkgKz0geGVfdXNlcnB0ci5vXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTE1OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0MTE9c3RhdGljIGludCB4ZV9wdF9wcmVfY29tbWl0KHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZSAqcHRfdXBkYXRlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQyMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MjUtLypcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0NTM9c3RhdGljIGlubGluZSB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKSB7IH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTUtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDU3LSNpZmRlZiBDT05GSUdfRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU5NC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1OTYtc3RhdGljIGNvbnN0IHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZV9vcHMgc3ZtX3VzZXJwdHJfbWlncmF0ZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTYxND1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2MzAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2MzE6XFx0aWYgKG1pZ3JhdGlvbl9zdGF0ZSA9PSBEUk1fR1BVU1ZNX1NDQU5fRVFVQUwpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTYzMi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFJNX1hFX0RFQlVHX1ZNKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0yMzM9aW50IHhlX3N2bV9pbml0KHN0cnVjdCB4ZV92bSAqdm0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTIzNC17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjIzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM2LVxcdHJldHVybiBkcm1fZ3B1c3ZtX2luaXQoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXFwiWGUgU1ZNIChzaW1wbGUpXFxcIiwgXFx1MDAyNnZtLVxcdTAwM2V4ZS1cXHUwMDNlZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTI0ND12b2lkIHhlX3N2bV9maW5pKHN0cnVjdCB4ZV92bSAqdm0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTI0NS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjI0NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjQ3LVxcdHhlX2Fzc2VydCh2bS1cXHUwMDNleGUsIHhlX3ZtX2lzX2Nsb3NlZCh2bSkpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTM4NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMzkyLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDozOTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pIC8qIE5lZWQgdG8gc3VwcG9ydCB1c2VycHRyIHdpdGhvdXQgWEVfR1BVU1ZNICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTM5NC0jZGVmaW5lIHhlX3N2bV9hc3NlcnRfaW5fbm90aWZpZXIodm1fXykgXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTQzNj1zdGF0aWMgaW5saW5lIHZvaWQgeGVfc3ZtX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQzOC19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjQzOTojZW5kaWYgLyogQ09ORklHX0RSTV9HUFVTVk0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDQwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuaD00OD1zdHJ1Y3QgeGVfdXNlcnB0ciB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTk5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmg6MTAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmgtMTAxLXZvaWQgeGVfdXNlcnB0cl9yZW1vdmUoc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTM2MDY9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX2NoZWNrX2FyZ3Moc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92bSAqdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zNzE2LVxcdFxcdCAgICBYRV9JT0NUTF9EQkcoeGUsIG9wID09IERSTV9YRV9WTV9CSU5EX09QX01BUF9VU0VSUFRSIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzcxNzpcXHRcXHRcXHRcXHQgIUlTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pKSB8fFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM3MTgtXFx0XFx0ICAgIFhFX0lPQ1RMX0RCRyh4ZSwgb2JqIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtNS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NjojaWZuZGVmIF9fRFJNX0dQVVNWTV9IX19cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NzojZGVmaW5lIF9fRFJNX0dQVVNWTV9IX19cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtOC1cXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zMjc9dm9pZCBkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzItICogZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IC0gU2NhbiByZXN1bHQgZnJvbSB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkgZnVuY3Rpb24uXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzMzogKiBARFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEOiBBdCBsZWFzdCBvbmUgcGFnZSB3YXMgbm90IHByZXNlbnQgb3IgaW5hY2Nlc3NpYmxlLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozMzQ6ICogQERSTV9HUFVTVk1fU0NBTl9FUVVBTDogQWxsIHBhZ2VzIGJlbG9uZyB0byB0aGUgc3RydWN0IGRldl9wYWdlbWFwIGluZGljYXRlZCBhc1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzUtICogdGhlIEBwYWdlbWFwIGFyZ3VtZW50IHRvIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM2OiAqIEBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI6IEFsbCBwYWdlcyBiZWxvbmcgdG8gZXhhY3RseSBvbmUgZGV2X3BhZ2VtYXAsIHdoaWNoIGlzXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMzNy0gKiAqTk9UKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpLiBBbGwgcGFnZXMgYmVsb25nIHRvXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMzOC0gKiB0aGUgc2FtZSBkZXZpY2UgcHJpdmF0ZSBvd25lci5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM5OiAqIEBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNOiBBbGwgcGFnZXMgYXJlIHByZXNlbnQgYW5kIHN5c3RlbSBwYWdlcy5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQwOiAqIEBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFOiBBbGwgcGFnZXMgYXJlIGRldmljZSBwYWdlcyBhbmQgYmVsb25nIHRvIGF0IGxlYXN0XFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0MS0gKiB0d28gZGlmZmVyZW50IHN0cnVjdCBkZXZfcGFnZW1hcHMuIEFsbCBwYWdlcyBiZWxvbmcgdG8gdGhlIHNhbWUgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQyLSAqIG93bmVyLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDM6ICogQERSTV9HUFVTVk1fU0NBTl9NSVhFRDogUGFnZXMgYXJlIHByZXNlbnQgYW5kIGFyZSBhIG1peCBvZiBzeXN0ZW0gcGFnZXNcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQ0LSAqIGFuZCBkZXZpY2UtcHJpdmF0ZSBwYWdlcy4gQWxsIGRldmljZS1wcml2YXRlIHBhZ2VzIGJlbG9uZyB0byB0aGUgc2FtZSBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zNDc9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHtcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ4OlxcdERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ5OlxcdERSTV9HUFVTVk1fU0NBTl9FUVVBTCxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUwOlxcdERSTV9HUFVTVk1fU0NBTl9PVEhFUixcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUxOlxcdERSTV9HUFVTVk1fU0NBTl9TWVNURU0sXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1MjpcXHREUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFLFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNTM6XFx0RFJNX0dQVVNWTV9TQ0FOX01JWEVELFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNTQtfTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD01MzE9X19kcm1fZ3B1c3ZtX25vdGlmaWVyX25leHQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTU3MC1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NTcxOiNlbmRpZiAvKiBfX0RSTV9HUFVTVk1fSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjEwLjM3NDMyNjgzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc2NTkyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHUFUgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgaXMgcHVsbGVkIGluIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAsIHdoaWNoIGlzIGluIHR1cm4gc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVgLiBUaGF0IG1lYW5zIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwncyBYZSBkcml2ZXIsIGlzIGRlZmluaXRlbHkgdXNpbmcgdGhpcyBHUFUgdmlydHVhbGl6YXRpb24gZmVhdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0Li4uIGhhbmcgb24gYSBtaW51dGUuIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudC4gUmlnaHQsIFN5emthbGxlciwgaXQncyBwcmV0dHkgc3RhbmRhcmQsIEdDRS9RRU1VLCBkb2Vzbid0IHR5cGljYWxseSBoYXZlIHBoeXNpY2FsIEludGVsIFhlIEdQVXMuIFRoaXMgY291bGQgcHJlc2VudCBhIHByb2JsZW0uIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhc3N1bXB0aW9ucyBoZXJlLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGRybV9wYWdlbWFwLmNgIGFsc28gdXNlZCBieSBgbm91dmVhdWA/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5vdXZlYXVgIGFjdHVhbGx5IG1ha2VzIHVzZSBvZiBgZHJtX3BhZ2VtYXBgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgY291bGQgY2hhbmdlIHRoaW5ncyBhbmQgcHJvdmlkZSBhIGJldHRlciBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MTQuMzUwOTIyNjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAzNTYzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzoxNC40MTg5NjU1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzExMjgzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIFBhZ2UgTWFwcGluZyBpbiBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZGlmZmVyZW50IGRyaXZlcnMgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJlY3QgcmVuZGVyaW5nLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUga2VybmVsJ3MgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGFuZCBob3cgZ3JhcGhpY3MgZHJpdmVycyBhbGxvY2F0ZSBhbmQgbWFuYWdlIEdQVSBtZW1vcnkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgXCJub3V2ZWF1XCIgZHJpdmVyLCB3aGljaCBpcyBOdmlkaWEncyBvcGVuLXNvdXJjZSBkcml2ZXIsIHNwZWNpZmljYWxseSAqZG9lc24ndCogc2VlbSB0byBiZSBsZXZlcmFnaW5nIHRoZSBgZHJtX3BhZ2VtYXBgIGluZnJhc3RydWN0dXJlLCBhdCBsZWFzdCBub3QgaW4gYSB3YXkgdGhhdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBteSBxdWljayBzY2FuLiBUaGlzIGlzIHNvbWV3aGF0IHN1cnByaXNpbmcsIGFuZCBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbk5vdywgdGhpcyBzcGFya3MgYW5vdGhlciB0aG91Z2h0LiBJJ20gd29uZGVyaW5nIHdoYXQgdGhlIEFNRCBzaWRlIGxvb2tzIGxpa2UuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIGBhbWRncHVgIGRyaXZlciwgQU1EJ3MgZmxhZ3NoaXAgb3Blbi1zb3VyY2UgZ3JhcGhpY3MgZHJpdmVyLCBoYW5kbGUgdGhpcz8gRG9lcyBgYW1kZ3B1YCBmb2xsb3cgYSBzaW1pbGFyIHBhdGggYW5kIGF2b2lkIGBkcm1fcGFnZW1hcGAgZm9yIGl0cyBtZW1vcnkgbWFuYWdlbWVudD8gT3IsIGRvZXMgaXQgaGF2ZSBhIGNvbnRyYXN0aW5nIGFwcHJvYWNoPyBJJ2xsIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoYXQsIGFuZCB0aGVuLCBjb21wYXJlIHRob3NlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MTguNzMwMjUyMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDQ0NDA2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2FtZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjE4Ljk2MDcwNTIxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU3MTA3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCBJJ20gdGhpbmtpbmcgaGVyZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkcm1fcGFnZW1hcC5jYCBzZWVtcyB0byBiZSBleGNsdXNpdmVseSB0aWVkIHRvIHRoZSBgeGVgIGRyaXZlciBhdCB0aGUgbW9tZW50LCB3aGljaCBzdHJpa2VzIG1lIGFzIGEgYml0IG9kZCwgdXN1YWxseSB0aGVzZSBzb3J0cyBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBoYXZlIGJyb2FkZXIgYXBwbGljYWJpbGl0eS4gQnV0IHdhaXQsIGEgbWVtb3J5IGpvZy4uLiBpc24ndCBgZHJtX3BhZ2VtYXAuY2AgcGFydCBvZiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGU/IE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgZHJtX2dwdXN2bV9oZWxwZXJgIHNvbGVseSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyIG9yIGRvZXMgaXQgaGF2ZSBvdGhlciBjb25zdW1lcnMgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIG9mIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjIyLjMxNzgxNDk5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDIxMzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0xODItICAtICdkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvX3NhZmUnXFxuLmNsYW5nLWZvcm1hdDoxODM6ICAtICdkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlJ1xcbi5jbGFuZy1mb3JtYXQtMTg0LSAgLSAnZHJtX2dwdXZhX2Zvcl9lYWNoX29wJ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9Njc9T3ZlcnZpZXcgb2YgYmFzZWxpbmUgZGVzaWduXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTcxLSAgIDpkb2M6IE92ZXJ2aWV3XFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6NzM6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03NC0gICA6ZG9jOiBMb2NraW5nXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6NzY6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03Ny0gICA6ZG9jOiBQYXJ0aWFsIFVubWFwcGluZyBvZiBSYW5nZXNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3OTouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTgwLSAgIDpkb2M6IEV4YW1wbGVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD05MT1Qb3NzaWJsZSBmdXR1cmUgZGVzaWduIGZlYXR1cmVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjEwMTpcXHQqIENhbiBiZSBhZGRlZCBpZiByZXF1aXJlZCB0byBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBmYWlybHkgZWFzaWx5LlxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTA3PW9iai0kKENPTkZJR19EUk1fR1BVVk0pICs9IGRybV9ncHV2bS5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTEwOC1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XFx0ZHJtX2dwdXN2bS5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMTpkcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTItXFx0ZHJtX3BhZ2VtYXAub1xcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExNTpvYmotJChDT05GSUdfRFJNX0dQVVNWTSkgKz0gZHJtX2dwdXN2bV9oZWxwZXIub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX2RldmljZS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fZ3B1c3ZtLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0LSAqIGV4Y2VwdCBmb3IgdGhlIHJlY2hlY2sgcmFuZ2UncyBwYWdlcyBiZWluZyB2YWxpZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU6ICogKGRybV9ncHVzdm1fcmFuZ2VfcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2LSAqIFRoaXMgbG9jayBjb3JyZXNwb25kcyB0byB0aGUgYGBkcml2ZXItXFx1MDAzZXVwZGF0ZWBgIGxvY2sgbWVudGlvbmVkIGluXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMi0gKiBsb2NrIHRvIHNhZmVndWFyZCBjb3JlIEdQVSBTVk0gZnVuY3Rpb24gY2FsbHMgdGhhdCBtb2RpZnkgc3RhdGUsIHN1Y2ggYXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0IGFuZCBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZS4gVGhpcyBsb2NrIGlzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDQtICogZGVub3RlZCBhcyAnZHJpdmVyX3N2bV9sb2NrJyBpbiBjb2RlIGV4YW1wbGVzLiBGaW5lciBncmFpbmVkIGRyaXZlciBzaWRlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDUtICogbG9ja2luZyBzaG91bGQgYWxzbyBiZSBwb3NzaWJsZSBmb3IgY29uY3VycmVudCBHUFUgZmF1bHQgcHJvY2Vzc2luZyB3aXRoaW4gYVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA2OiAqIHNpbmdsZSBHUFUgU1ZNLiBUaGUgJ2RyaXZlcl9zdm1fbG9jaycgY2FuIGJlIHZpYSBkcm1fZ3B1c3ZtX2RyaXZlcl9zZXRfbG9ja1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3LSAqIHRvIGFkZCBhbm5vdGF0aW9ucyB0byBHUFUgU1ZNLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDItICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzogKlxcdGludCBkcml2ZXJfYmluZF9yYW5nZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDQtICpcXHR7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5OiAqXFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKGdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTA6ICpcXHRcXHRpZiAoZHJtX2dwdXN2bV9yYW5nZV9wYWdlc192YWxpZChyYW5nZSkpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTEtICpcXHRcXHRcXHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCByYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1My0gKlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTQ6ICpcXHRcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1LSAqXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU5OiAqXFx0aW50IGRyaXZlcl9ncHVfZmF1bHQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTYwLSAqXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGdwdXZhX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGdwdXZhX2VuZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MS0gKlxcdHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2MjogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCBjdHggPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2My0gKlxcdFxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTcwOiAqXFx0XFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KGdwdXN2bSwgZmF1bHRfYWRkcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MS0gKlxcdFxcdFxcdFxcdFxcdFxcdFxcdGdwdXZhX3N0YXJ0LCBncHV2YV9lbmQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE4NS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXFx0XFx0ZXJyID0gZHJtX2dwdXN2bV9yYW5nZV9nZXRfcGFnZXMoZ3B1c3ZtLCByYW5nZSwgXFx1MDAyNmN0eCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQIHx8IGVyciA9PSAtRUZBVUxUIHx8IGVyciA9PSAtRVBFUk0pIHtcXHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg4LSAqXFx0XFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4OTogKlxcdFxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTAtICpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwODogKlxcdHZvaWQgX19kcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwOTogKlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMC0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE0LSAqXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncy5wYXJ0aWFsX3VubWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjE1OiAqXFx0XFx0XFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxNi0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXFx0XFx0ZHJpdmVyX3VuYmluZF9yYW5nZShyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTg6ICpcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxOS0gKlxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIyMC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjIxOiAqXFx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIyMi0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjMyLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzM6ICpcXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNDogKlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzUtICpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM2LSAqXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM3OiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzODogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzktICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjQxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDI6ICpcXHRcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlKHJhbmdlLCBub3RpZmllciwgbW11X3JhbmdlLVxcdTAwM2VzdGFydCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0My0gKlxcdFxcdFxcdFxcdFxcdCAgbW11X3JhbmdlLVxcdTAwM2VlbmQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI0NDogKlxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfdW5tYXBfcGFnZXMoZ3B1c3ZtLCByYW5nZSwgXFx1MDAyNmN0eCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDUtICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjQ4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDk6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgbW11X3JhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI1MC0gKlxcdFxcdFxcdGRyaXZlcl9nYXJiYWdlX2NvbGxlY3Rvcl9hZGQoZ3B1c3ZtLCByYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTI2OD1ucGFnZXNfaW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3My0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSBub3RpZmllciBmcm9tIEdQVSBTVk1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNzk6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fbm90aWZpZXIgaWYgZm91bmQgb3IgTlVMTFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgxOnN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI4Mjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4My1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4OS1cXHRpZiAoaXRyZWUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5MS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5My19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSByYW5nZSBmcm9tIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5OC0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDEtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9yYW5nZSBpZiBmb3VuZCBvciBOVUxMXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDQ6c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA1OmRybV9ncHVzdm1fcmFuZ2VfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDYtXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxMi1cXHRpZiAoaXRyZWUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNi19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9maW5kKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMyMDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoKSAtIEludmFsaWRhdGUgYSBHUFUgU1ZNIG5vdGlmaWVyLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzIxLSAqIEBtbmk6IFBvaW50ZXIgdG8gdGhlIG1tdV9pbnRlcnZhbF9ub3RpZmllciBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTMzMT1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzMyOmRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzNjpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM3LVxcdFxcdGNvbnRhaW5lcl9vZihtbmksIHR5cGVvZigqbm90aWZpZXIpLCBub3RpZmllcik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMzg6XFx0c3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSA9IG5vdGlmaWVyLVxcdTAwM2VncHVzdm07XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzktXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1MS0vKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzUyOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzIC0gTU1VIGludGVydmFsIG5vdGlmaWVyIG9wZXJhdGlvbnMgZm9yIEdQVSBTVk1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM1NDpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgZHJtX2dwdXN2bV9ub3RpZmllcl9vcHMgPSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTU6XFx0LmludmFsaWRhdGUgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTYtfTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzU4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIGRybV9ncHVzdm1faW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgR1BVIFNWTS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc0LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzU6ICogTm90ZTogSWYgb25seSB1c2luZyB0aGUgc2ltcGxlIGRybV9ncHVzdm1fcGFnZXMgQVBJIChnZXQvdW5tYXAvZnJlZSksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtICogdGhlbiBvbmx5IEBncHVzdm0sIEBuYW1lLCBhbmQgQGRybSBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBzYW1lIGJhc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3Ny0gKiBAZ3B1c3ZtIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBib3RoIG1vZGVzIHRvZ2V0aGVyIGluIHdoaWNoIGNhc2UgdGhlIGZ1bGxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM3ODogKiBzZXR1cCBpcyBuZWVkZWQsIHdoZXJlIHRoZSBjb3JlIGRybV9ncHVzdm1fcGFnZXMgQVBJIHdpbGwgc2ltcGx5IG5ldmVyIHVzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc5LSAqIHRoZSBvdGhlciBmaWVsZHMuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Mi0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MzppbnQgZHJtX2dwdXN2bV9pbml0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODQtXFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Ny1cXHRcXHQgICAgdW5zaWduZWQgbG9uZyBub3RpZmllcl9zaXplLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg4OlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4OS1cXHRcXHQgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqY2h1bmtfc2l6ZXMsIGludCBudW1fY2h1bmtzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM5NjpcXHRcXHQvKiBObyBmdWxsIFNWTSBtb2RlLCBvbmx5IGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkuICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTctXFx0XFx0aWYgKG9wcyB8fCBudW1fY2h1bmtzIHx8IG1tX3JhbmdlIHx8IG5vdGlmaWVyX3NpemUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MjY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9pbml0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQyOTogKiB0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMwOiAqIEBub2RlOiBhIHBvaW50ZXIgdG8gdGhlIHJidHJlZSBub2RlIGVtYmVkZGVkIHdpdGhpbiBhIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzMy0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKnRvX2RybV9ncHVzdm1fbm90aWZpZXIoc3RydWN0IHJiX25vZGUgKm5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDM2OlxcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlLnJiKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzNy19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0MDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NDY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9ub3RpZmllcl9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0NzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDQ4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU1LVxcdGlmIChub2RlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OlxcdFxcdGhlYWQgPSBcXHUwMDI2KHRvX2RybV9ncHVzdm1fbm90aWZpZXIobm9kZSkpLVxcdTAwM2VlbnRyeTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1Ny1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2My0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ2NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHRydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3MDpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzctLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Nzg6ICogZHJtX2dwdXN2bV9maW5pKCkgLSBGaW5hbGl6ZSB0aGUgR1BVIFNWTS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDg0OnZvaWQgZHJtX2dwdXN2bV9maW5pKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0pXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDg2OlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllciwgKm5leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODctXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODg6XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9ub3RpZmllcl9zYWZlKG5vdGlmaWVyLCBuZXh0LCBncHVzdm0sIDAsIExPTkdfTUFYKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODk6XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLCAqX19uZXh0O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDkwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00OTYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0OTc6XFx0XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9yYW5nZV9zYWZlKHJhbmdlLCBfX25leHQsIG5vdGlmaWVyLCAwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBMT05HX01BWClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ5OTpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwMC1cXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9maW5pKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwOTogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKCkgLSBBbGxvY2F0ZSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE3OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTg6ZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTkte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUyMS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQxOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZSgpIC0gRnJlZSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDItICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ3OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTU5OiAqIHRvX2RybV9ncHVzdm1fcmFuZ2UoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2MS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTYyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fcmFuZ2Ugc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY0OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqdG9fZHJtX2dwdXN2bV9yYW5nZShzdHJ1Y3QgcmJfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSwgaXRyZWUucmIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTcwOiAqIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTcxLSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc1LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU3NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgxLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTgyOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhub3RpZmllci1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4My1cXHRpbnRlcnZhbF90cmVlX2luc2VydChcXHUwMDI2cmFuZ2UtXFx1MDAzZWl0cmVlLCBcXHUwMDI2bm90aWZpZXItXFx1MDAzZXJvb3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01ODYtXFx0aWYgKG5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1ODc6XFx0XFx0aGVhZCA9IFxcdTAwMjYodG9fZHJtX2dwdXN2bV9yYW5nZShub2RlKSktXFx1MDAzZWVudHJ5O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkxLVxcdGxpc3RfYWRkKFxcdTAwMjZyYW5nZS1cXHUwMDNlZW50cnksIGhlYWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTkyOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfdW5sb2NrKG5vdGlmaWVyLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkzLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTk2OiAqIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTctICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MDEtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDI6c3RhdGljIHZvaWQgX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjA0LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjA5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjEwOiAqIGRybV9ncHVzdm1fcmFuZ2VfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYxMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyMjpkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjM6XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNC1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLCB1bnNpZ25lZCBsb25nIGNodW5rX3NpemUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjc6XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKCkgLSBHZXQgdGhlIGxhcmdlc3QgQ1BVIG1hcHBpbmcgb3JkZXIuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTEtICogQGhtbV9wZm46IFRoZSBjdXJyZW50IGhtbV9wZm4uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Mi0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY2MzpzdGF0aWMgdW5zaWduZWQgaW50IGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcih1bnNpZ25lZCBsb25nIGhtbV9wZm4sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjQtXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBobW1fcGZuX2luZGV4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Nzk6ICogZHJtX2dwdXN2bV9jaGVja19wYWdlcygpIC0gQ2hlY2sgcGFnZXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02OTAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTE6c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjkyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY5My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM3LVxcdFxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjczODpcXHRcXHRpICs9IDB4MSBcXHUwMDNjXFx1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTczOS1cXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc0NzogKiBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSAtIENoZWNrIHRoZSBtaWdyYXRpb24gc3RhdGUgb2YgYSBkcm1fZ3B1c3ZtX3JhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDg6ICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0OS0gKiBAZGV2X3ByaXZhdGVfb3duZXI6IFRoZSBzdHJ1Y3QgZGV2X3ByaXZhdGVfb3duZXIgdG8gdXNlIHRvIGRldGVybWluZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc2MDogKiBSZXR1cm46IFNlZSBcXHUwMDI2ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0LlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzYyOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYzLVxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY2LVxcdHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm5vdGlmaWVyID0gXFx1MDAyNnJhbmdlLVxcdTAwM2Vub3RpZmllci1cXHUwMDNlbm90aWZpZXI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Njc6XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzY4OlxcdHVuc2lnbmVkIGxvbmcgZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY5LVxcdHN0cnVjdCBobW1fcmFuZ2UgaG1tX3JhbmdlID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzctXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Nzg6XFx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzktXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODA5LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODEwOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxMS1cXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MTI6XFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTMtXFx0XFx0Z290byByZXRyeTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2OlxcdFxcdGkgKz0gMXVsIFxcdTAwM2NcXHUwMDNjIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcihwZm5zW2ldLCBpLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU3LVxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1OC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1OTpcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2MC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY0LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg2NTpFWFBPUlRfU1lNQk9MKGRybV9ncHVzdm1fc2Nhbl9tbSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjctLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Njg6ICogZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKCkgLSBEZXRlcm1pbmUgY2h1bmsgc2l6ZSBmb3IgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg4ND1zdGF0aWMgdW5zaWduZWQgbG9uZ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg1OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04ODctXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MDItXFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2U9IHZhcy1cXHUwMDNldm1fc3RhcnQgXFx1MDAyNlxcdTAwMjYgZW5kIFxcdTAwM2M9IHZhcy1cXHUwMDNldm1fZW5kIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDM6XFx0XFx0ICAgIHN0YXJ0IFxcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDQ6XFx0XFx0ICAgIGVuZCBcXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwNS1cXHRcXHQgICAgc3RhcnQgXFx1MDAzZT0gZ3B1dmFfc3RhcnQgXFx1MDAyNlxcdTAwMjYgZW5kIFxcdTAwM2M9IGdwdXZhX2VuZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE2LVxcdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTE3OlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkxOTpcXHRcXHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZChub3RpZmllciwgc3RhcnQsIGVuZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjAtXFx0XFx0aWYgKHJhbmdlKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMS1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSB3aXRoICdtaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMnXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MzI6XFx0XFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMzLVxcdFxcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICsgZmF1bHRlZCBpbiB3aGljaCBjcmVhdGVzIGFsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MzgtXFx0XFx0aWYgKGVuZCAtIHN0YXJ0IFxcdTAwM2M9IGNoZWNrX3BhZ2VzX3RocmVzaG9sZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTM5OlxcdFxcdCAgICAhZHJtX2dwdXN2bV9jaGVja19wYWdlcyhncHVzdm0sIG5vdGlmaWVyLCBzdGFydCwgZW5kLCBkZXZfcHJpdmF0ZV9vd25lcikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0MC1cXHRcXHRcXHQrK2k7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0OS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk1MDogKiBkcm1fZ3B1c3ZtX2RyaXZlcl9sb2NrX2hlbGQoKSAtIEFzc2VydCBHUFUgU1ZNIGRyaXZlciBsb2NrIGlzIGhlbGRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTU0LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU1OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTU2LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYwLSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NjE6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0pXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Njc6ICogZHJtX2dwdXN2bV9maW5kX3ZtYV9zdGFydCgpIC0gRmluZCBzdGFydCBhZGRyZXNzIGZvciBmaXJzdCBWTUEgaW4gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NzU9dW5zaWduZWQgbG9uZ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTc2OmRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3Ny1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ny19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9maW5kX3ZtYV9zdGFydCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTktXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTAwMTogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KCkgLSBGaW5kIG9yIGluc2VydCBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTItICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDEzOnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMTQ6ZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBncHV2YV9lbmQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDE4OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4KVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxOS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIwOlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMjE6XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAyMi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdwdXN2bS1cXHUwMDNlbW07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMjgtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDI5OlxcdGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAzMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAzNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzg6XFx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoZ3B1c3ZtLCBmYXVsdF9hZGRyLCBmYXVsdF9hZGRyICsgMSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM5LVxcdGlmICghbm90aWZpZXIpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDA6XFx0XFx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKGdwdXN2bSwgZmF1bHRfYWRkcik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDQxLVxcdFxcdGlmIChJU19FUlIobm90aWZpZXIpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgbW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBkcm1fZ3B1c3ZtX25vdGlmaWVyX3NpemUobm90aWZpZXIpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZHJtX2dwdXN2bV9ub3RpZmllcl9vcHMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA1MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDcyLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA3MzpcXHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZChub3RpZmllciwgZmF1bHRfYWRkciwgZmF1bHRfYWRkciArIDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3NC1cXHRpZiAocmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDg0OlxcdGNodW5rX3NpemUgPSBkcm1fZ3B1c3ZtX3JhbmdlX2NodW5rX3NpemUoZ3B1c3ZtLCBub3RpZmllciwgdmFzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA4NS1cXHRcXHRcXHRcXHRcXHRcXHQgZmF1bHRfYWRkciwgZ3B1dmFfc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwOTMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDk0OlxcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9hbGxvYyhncHVzdm0sIG5vdGlmaWVyLCBmYXVsdF9hZGRyLCBjaHVua19zaXplLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA5NS1cXHRcXHRcXHRcXHQgICAgICAgbWlncmF0ZV9kZXZtZW0pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTAwLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEwMTpcXHRkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydChub3RpZmllciwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwMi1cXHRpZiAobm90aWZpZXJfYWxsb2MpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTAzOlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KGdwdXN2bSwgbm90aWZpZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTExNi1cXHRpZiAobm90aWZpZXJfYWxsb2MpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTE3OlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShncHVzdm0sIG5vdGlmaWVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMTgtZXJyX21tdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIxLX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMjI6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIzLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyNC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMjU6ICogX19kcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggR1BVIFNWTSBwYWdlcyAoaW50ZXJuYWwpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjIzLjg2ODAzMzczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDU2MjA0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkcm1fZ3B1c3ZtYCBmcmFtZXdvcmsuIEl0IHNlZW1zIGxpa2UgYSBnZW5lcmljIGhlbHBlciBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSwgYW5kIHJpZ2h0IG5vdywgb25seSB0aGUgYHhlYCBkcml2ZXIgdXNlcyBpdC4gSG1tLCB3YWl0IGEgbWludXRlLCBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZHJtX2dwdXN2bV9oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGlzIGEgYmlnZ2VyIGFyZWEgdG8gY29uc2lkZXIuIElzIGFueXRoaW5nICplbHNlKiB1c2luZyBgZHJtX2dwdXN2bWA/IE5vLCBqdXN0IGB4ZWAuIFNpbmNlIFN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGZ1enogYHhlYCAocmVxdWlyZXMgcmVhbCBJbnRlbCBHUFUgaGFyZHdhcmUpLCBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbiBgZHJtX3BhZ2VtYXAuY2AgYXJlIHByb2JhYmx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBTeXprYWxsZXIgZW52aXJvbm1lbnQuXG5cbkJ1dCB3aGF0IGFib3V0IGBtbS9taWdyYXRlX2RldmljZS5jYD8gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhpcyBpcyB1c2VkIGJ5IGB0ZXN0X2htbS5jYCwgd2hpY2ggU3l6a2FsbGVyICpkb2VzKiBmdXp6IHZpYSBgL2Rldi9obW1fZG1pcnJvcipgLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgYXJlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciBkZXZpY2UgbWlncmF0aW9uLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGVtLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaW50ZXJlc3RpbmcgYnVncy5cblxuQ2FuIGB0ZXN0X2htbWAgYWN0dWFsbHkgdHJpZ2dlciBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gPyBXZWxsLCBpdCdzIGNhbGxlZCB3aXRoaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgdGhhdCdzIHdoZW4gYGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYCBpcyB0cnVlLiBPa2F5LCBjYW4gd2UgbWFwIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGFuZCB0aGVuIG1pZ3JhdGUgaXQgdXNpbmcgYHRlc3RfaG1tYD8gWWVzLCBgdGVzdF9obW1gIHVzZXMgc3RhbmRhcmQgYG1tYXBgIGNhbGxzLCBhbmQgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgdG8gY3JlYXRlIFRIUHMsIHdoaWNoIGNvdWxkIHRoZW4gYmUgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSB1c2luZyB0aGUgYHRlc3RfaG1tYCBpb2N0bHMuXG5cbkxldCdzIGRpZyBpbnRvIGB0ZXN0X2htbWAgaXRzZWxmLiBUaGUgZHJpdmVyIGltcGxlbWVudHMgZHVtbXkgZGV2aWNlIG1lbW9yeSB1c2luZyBgREVWSUNFX1BSSVZBVEVgIHBhZ2VzLiBXaGVuIGEgdXNlciBjYWxscyBgSE1NX0RNSVJST1JfQ01EX01JR1JBVEVfVE9fREVWSUNFYCwgaXQgZW5kcyB1cCBjYWxsaW5nIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgd2hpY2ggZXZlbnR1YWxseSBjYWxscyBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBJZiB3ZSBkaWQgbWFwIGEgVEhQLCBgbWlncmF0ZV92bWFfc2V0dXBgIHdvdWxkIGhhbmRsZSB0aGUgUE1ELiBHb29kISBXYWl0LCBgbWlncmF0ZV92bWFfc2V0dXBgICpkb2VzKiBoYW5kbGUgVEhQcyEgVGhhdCBpcyBleGNlbGxlbnQgbmV3cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYG1pZ3JhdGVfdm1hX3NldHVwYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gY29uZmlybSB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MzIuOTI0MjQwODQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ5NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9NjYwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY2LS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjY3OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTY2OC0gKiBAYXJnczogY29udGFpbnMgdGhlIHZtYSwgc3RhcnQsIGFuZCBwZm5zIGFycmF5cyBmb3IgdGhlIG1pZ3JhdGlvblxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MzA6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG5tbS9taWdyYXRlX2RldmljZS5jLTczMS17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc2OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3NzA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzEtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2ZcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3OTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgwLSAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNTQ5PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTYxLVxcdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1NjI6XFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1NjMtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjMyLjk5Mzc0MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTg0Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuaXR0eS1ncml0dHk6IGRvZXMgdGhpcyBmdW5jdGlvbiwgYXMgaXQgc3RhbmRzLCBjb3JyZWN0bHkgaGFuZGxlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpPyBXZSBrbm93IGhvdyBjcnVjaWFsIFRIUCBtYW5hZ2VtZW50IGlzIGZvciBwZXJmb3JtYW5jZSBpbiBtb2Rlcm4gc3lzdGVtcywgYW5kIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb2RlIGlzIFRIUC1hd2FyZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgY2hlY2tzIGZvciBodWdlIHBhZ2UgbWFwcGluZ3M/IERvZXMgaXQgcHJvcGVybHkgcmUtbWFwIGh1Z2UgcGFnZXMgaWYgdGhleSBhcmUgc3BsaXQgb3IgbWVyZ2VkIGR1cmluZyBtaWdyYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBkdXJpbmcgdGhlIGVudGlyZSBwcm9jZXNzIHRoYXQgY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24/IFRoZXNlIGFyZSBzb21lIG9mIHRoZSBrZXkgcXVlc3Rpb25zIHRoYXQgSSBuZWVkIGFuc3dlcmVkIHRvIGNvbmZpcm0gaXQgaXMgdGhyZWFkLXNhZmUuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcgYW5kIHBhZ2UgZmxhZ3MsIGlzIGluIG9yZGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGNvbXBsZXggYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIFRIUCBtYW5hZ2VtZW50IGlzIG5vdCBpbW1lZGlhdGVseSBhcHBhcmVudC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBoZXJlLCBvdGhlcndpc2UsIGl0IGNvdWxkIGNhdXNlIGJpZyBwcm9ibGVtcyBpbiBhIGxpdmUgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MzYuNTM1NTkyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMjQ4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9ODI9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjQ6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNS0gKiBmb2xpbyBmb3IgZGV2aWNlIHByaXZhdGUgcGFnZXMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNS0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNjpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzctXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjU2LVxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjU3OlxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTI1OC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTUzPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjUtXFx0ICogc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHphcHMgcmF0aGVyIHRoYW4gZGVtb3RlcyBhIFBNRCBpbiBhIFZNQSB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo5NjY6XFx0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTY3LVxcdCAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05ODYtXFx0ICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo5ODc6XFx0ICogcmVmZXJlbmNlIHRha2VuIGJ5IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBpcyBzdGlsbCBoZWxkLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTg4LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzozNi41Nzg4MjE5NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxNjcxNDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRIUCBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAga2lja3MgaW4gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggaHVnZSBQTURzLCBtZWFuaW5nIFRIUHMgYXJlIGRlZmluaXRlbHkgc3VwcG9ydGVkIGR1cmluZyB0aGUgYG1pZ3JhdGVfdm1hX3NldHVwYCBwaGFzZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBBbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGl0c2VsZiBpcyB0aGUgd29ya2hvcnNlIGJlaGluZCBib3RoIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuXG5cblNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBgdGVzdF9obW1gIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGlmIGl0J3MgbWlncmF0aW5nIGEgVEhQIHRvIGRldmljZSBtZW1vcnkuIFRoZW4sIGlmIHRoZSBkZXN0aW5hdGlvbiBkb2Vzbid0IHN1cHBvcnQgVEhQcywgb3IgaWYgdGhlIGFsbG9jYXRpb24gZ29lcyBiZWxseS11cCwgdGhlIGNvZGUgd2lsbCBzcGxpdCB0aGUgZm9saW8uXG5cbldhaXQgYSBzZWNvbmQsIGxldCBtZSB6b29tIGluIG9uIHRoYXQgY3JpdGljYWwgY29uZGl0aW9uLi4uIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBjYWxscyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIG9ubHkgd2hlbiB0aGUgc291cmNlIFBGTiBpcyBtYXJrZWQgZm9yIG1pZ3JhdGlvbiAoYE1JR1JBVEVfUEZOX01JR1JBVEVgKSwgaXQncyBhIGxhcmdlIGZvbGlvIChgZm9saW9fdGVzdF9sYXJnZWApLCBhbmQgKmNydWNpYWxseSosIHRoZSBkZXN0aW5hdGlvbiBQRk4gZG9lcyAqbm90KiBoYXZlIGBNSUdSQVRFX1BGTl9DT01QT1VORGAgc2V0LiBUaGF0J3MgdGhlIGtleS4gSWYgdGhlIGRlc3RpbmF0aW9uIGxhY2tzIGBNSUdSQVRFX1BGTl9DT01QT1VORGAsIGl0IHRlbGxzIHVzIHRoZSBkZXN0aW5hdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIFRIUCwgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaW4gYHRlc3RfaG1tLmNgLCBhcmUgd2Ugc2V0dGluZyBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIG9uIHRoZSBkZXN0aW5hdGlvbiB3aGVuIG1pZ3JhdGluZz8gVGhhdCdzIHRoZSBsaW5jaHBpbi4gSWYgd2UgKmRvbid0KiwgdGhlbiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlcmNpc2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6NDIuNzk1NTM5NjQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwOTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUdSQVRFX1BGTl9DT01QT1VORFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjE0LVxcdFxcdHNwYWdlID0gQkFDS0lOR19QQUdFKHNwYWdlKTtcXG5saWIvdGVzdF9obW0uYzoyMTU6XFx0XFx0aWYgKHNyY19wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIHtcXG5saWIvdGVzdF9obW0uYy0yMTYtXFx0XFx0XFx0ZHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvX2FsbG9jKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjI4LVxcdFxcdGlmIChvcmRlcilcXG5saWIvdGVzdF9obW0uYzoyMjk6XFx0XFx0XFx0ZHN0X3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmMtMjMwLVxcdFxcdGZvbGlvX2NvcHkocGFnZV9mb2xpbyhkcGFnZSksIHBhZ2VfZm9saW8oc3BhZ2UpKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTczOT1zdGF0aWMgdm9pZCBkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzQ5LVxcdFxcdHN0cnVjdCBwYWdlICpycGFnZTtcXG5saWIvdGVzdF9obW0uYzo3NTA6XFx0XFx0Ym9vbCBpc19sYXJnZSA9ICpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG5saWIvdGVzdF9obW0uYy03NTEtXFx0XFx0aW50IHdyaXRlID0gKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9XUklURSkgPyBNSUdSQVRFX1BGTl9XUklURSA6IDA7XFxuLS1cXG5saWIvdGVzdF9obW0uYy04MjUtXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8oZHBhZ2UpO1xcbmxpYi90ZXN0X2htbS5jOjgyNjpcXHRcXHRcXHQqZHN0IHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTgyNy1cXG4tLVxcbmxpYi90ZXN0X2htbS5jPTg5ND1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTkyMC1cXG5saWIvdGVzdF9obW0uYzo5MjE6XFx0XFx0aWYgKCpkc3QgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcXG5saWIvdGVzdF9obW0uYy05MjItXFx0XFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhwYWdlX2ZvbGlvKGRwYWdlKSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMzItXFx0XFx0aWYgKG9yZGVyKVxcbmxpYi90ZXN0X2htbS5jOjEwMzM6XFx0XFx0XFx0KmRzdCA9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTEwMzQtXFx0XFx0aWYgKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9XUklURSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMzgtXFx0XFx0XFx0ZG1pcnJvci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQztcXG5saWIvdGVzdF9obW0uYzoxMDM5OlxcdFxcdFxcdCpkc3QgXFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTEwNDAtXFx0XFx0XFx0ZHBhZ2UgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo0Mi44NDI4NTczNzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjI1NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgQ29kZSBpbiBtbS9taWdyYXRlX2RldmljZS5jKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgY2FuIGJlIHRyaWdnZXJlZCwgYW5kIGB0ZXN0X2htbS5jYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHJvdXRlLiBJdCBkZWZpbml0ZWx5ICpzdXBwb3J0cyogYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgYW5kIHRoZXJlJ3MgZXZlbiBhIGZsYWcsIGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgLCB0aGF0ICpjbGVhcnMqIGl0IGFuZCBzZXRzIGBkcGFnZSA9IE5VTExgLiBBY3R1YWxseSwgd2FpdCBhIHNlY29uZC4uLiBpZiBgZHBhZ2VgIGlzIE5VTEwsIHRoZSBtaWdyYXRpb24gZmFpbHMgb3V0cmlnaHQuXG5cblRoZSBrZXkgaXMsIGlmIGB0ZXN0X2htbWAgYWxsb2NhdGVzIGFuICpvcmRlci0wKiBwYWdlIGluc3RlYWQgb2YgYSBUSFAsIGl0IHdvbid0IHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIGluIHRoZSBmaXJzdCBwbGFjZSEgTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJICpmb3JjZSogYHRlc3RfaG1tYCB0byBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzIHdoZW4gaXQgbm9ybWFsbHkgdHJpZXMgZm9yIGEgVEhQP1xuXG5Mb29raW5nIGF0IGBkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHlgLCBpdCB1c2VzIGBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlYC4gSXQgY2hlY2tzIGBpc19sYXJnZSA9ICpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EYC4gSWYgYGlzX2xhcmdlYCAobWVhbmluZyB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSBsYXJnZSBwYWdlKSB0aGUgY29kZSB0cmllcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCB0cnVlKWAuIElmIHRoYXQgZmFpbHMsIGl0ICpmYWxscyBiYWNrKiB0byBhbiBvcmRlci0wIGFsbG9jYXRpb24gd2l0aCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSlgIGFuZCBzZXRzIGBpc19sYXJnZWAgdG8gZmFsc2UuIEJpbmdvISBJZiB0aGUgXCJ0cnVlXCIgYWxsb2NhdGlvbiBmYWlscywgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIVxuXG5UaGF0IGZhbGxiYWNrIHBhdGggbWVhbnMgdGhhdCBpdCAqd29uJ3QqIHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZSBmYWxsYmFjayBwYXRoIGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgbWVhbnMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBnZXRzIGNhbGxlZC4gU28geWVzLCB0aGUgY29kZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgKnJlYWNoYWJsZSogdGhyb3VnaCBgdGVzdF9obW1gIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBcInRydWVcIiBhbGxvY2F0aW9uIGZhaWx1cmUuXG5cbk5vdywgd2hhdCBhYm91dCBgZHJtX3BhZ2VtYXAuY2A/IEl0IGludHJvZHVjZXMgZmF1bHQgaW5qZWN0aW9uLCBgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvYCwgYW5kIG1vZGlmaWVzIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlc2AgYW5kIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm5gLiBCdXQgaGVyZSdzIHRoZSBjYXRjaDogYGRybV9wYWdlbWFwLmNgIGlzIG9ubHkgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIuIEFuZCBgeGVgIGlzbid0IGZ1enplZCBpbiB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwOyBpdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIGxpa2VseSAqbm90KiByZWFjaGFibGUuIFdhaXQsIGxldCBtZSBqdXN0IHBhdXNlLi4uIGlzIGBkcm1fcGFnZW1hcC5jYCAqZXhjbHVzaXZlbHkqIHVzZWQgYnkgYHhlYD8gSXMgaXQgdXNlZCBieSAqYW55KiBvdGhlciBkcml2ZXI/IEkgdGhvdWdodCBJIGNoZWNrZWQgZWFybGllciBhbmQgZGV0ZXJtaW5lZCBpdCB3YXNuJ3QgYnV0IGxldCdzIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1MS4wOTkxMTYwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzNzYyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9wYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNzQ0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMjpcXHRkcm1fcGFnZW1hcC5vXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTM6XFx0ZHJtX3BhZ2VtYXBfdXRpbC5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fZ3B1c3ZtLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxOTojaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMC0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wcmludC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzgtICpcXHRcXHRpZiAoZHJpdmVyX21pZ3JhdGlvbl9wb2xpY3kocmFuZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzk6ICpcXHRcXHRcXHRlcnIgPSBkcm1fcGFnZW1hcF9wb3B1bGF0ZV9tbShkcml2ZXJfY2hvb3NlX2RybV9wYWdlbWFwKCksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODAtICpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBncHV2YV9zdGFydCwgZ3B1dmFfZW5kLCBncHVzdm0tXFx1MDAzZW1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04ODU9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMC1cXHRcXHQgKiByYW5nZXMuIFdoZW4gbWlncmF0aW5nIHRoZSBTVk0gcmFuZ2VzLCBzb21lIHByb2Nlc3NlcyBmYWlsIGluXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MzE6XFx0XFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAnbWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzJ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMyLVxcdFxcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9yYW5nZV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTEzMz1zdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTM3OlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSBzdm1fcGFnZXMtXFx1MDAzZWRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzOC1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBncHVzdm0tXFx1MDAzZWRybS1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTYzLVxcdFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBqKyspIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExNjQ6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKmFkZHIgPSBcXHUwMDI2c3ZtX3BhZ2VzLVxcdTAwM2VkbWFfYWRkcltqXTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExNjUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODctXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTg4OlxcdFxcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXFx1MDAzZWRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODktXFx0XFx0c3ZtX3BhZ2VzLVxcdTAwM2VkcGFnZW1hcCA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzItXFx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQzMzpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQzNC1cXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlc19mbGFncyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTUyMC1cXHRcXHQgICAgaXNfZGV2aWNlX2NvaGVyZW50X3BhZ2UocGFnZSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1MjE6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqX196ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUyMjpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTIzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM2LVxcdFxcdFxcdFxcdHBhZ2VtYXAgPSBwYWdlX3BnbWFwKHBhZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUzNzpcXHRcXHRcXHRcXHRkcGFnZW1hcCA9IGRybV9wYWdlbWFwX3BhZ2VfdG9fZHBhZ2VtYXAocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM4LVxcdFxcdFxcdFxcdGlmIChkcm1fV0FSTl9PTihncHVzdm0tXFx1MDAzZWRybSwgIWRwYWdlbWFwKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTUzLVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NDpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9nZXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NTpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wdXQoc3ZtX3BhZ2VzLVxcdTAwM2VkcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTU2LVxcdFxcdFxcdFxcdHN2bV9wYWdlcy1cXHUwMDNlZHBhZ2VtYXAgPSBkcGFnZW1hcDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTYwNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2MDg6XFx0XFx0XFx0c3ZtX3BhZ2VzLVxcdTAwM2VkbWFfYWRkcltqXSA9IGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjA5LVxcdFxcdFxcdFxcdChhZGRyLCBEUk1fSU5URVJDT05ORUNUX1NZU1RFTSwgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMS0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9kcnYuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjojaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcF91dGlsLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcHJpbnQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTE4PXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIxLSAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIyOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpLCBleGVyY2lzaW5nIHRoZSBvcmRlci0wIGZhbGxiYWNrXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMtICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjY6c3RhdGljIGJvb2wgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKHZvaWQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjcte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzAtI2Vsc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMTpzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03Ni0gKiAtIERldmljZSBNZW1vcnkgQWxsb2NhdGlvbnM6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Nzc6ICogICAgICBFbWJlZGRlZCBzdHJ1Y3R1cmUgY29udGFpbmluZyBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHRoZSBkcm1fcGFnZW1hcCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc4LSAqICAgICAgbWlncmF0ZSB0byAvIGZyb20gZGV2aWNlIG1lbW9yeS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgLSBHUFUgU1ZNIHpvbmUgZGV2aWNlIGRhdGFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04Ny0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODktICogQGRldm1lbV9hbGxvY2F0aW9uOiBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MDogKiBAZHBhZ2VtYXA6IFJlZmNvdW50ZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBzdHJ1Y3QgZHJtX3BhZ2VtYXAuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEtICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk5OnN0cnVjdCBkcm1fcGFnZW1hcF96ZGQge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwMC1cXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDE6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb247XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTAyOlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXA7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTAzLX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA2OiAqIGRybV9wYWdlbWFwX3pkZF9hbGxvYygpIC0gQWxsb2NhdGUgYSB6ZGQgc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzogKiBAZHBhZ2VtYXA6IFBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgc3RydWN0IGRybV9wYWdlbWFwLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNDpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1OmRybV9wYWdlbWFwX3pkZF9hbGxvYyhzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjQtXFx0emRkLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbiA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTI1OlxcdHpkZC1cXHUwMDNlZHBhZ2VtYXAgPSBkcm1fcGFnZW1hcF9nZXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzE6ICogZHJtX3BhZ2VtYXBfemRkX2dldCgpIC0gR2V0IGEgcmVmZXJlbmNlIHRvIGEgemRkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzItICogQHpkZDogUG9pbnRlciB0byB0aGUgemRkIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNy0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzg6c3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKmRybV9wYWdlbWFwX3pkZF9nZXQoc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzOS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDQtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTQ1OiAqIGRybV9wYWdlbWFwX3pkZF9kZXN0cm95KCkgLSBEZXN0cm95IGEgemRkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDYtICogQHJlZjogUG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGNvdW50IHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTA6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNTEte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE1MjpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE1MzpcXHRcXHRjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkLCByZWZjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTU0OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSA9IHpkZC1cXHUwMDNlZGV2bWVtX2FsbG9jYXRpb247XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTU1OlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSB6ZGQtXFx1MDAzZWRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE1Ni1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2Mi1cXHRrZnJlZSh6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE2MzpcXHRkcm1fcGFnZW1hcF9wdXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2NC19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNjYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTY3OiAqIGRybV9wYWdlbWFwX3pkZF9wdXQoKSAtIFB1dCBhIHpkZCByZWZlcmVuY2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTY4LSAqIEB6ZGQ6IFBvaW50ZXIgdG8gdGhlIHpkZCBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNzItICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTczOnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX3pkZF9wdXQoc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3NC17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTc1OlxcdGtyZWZfcHV0KFxcdTAwMjZ6ZGQtXFx1MDAzZXJlZmNvdW50LCBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTc2LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3OC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNzk6ICogZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfZm9saW8oKSAtIFB1dCBhIG1pZ3JhdGlvbiBmb2xpb1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4MC0gKiBAZm9saW86IFBvaW50ZXIgdG8gdGhlIGZvbGlvIHRvIHB1dFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE4NDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTAtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTkxOiAqIGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKCkgLSBQdXQgbWlncmF0aW9uIHBhZ2VzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTkyLSAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlc1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTk2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE5NzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyh1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjE0OlxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X2ZvbGlvKGZvbGlvKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTUtXFx0XFx0bWlncmF0ZV9wZm5baV0gPSAwO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIyMzogKiBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2UoKSAtIEdldCBhIHJlZmVyZW5jZSB0byBhIGRldmljZSBtZW1vcnkgcGFnZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIyNC0gKiBAcGFnZTogUG9pbnRlciB0byB0aGUgcGFnZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMzM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIzNC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzYtXFx0XFx0XFx0ICAgICAgIG9yZGVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMzc6XFx0Zm9saW9fc2V0X3pvbmVfZGV2aWNlX2RhdGEocGFnZV9mb2xpbyhwYWdlKSwgZHJtX3BhZ2VtYXBfemRkX2dldCh6ZGQpKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI0MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcygpIC0gTWFwIGRldmljZSBwcml2YXRlIG1pZ3JhdGlvblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0Mi0gKiBwYWdlcyBmb3IgR1BVIFNWTSBtaWdyYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNDMtICogQGRldjogVGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBtaWdyYXRpb24uXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjQ0OiAqIEBsb2NhbF9kcGFnZW1hcDogVGhlIGRybV9wYWdlbWFwIGxvY2FsIHRvIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSB0byBzdG9yZSBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXMuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0yNTg9c3RhdGljIGludFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI1OTpkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjYwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRybV9wYWdlbWFwICpsb2NhbF9kcGFnZW1hcCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjY0LVxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9taWdyYXRlX2RldGFpbHMgKm1kZXRhaWxzKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNzAtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGVfcGZuW2ldKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzE6XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI3MjpcXHRcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI3MzpcXHRcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBhZGRyO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI3NC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjgzLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI4NDpcXHRcXHR6ZGQgPSBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjg1LVxcdFxcdGRwYWdlbWFwID0gemRkLVxcdTAwM2VkcGFnZW1hcDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxNi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMTc6ICogc3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgLSBEUk0gcGFnZW1hcCBJT1ZBIHN0YXRlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzE4LSAqIEBkbWFfc3RhdGU6IERNQSBJT1ZBIHN0YXRlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzIzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMyNDpzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzI1LVxcdHN0cnVjdCBkbWFfaW92YV9zdGF0ZSBkbWFfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzMwOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcygpIC0gTWFwIHN5c3RlbSBvciBkZXZpY2UgY29oZXJlbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMzEtICogbWlncmF0aW9uIHBhZ2VzIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MzQ2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDc6ZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM0OS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzUxLVxcdFxcdFxcdFxcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjM1MjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzkzLVxcdFxcdHBhZ2VtYXBfYWRkcltpXSA9XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Mzk0OlxcdFxcdFxcdGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlKGRtYV9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5NS1cXHRcXHRcXHRcXHRcXHRcXHREUk1fSU5URVJDT05ORUNUX1NZU1RFTSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQwOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MDk6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQxMC0gKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDE4LSAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQxOTogKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjA6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjE6ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjItICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjgtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDI5OnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNyY19tcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDYwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQ2MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBwcmV2aW91c2x5IG1hcHBlZCBmb3IgR1BVIFNWTSBtaWdyYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjItICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDYzLSAqIEBtaWdyYXRlX3BmbjogQXJyYXkgb2YgbWlncmF0ZSBwZm5zIHNldCB1cCBmb3IgdGhlIG1hcHBlZCBwYWdlcy4gVXNlZCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQ2NDogKiBkZXRlcm1pbmUgdGhlIGRybV9wYWdlbWFwIG9mIGEgcGVlciBkZXZpY2UgcHJpdmF0ZSBwYWdlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ2NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSBvZiBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ3NC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDc2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ3Ny1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzktXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00ODEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDk1LVxcdFxcdGlmIChpc196b25lX2RldmljZV9wYWdlKHBhZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDk2OlxcdFxcdFxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0OTc6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IHpkZC1cXHUwMDNlZHBhZ2VtYXA7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDk4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MTc6ZHJtX3BhZ2VtYXBfbWlncmF0ZV9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZSAqcmVtb3RlX2RldmljZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MTk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqcmVtb3RlX2RwYWdlbWFwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBsb2NhbF9wZm5zW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTIxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcmVtb3RlX3BhZ2VzW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTIyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjMtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyNDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9taWdyYXRlX2RldGFpbHMgKm1kZXRhaWxzKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNi1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01Mjcte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyODpcXHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfZGV2aWNlX3ByaXZhdGVfcGFnZXMocmVtb3RlX2RldmljZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJlbW90ZV9kcGFnZW1hcCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0MS1vdXQ6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTQyOlxcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMocmVtb3RlX2RldmljZSwgcGFnZW1hcF9hZGRyLCBsb2NhbF9wZm5zLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0My1cXHRcXHRcXHRcXHRcXHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01NDc9c3RhdGljIGludFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0ODpkcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0OS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzeXNfcGZuc1tdLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2UgKmxvY2FsX3BhZ2VzW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTUxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTItXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU1MzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU1NjpcXHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKGRldm1lbS1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcGFnZW1hcF9hZGRyLCBzeXNfcGZucyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU2Ni1vdXQ6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTY3OlxcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtLVxcdTAwM2VkZXYsIHBhZ2VtYXBfYWRkciwgc3lzX3BmbnMsIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NjgtXFx0XFx0XFx0XFx0XFx0RE1BX1RPX0RFVklDRSwgc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc2LSAqIEBkZXZpY2U6IG1pZ3JhdGluZyBkZXZpY2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTc3OiAqIEBkcGFnZW1hcDogUG9pbnRlciB0byBzdHJ1Y3QgZHJtX3BhZ2VtYXAgdXNlZCBieSB0aGUgbWlncmF0aW5nIGRldmljZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NzgtICogQG9wczogVGhlIGNvcHkgb3BzIHRvIGJlIHVzZWQgZm9yIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTgwPXN0cnVjdCBtaWdyYXRlX3JhbmdlX2xvYyB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODItXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4MzpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NDpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4NS19O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4Ni1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODc6c3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3JhbmdlKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODgtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHNyY19wZm5zW10sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqcGFnZXNbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1OTE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWlncmF0ZV9yYW5nZV9sb2MgKmxhc3QsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jICpjdXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTk0OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX21pZ3JhdGVfZGV0YWlscyAqbWRldGFpbHMpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTk1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1OTY6XFx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MDgtXFx0aWYgKGxhc3QtXFx1MDAzZWRwYWdlbWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYwOTpcXHRcXHRyZXQgPSBkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChkZXZtZW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjEwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGFzdC1cXHUwMDNlZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjE4LVxcdGVsc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2MTk6XFx0XFx0cmV0ID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KGRldm1lbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c3JjX3BmbnNbbGFzdC1cXHUwMDNlc3RhcnRdLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjMxLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYzMjogKiBkcm1fcGFnZW1hcF9jcGFnZXMoKSAtIENvdW50IGNvbGxlY3RlZCBwYWdlc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYzMy0gKiBAbWlncmF0ZV9wZm46IEFycmF5IG9mIG1pZ3JhdGVfcGZuIGVudHJpZXMgdG8gYWNjb3VudFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjY0MjpzdGF0aWMgaW50IGRybV9wYWdlbWFwX2NwYWdlcyh1bnNpZ25lZCBsb25nICptaWdyYXRlX3BmbiwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQzLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY2Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2Njc6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oKSAtIE1pZ3JhdGUgYSBzdHJ1Y3QgbW1fc3RydWN0IHJhbmdlIHRvIGRldmljZSBtZW1vcnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02NjgtICogQGRldm1lbV9hbGxvY2F0aW9uOiBUaGUgZGV2aWNlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIG1pZ3JhdGUgdG8uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODktICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkwOmludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTItXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTM6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTQte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjY5NTpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZW9wcztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTY6XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVxcdTAwM2VkcGFnZW1hcDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTctXFx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwID0gZHBhZ2VtYXAtXFx1MDAzZXBhZ2VtYXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MDgtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzA5OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzEwLVxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzExOlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzEyLVxcdHZvaWQgKmJ1ZjtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc0NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo3NDY6XFx0emRkID0gZHJtX3BhZ2VtYXBfemRkX2FsbG9jKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NDctXFx0aWYgKCF6ZGQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc2OC1cXHRpZiAobWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzY5OlxcdCAgICBkcm1fcGFnZW1hcF9jcGFnZXMobWlncmF0ZS5zcmMsIG5wYWdlcykgIT0gbnBhZ2VzKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzcwLVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTktXFx0XFx0aWYgKHNyY19wYWdlIFxcdTAwMjZcXHUwMDI2IGlzX2RldmljZV9wcml2YXRlX3BhZ2Uoc3JjX3BhZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODIwOlxcdFxcdFxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnNyY196ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMTpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEoc3JjX3BhZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgyMi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1My1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTQ6XFx0XFx0ZHJtX3BhZ2VtYXBfZ2V0X2Rldm1lbV9wYWdlKHBhZ2UsIG9yZGVyLCB6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTY6XFx0XFx0LyogSWYgd2Ugc3dpdGNoZWQgdGhlIG1pZ3JhdGluZyBkcm1fcGFnZW1hcCwgbWlncmF0ZSBwcmV2aW91cyBwYWdlcyBub3cgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTc6XFx0XFx0ZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShkZXZtZW1fYWxsb2NhdGlvbiwgbWlncmF0ZS5zcmMsIG1pZ3JhdGUuZHN0LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1OC1cXHRcXHRcXHRcXHRcXHRcXHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcXHUwMDI2bGFzdCwgXFx1MDAyNmN1cixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg3MC1cXHRjdXIub3BzID0gTlVMTDsgLyogRm9yY2UgbWlncmF0aW9uICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODcxOlxcdGVyciA9IGRybV9wYWdlbWFwX21pZ3JhdGVfcmFuZ2UoZGV2bWVtX2FsbG9jYXRpb24sIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NzItXFx0XFx0XFx0XFx0XFx0cGFnZXMsIHBhZ2VtYXBfYWRkciwgXFx1MDAyNmxhc3QsIFxcdTAwMjZjdXIsIG1kZXRhaWxzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg4Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODg3OlxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg4OC1cXHRcXHRmb3IgKGkgPSBucGFnZXM7IGkgXFx1MDAzYyBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7ICsraSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxMC1lcnJfZnJlZTpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MTE6XFx0ZHJtX3BhZ2VtYXBfemRkX3B1dCh6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxMi1cXHRrdmZyZWUoYnVmKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxOC19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTE5OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjAtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTIxLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkyMjogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSAtIFBvcHVsYXRlIFJBTSBQRk5zIGZvciBhIFZNIGFyZWFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjMtICogQHZhczogUG9pbnRlciB0byB0aGUgVk0gYXJlYSBzdHJ1Y3R1cmUsIGNhbiBiZSBOVUxMXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MzctICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTM4OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2MS1cXHRcXHRpZiAoZmF1bHRfcGFnZSkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MjpcXHRcXHRcXHRpZiAoZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHNyY19wYWdlKSAhPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MzpcXHRcXHRcXHQgICAgZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKGZhdWx0X3BhZ2UpKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2NC1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NzQtXFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk3NTpcXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NzYtXFx0XFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5ODU6XFx0XFx0aWYgKG9yZGVyIFxcdTAwMjZcXHUwMDI2IGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbygpKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4Ni1cXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDcwLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzE6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3MjpzdGF0aWMgTExJU1RfSEVBRChkcm1fcGFnZW1hcF91bmhvbGRfbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3MzpzdGF0aWMgREVDTEFSRV9XT1JLKGRybV9wYWdlbWFwX3dvcmssIGRybV9wYWdlbWFwX2Rldl91bmhvbGRfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzY6ICogc3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIC0gU3RydWN0IHRvIGFpZCBpbiBkcm1fZGV2aWNlIHJlbGVhc2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3NzogKiBAbGluazogTGluayBpbnRvIGRybV9wYWdlbWFwX3VuaG9sZF9saXN0IGZvciBkZWZlcnJlZCByZWZlcmVuY2UgcmVsZWFzZXMuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3OC0gKiBAZHJtOiBkcm0gZGV2aWNlIHRvIHB1dC5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc5LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA4MDogKiBXaGVuIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIHJlbGVhc2VkLCB3ZSBhbHNvIG5lZWQgdG8gcmVsZWFzZSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgxLSAqIHJlZmVyZW5jZSBpdCBob2xkcyBvbiB0aGUgZHJtIGRldmljZS4gSG93ZXZlciwgdHlwaWNhbGx5IHRoYXQgbmVlZHNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgyLSAqIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBmcm9tIGEgc3lzdGVtLXdpZGUgd29ya3F1ZXVlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODM6ICogRWFjaCB0aW1lIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIGluaXRpYWxpemVkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4NC0gKiAob3IgcmUtaW5pdGlhbGl6ZWQgaWYgY2FjaGVkKSB0aGVyZWZvcmUgYWxsb2NhdGUgYSBzZXBhcmF0ZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODU6ICogZHJtX3BhZ2VtYXBfZGV2X2hvbGQgaXRlbSwgZnJvbSB3aGljaCB3ZSBwdXQgdGhlIGRybSBkZXZpY2UgYW5kXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Ni0gKiBhc3NvY2lhdGVkIG1vZHVsZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg3LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODg6c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg5LVxcdHN0cnVjdCBsbGlzdF9ub2RlIGxpbms7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDkyLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTM6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwOTQte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTU6XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqZHBhZ2VtYXApLCByZWYpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTY6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCA9IGRwYWdlbWFwLVxcdTAwM2VkZXZfaG9sZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA5OS1cXHQgKiBXZSBrbm93IHRoZSBwYWdlbWFwIHByb3ZpZGVyIGlzIGFsaXZlIGF0IHRoaXMgcG9pbnQsIHNpbmNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwMDpcXHQgKiB0aGUgc3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMDEtXFx0ICogcGFnZW1hcCBwcm92aWRlciBkcm1fZGV2aWNlIGFuZCBpdHMgbW9kdWxlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEwMy1cXHRkcGFnZW1hcC1cXHUwMDNlZGV2X2hvbGQgPSBOVUxMO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMDQ6XFx0ZHJtX3BhZ2VtYXBfc2hyaW5rZXJfYWRkKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTA1OlxcdGxsaXN0X2FkZChcXHUwMDI2ZGV2X2hvbGQtXFx1MDAzZWxpbmssIFxcdTAwMjZkcm1fcGFnZW1hcF91bmhvbGRfbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwNjpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZkcm1fcGFnZW1hcF93b3JrKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA3LVxcdC8qXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA5LVxcdCAqIHBhZ2VfZnJlZSgpLCB0aGUgY2FsbGVyIGlzIGhvbGRpbmcgYSByZWZlcmVuY2Ugb24gdGhlIGRldl9wYWdlbWFwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTA6XFx0ICogb3IgaWYgY2FsbGVkIGZyb20gZHJtX3BhZ2VtYXBfcHV0KCksIHRoZSBkaXJlY3QgY2FsbGVyIGlzIHN0aWxsIGFsaXZlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTEtXFx0ICogVGhpcyBlbnN1cmVzIHdlIGNhbid0IHJhY2Ugd2l0aCBUSElTIG1vZHVsZSB1bmxvYWQuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE2LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTE3OlxcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHJtX3BhZ2VtYXBfdW5ob2xkX2xpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTg6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCwgKm5leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExOS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVxcdC8qXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMTpcXHQgKiBEZWZlcnJlZCByZWxlYXNlIG9mIGRybV9wYWdlbWFwIHByb3ZpZGVyIGRldmljZSBhbmQgbW9kdWxlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMjItXFx0ICogVEhJUyBtb2R1bGUgaXMga2VwdCBhbGl2ZSBkdXJpbmcgdGhlIHJlbGVhc2UgYnkgdGhlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMzpcXHQgKiBmbHVzaF93b3JrKCkgaW4gdGhlIGRybV9wYWdlbWFwX2V4aXQoKSBmdW5jdGlvbi5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTI0LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzNS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM2OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMzc6ZHJtX3BhZ2VtYXBfZGV2X2hvbGQoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTM4LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM5OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCAqZGV2X2hvbGQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE0MC1cXHRzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZHBhZ2VtYXAtXFx1MDAzZWRybTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNTQtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1NTogKiBkcm1fcGFnZW1hcF9yZWluaXQoKSAtIFJlaW5pdGlhbGl6ZSBhIGRybV9wYWdlbWFwXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1NjogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byByZWluaXRpYWxpemVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU3LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1ODogKiBSZWluaXRpYWxpemUgYSBkcm1fcGFnZW1hcCwgZm9yIHdoaWNoIGRybV9wYWdlbWFwX3JlbGVhc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU5LSAqIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLiBUaGlzIGludGVyZmFjZSBpcyBpbnRlbmRlZCBmb3IgdGhlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2MDogKiBzaXR1YXRpb24gd2hlcmUgdGhlIGRyaXZlciBjYWNoZXMgYSBkZXN0cm95ZWQgZHJtX3BhZ2VtYXAuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2MS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY0OmludCBkcm1fcGFnZW1hcF9yZWluaXQoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY2OlxcdGRwYWdlbWFwLVxcdTAwM2VkZXZfaG9sZCA9IGRybV9wYWdlbWFwX2Rldl9ob2xkKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY3LVxcdGlmIChJU19FUlIoZHBhZ2VtYXAtXFx1MDAzZWRldl9ob2xkKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzItfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNzM6RVhQT1JUX1NZTUJPTChkcm1fcGFnZW1hcF9yZWluaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzQtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3NS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc2OiAqIGRybV9wYWdlbWFwX2luaXQoKSAtIEluaXRpYWxpemUgYSBwcmUtYWxsb2NhdGVkIGRybV9wYWdlbWFwXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NzogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byBpbml0aWFsaXplLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzgtICogQHBhZ2VtYXA6IFRoZSBhc3NvY2lhdGVkIGRldl9wYWdlbWFwIHByb3ZpZGluZyB0aGUgZGV2aWNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjUxLjQ0Mjg4NTAxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5ODA2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgZHJtX3BhZ2VtYXAuY2AgYW5kIGl0cyByb2xlLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHhlYCBkcml2ZXIgdXRpbGl6ZXMgaXQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBkcm1fZ3B1c3ZtYC4gQnV0IHNvbWV0aGluZydzIG5pZ2dsaW5nIGF0IG1lLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgb25seSBkcml2ZXIgaW52b2x2ZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGBub3V2ZWF1YCBkcml2ZXIgZGlyZWN0b3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIG9yIGZvcmdvdHRlbiBhIG51YW5jZWQgaW50ZXJhY3Rpb24uIEl0J3MgYmVzdCB0byBiZSBzeXN0ZW1hdGljLCBhbmQgZG91YmxlLWNoZWNrLCBhbmQgbm90IGxldCBhc3N1bXB0aW9ucyBsZWFkIG1lIGFzdHJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1NS44NDI2OTUyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk0NDgwMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjU2LjExNjY0ODA2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwNDI4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEdyYXBoaWNzIERyaXZlciBPcHRpb25zKipcblxuQWxyaWdodCwgSSdtIGhpdHRpbmcgYSB3YWxsIHdpdGggYG5vdXZlYXVgLiBOb3RoaW5nJ3MgbWF0Y2hpbmcgdXAgdGhlcmUsIHdoaWNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgZ2l2ZW4gdGhlIGV4cGVjdGVkIGhhcmR3YXJlLiBPa2F5LCBsZXQncyBwaXZvdC4gSWYgYG5vdXZlYXVgIGlzbid0IGNvb3BlcmF0aW5nLCB0aGVuIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGBhbWRncHVgLiBJdCdzIGEga2V5IGRyaXZlciB0byBjaGVjayB0byBzZWUgaWYgaXQgc3VwcG9ydHMgdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlIGhhcmR3YXJlIGlzIHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1OS4xNzcwNzg4MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk0OTA3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2FtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6NTkuNDQxMDM0ODA4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjQ4MjQzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFRhcmdldCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbml0aWFsbHkgdGhvdWdodCB0aGUgY2hhbmdlcyBpbiBgZHJtX3BhZ2VtYXAuY2Agd2VyZSBkZWFkIGNvZGUsIHNpbmNlIHRoZSBgeGVgIGRyaXZlciBpc24ndCBwYXJ0IG9mIHN0YW5kYXJkIFN5emthbGxlciBmdXp6aW5nLiBJdCBuZWVkcyBzcGVjaWZpYyBJbnRlbCBYZSBoYXJkd2FyZSwgd2hpY2ggaXNuJ3QgdGhlIFN5emthbGxlciBkZWZhdWx0LiBCdXQgd2FpdCwgdGhvc2UgY2hhbmdlcyBpbiBgZHJtX3BhZ2VtYXAuY2AgYXJlICpkZWZpbml0ZWx5KiB1bnJlYWNoYWJsZS4gQnV0IEkgc2VlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBhbmQgSSBrbm93IGB0ZXN0X2htbS5jYCBpcyBmdXp6ZWQsIHNvICp0aGF0KiBjb2RlIGlzIHJlYWNoYWJsZS5cblxuUmlnaHQsIGB0ZXN0X2htbS5jYCB1c2VzIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBJJ20gcHJldHR5IHN1cmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBjYWxscyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFNvIHRoZSBjb3JlIE1NIGNoYW5nZXMsIGxpa2UgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhcmUgKmRlZmluaXRlbHkqIGhpdCB3aGVuIGB0ZXN0X2htbWAgbWlncmF0ZXMgVEhQcy4gSSBjYW4gdHJ1c3QgdGhvc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBleGVjdXRlZCBhbmQgdGVzdGVkLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJ1bmRvd24gb2YgdGhlIGZ1bmN0aW9ucyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdGhhdCB3ZXJlIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlOlxuKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYFxuKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgXG4qICAgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYFxuKiAgIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYFxuKiAgIGBtaWdyYXRlX2RldmljZV9yYW5nZWBcbiogICBgbWlncmF0ZV9kZXZpY2VfcGZuc2BcblxuT2theSwgdGhlIGxhc3QgdHdvLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXJlIGV4cG9ydGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGB0ZXN0X2htbWAgYWN0dWFsbHkgKnVzZXMqIHRoZW0gZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdXNlZnVsLiBMZXQgbWUgc2NhbiBgdGVzdF9obW0uY2AgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjA2LjAwNTg2MzgzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDY2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxuLS1cXG5saWIvdGVzdF9obW0uYy0yMDAtXFxubGliL3Rlc3RfaG1tLmM6MjAxOlxcdG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHNyY19wZm5zLCBzdGFydF9wZm4sIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjMxLVxcdH1cXG5saWIvdGVzdF9obW0uYzoyMzI6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmxpYi90ZXN0X2htbS5jOjIzMzpcXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjM0LVxcdGt2ZnJlZShzcmNfcGZucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjA2LjA1NDAyMTIwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQzMjgyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlncmF0ZV9kZXZpY2VgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHRlc3RfaG1tLmNgIGluZGVlZCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplYC4gVGhhdCBtZWFucyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IHRlc3QuIEV4Y2VsbGVudC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICprZXkqIGZ1bmN0aW9ucy4gTGV0J3MgbGlzdCB0aG9zZSBpbml0aWFsbHk6IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gQnV0IHdhaXQuLi4gY2hlY2tpbmcgdGhlIGNvZGUgYWdhaW4gSSBzZWUgdGhhdCBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgYXJlIHN0YXRpYywgc28gdGhleSBhcmVuJ3QgZGlyZWN0bHkgZXhwb3J0ZWQuXG5cblRoZXJlZm9yZSwgdGhlIGFjdHVhbGx5ICpleHBvcnRlZCogZnVuY3Rpb25zIGFyZSBgbWlncmF0ZV92bWFfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiAgT2theSwgc28gdGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGxpc3QgYXMgbXkgRm9jdXNTeW1ib2xzLiBIYW5nIG9uLCB0aG91Z2gg4oCTIGBtaWdyYXRlX3ZtYV9wYWdlc2AgKml0c2VsZiogZG9lc24ndCBoYXZlIGNoYW5nZXM7IGl0IGNhbGxzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgaXMgc3RhdGljLiAgU28gSSBvbmx5IG5lZWQgdG8gbGlzdCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGFzIGJlaW5nIG9mIGludGVyZXN0LlxuXG5GaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBgQ09ORklHX1RFU1RfSE1NYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBgdGVzdF9obW1gLiAgSSBhbHNvIHJlY2FsbCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBiZWluZyByZXF1aXJlZCBieSBgbWlncmF0ZV9kZXZpY2UuY2AuIE5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0MjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MTIuMDk3MzA3Nzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2Ni1cXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MTIuMjg5NzM5NTk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODMzNDUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYFRFU1RfSE1NYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBURVNUX0hNTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBhbnkgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGZvciBhIGRlYnVnLXJlbGF0ZWQgb3B0aW9uIGxpa2UgdGhpcy4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYFRFU1RfSE1NYCBhY3R1YWxseSAqZG9lcyosIGhvdyBpdCdzIHVzZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCdzIGVuYWJsZWQuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZSB0aGF0J3MgdXNpbmcgaXQuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBjb25maWd1cmF0aW9uLXJlbGF0ZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoxNS44NzMwODc0NDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ1NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzQ2PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXFxubGliL0tjb25maWcuZGVidWc6MzM1NDpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjE1LjkyMTEzNzE5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU0ODg4Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBURVNUX0hNTSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgYFRFU1RfSE1NYCAtIHRoYXQncyBhIGtleSBtb2R1bGUsIG9idmlvdXNseS4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IHJ1bm5pbmcgaXQsIHR3ZWFraW5nIGl0LCBvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBhIHRob3JvdWdoIGRlcGVuZGVuY3kgY2hlY2suIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSB0cm91Ymxlc2hvb3RpbmcgdW5leHBlY3RlZCByZXN1bHRzIGlmIEknbSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC5cIlxuXG5JJ20gdGhpbmtpbmcsIFwiSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcywgbW9kdWxlcywgYW5kIGV4dGVybmFsIHJlc291cmNlcyBhcmUgcHJlc2VudCwgY29ycmVjdGx5IHZlcnNpb25lZCwgYW5kIGFjY2Vzc2libGUuIElzIHRoZXJlIGEgZGVmaW5lZCBidWlsZCBwcm9jZXNzIG9yIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBJIG5lZWQgdG8gcmVmZXIgdG8/IFdoYXQgYWJvdXQgZGF0YSBmaWxlcz8gRG9lcyBpdCByZWx5IG9uIGFueSBzaGFyZWQgbGlicmFyaWVzIG9yIGN1c3RvbSBDKysgY29kZSB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIG1vZHVsZSdzIG1hbmlmZXN0P1wiIFxuXG5Fc3NlbnRpYWxseSwgXCJJJ20gbm90IGdvaW5nIHRvIHByb2NlZWQgYmVmb3JlIEkgaGF2ZSBhICpzb2xpZCogdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBURVNUX0hNTWAgcmVsaWVzIHVwb24uIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBUaGVyZSdzIHByb2JhYmx5IGEgZGVwZW5kZW5jaWVzIGZpbGUgdG8gY2hlY2sgb3IgYSBsaXN0IG9mIGltcG9ydHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUuXCIgRnJvbSB0aGVyZSwgSSB3aWxsIGxpa2VseSBmb3JtdWxhdGUgYSBwbGFuIHRvIHJ1biB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjU1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjE5Ljg3NjAyNzYwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMzEzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzUzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzM1NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoxOS45MjYwNjQ5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkyNTUxNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlYnVnIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYFRFU1RfSE1NYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGV4YW1pbmluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3NzaWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGRlYnVnIG9wdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGBURVNUX0hNTWAgaW5mbHVlbmNlcyB0aGUgYnVpbGQgcHJvY2Vzcywgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIHRob3JvdWdobHkgdG8gY29uZmlkZW50bHkgY29uZmlndXJlIGFuZCB0cm91Ymxlc2hvb3QgYW55IEhNTSByZWxhdGVkIGlzc3VlcyB0aGF0IG1heSBhcmlzZSBpbiBteSB3b3JrLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnIGluIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoyMy42MTg2MjA1NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNTA6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzNTY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzNTc6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzNTg6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzU5OlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzYwOlxcdFxcdGhlbHBcXG4zMzYxOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzM2MjpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzYzOlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzNjQ6XFx0XFxuMzM2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzM2NjpcXHRcXG4zMzY3OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG4zMzY4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZyZWVpbmcgcGFnZXNcXFwiXFxuMzM2OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjIzLjYxOTA1MDA1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzOTYzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgaGFzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhyZWUgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHksIHNvIEknbGwgaW5jbHVkZSBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uIEkgcmVtZW1iZXIgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIGl0ICpjb3VsZCogYmUgYnVpbHQgYXMgYSBtb2R1bGUuIEhvd2V2ZXIsIFN5emthbGxlciB1c3VhbGx5IHdvcmtzIGJlc3Qgd2hlbiBvcHRpb25zIGFyZSBlaXRoZXIgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLiBTbywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgU3l6a2FsbGVyICpzaG91bGQqIGxvYWQgaXQgYXMgbG9uZyBhcyB0aGUgbW9kdWxlIGlzIHByZXNlbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXJvdW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEhtbSwgSSdkIGJldHRlciBjb25maXJtIHRoYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoyOC4yMzMwMTg1MzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjYzNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MjguMjc5Mjg3NjU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjkxNDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAuLi4gdGhhdCdzIHRoZSBrZXkgdG8gY29tcGlsaW5nIGBtaWdyYXRlX2RldmljZS5jYC4gTWFrZXMgc2Vuc2UsIHRoZSBmaWxlIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBmZWF0dXJlcywgb3IgZGVwZW5kZW5jaWVzICplbmFibGUqIHRoaXMgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHRvIHNlZSB3aGF0IHB1bGxzIGl0IGluLiBXaGF0J3MgdXBzdHJlYW0gdGhhdCBtYWtlcyB0aGlzIHBvc3NpYmxlPyBMZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBHb3R0YSBkaWcgYSBsaXR0bGUgZGVlcGVyIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozMS41NDg0MzQ4OTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ0Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MzEuNTkzMzg1NjQxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzMxODcwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRldmljZSBNaWdyYXRpb24gTG9naWMgRmxvdyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYERFVklDRV9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBicmVhayB0aGF0IGRvd24uIEl0J3MgY2xlYXJseSBhIGNvbWJpbmF0aW9uOiBpdCAqbXVzdCogaW52b2x2ZSBhIGBNSUdSQVRJT05gIHByb2Nlc3MgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYSBgWk9ORV9ERVZJQ0VgLiBGaW5lLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNYWtlcyBzZW5zZSB0byBiZSBleHBsaWNpdCBhYm91dCB0aGUgc2NvcGUuXG5cbk5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0IGRlZmluZXMgYSBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbXBvbmVudCBpbiBkZXRhaWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERFVklDRV9NSUdSQVRJT05gLiBXaGF0IGRvZXMgdGhhdCB6b25lIHJlcHJlc2VudD8gV2hhdCBhcmUgdGhlIGtleSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHdpdGhpbiB0aGF0IHpvbmU/IFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozNS4zNjY1NzU3NThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODY3MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MzUuNDQwNDQ3MjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NTU2NjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlLUNoZWNraW5nIHRoZSBgREVWSUNFX1BSSVZBVEVgIFZhcmlhYmxlKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYERFVklDRV9QUklWQVRFYCB2YXJpYWJsZS4gSXQncyBiZWVuIG5hZ2dpbmcgYXQgbWUuIFdlJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGJ1dCB3aXRoIG91ciBsZXZlbCBvZiBjb21wbGV4aXR5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIHN0aWxsIGhhbmRsaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGNvcnJlY3RseS4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IGBERVZJQ0VfUFJJVkFURWAgaW50ZXJhY3RzIHdpdGggdGhlIHNlY3VyaXR5IGNvbnRleHQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBhcyB3ZWxsIGFzIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBkZXZpY2VzLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVyYWN0aW9ucyB0aGVyZSBhcmUgc3RpbGwgYXMgYW50aWNpcGF0ZWQgYW5kIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMsIHBhcnRpY3VsYXJseSBhcm91bmQgcHJpdmlsZWdlIGVzY2FsYXRpb24gb3IgZGF0YSBsZWFrYWdlLiBHaXZlbiB0aGUgc2Vuc2l0aXZpdHkgb2YgdGhlIGRhdGEgdGhhdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggaXQsIEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGxhc3QgcmV2aXNpb24gdG8gdGhlIGZpcm13YXJlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50cyBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHNwb3QtY2hlY2sgd2l0aCB0aGUgZGVidWdnZXIgaXMgaW4gb3JkZXIuIEl0J3MgYWJvdXQgbWFpbnRhaW5pbmcgdGhhdCBjcml0aWNhbCBsZXZlbCBvZiByaWdvciwgbm90IGp1c3QgYXNzdW1pbmcgaXQncyBzb2xpZCBiZWNhdXNlIGl0ICpzaG91bGQqIGJlLiBJdCdzIG15IGd1dCB0ZWxsaW5nIG1lIHRvIG1ha2Ugc3VyZSwgaXQganVzdCBuZXZlciBodXJ0cyB0byBiZSBleHRyYSBjYXV0aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozOS44MDYwMTgwOTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdGNvbmZpZyBITU1fTUlSUk9SXFxuMTI2MTpcXHRcXHRib29sXFxuMTI2MjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2NTpcXHRcXHRib29sXFxuMTI2NjpcXHRcXG4xMjY3OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjg6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjk6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNzA6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNzE6XFx0XFxuMTI3MjpcXHRcXHRoZWxwXFxuMTI3MzpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3NDpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjc1OlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzY6XFx0XFxuMTI3NzpcXHRjb25maWcgVk1BUF9QRk5cXG4xMjc4OlxcdFxcdGJvb2xcXG4xMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozOS44MDYxMTcxNjVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2OTQ3NjgzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UndmUgZ290IGRlcGVuZGVuY2llcy4gYERFVklDRV9QUklWQVRFYCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gSWYgYFRFU1RfSE1NYCBpcyBlbmFibGVkLCB3ZSdyZSBhbHNvIHB1bGxpbmcgaW4gYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgSSBzaG91bGQgYmUgdXNpbmcgZm9yIHRoaXMgbXVzdCBpbmNsdWRlIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUlHUkFUSU9OYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIGFuZCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoZSBgZHJtX3BhZ2VtYXAuY2AgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgZHJtX2dwdXN2bWAsIHdoaWNoIHRoZSBgeGVgIGRyaXZlciB1dGlsaXplcy4gU2luY2Ugd2UncmUgbm90IGZ1enppbmcgdGhlIGB4ZWAgZHJpdmVyLCB0aGF0J3MgbGlrZWx5IGEgZGVhZCBlbmQgZm9yIG91ciBwdXJwb3Nlcy4gSG93ZXZlciwgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFyZSB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9ucyBmb3IgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBgdGVzdF9obW0uY2AgbW9kdWxlLCB3aGljaCBpcyBhY3RpdmVseSBmdXp6ZWQgYnkgU3l6a2FsbGVyLiBUaGVzZSBjaGFuZ2VzIGZvY3VzIG9uIGhhbmRsaW5nIFRIUCBzcGxpdHRpbmcgZHVyaW5nIGRldmljZSBtaWdyYXRpb24gd2hlbiB0aGUgZGVzdGluYXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZW0gb3IgYWxsb2NhdGlvbiBmYWlscy4gRnVuY3Rpb25hbGx5IHRoYXQncyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLCBzaW5jZSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgY2FsbGVkIGZyb20gdGhlcmUgYXMgd2VsbC4gV2FpdCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBpcyBleHBvcnRlZCBhbmQgdXNlZCBieSBgdGVzdF9obW0uY2Agc3BlY2lmaWNhbGx5IGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIHdoZXJlYXMgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpcyB1c2VkIGJ5IGBkbWlycm9yX2RldmljZV9ldmljdF9jaHVua2AuIFNvLCBhbGwgb2YgdGhlbSBhcmUgcmVhY2hhYmxlLlxuXG5RdWljayBzYW5pdHkgY2hlY2s6IGlzIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2Agc3RhdGljPyBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdDogYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoZSBgZHJtX3BhZ2VtYXAuY2AgY29kZSBtaWdodCBiZSByZWFjaGFibGUgdmlhIGFub3RoZXIgcm91dGUuIE9rYXksIGBkcm1fcGFnZW1hcC5jYCBoYXMgYGRybV9wYWdlbWFwX21vZHVsZV9pbml0YCB3aGljaCByZWdpc3RlcnMgYSBkZWJ1Z2ZzIGZpbGUuIEFoLCBJIHNlZTogYGRybV9wYWdlbWFwLmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgd2l0aCBgQ09ORklHX1pPTkVfREVWSUNFYCBlbmFibGVkIGFuZCBgZHJtX2dwdXN2bV9oZWxwZXJgIHNlbGVjdGVkLCB3aGljaCBpbiB0dXJuIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVfR1BVU1ZNYC4gU28gaWYgYENPTkZJR19EUk1fWEVfR1BVU1ZNYCBpc24ndCBlbmFibGVkLCB0aGVuIGBkcm1fcGFnZW1hcC5jYCB3b24ndCBiZSBjb21waWxlZC4gQ291bGQgYENPTkZJR19EUk1fWEVgIGJlIGVuYWJsZWQgaW4gU3l6a2FsbGVyPyBVc3VhbGx5IGl0IGVuYWJsZXMgYWxsIGRyaXZlcnMsIHNvIHByb2JhYmx5LiBJZiBpdCBpcyBlbmFibGVkLCBgZHJtX3BhZ2VtYXAuY2AgKndvdWxkKiBjb21waWxlLiBCdXQgZXZlbiB0aGVuLCB0aG9zZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLiBTaW5jZSB3ZSdyZSB1bmxpa2VseSB0byBoYXZlIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlLCB0aGF0IGRyaXZlciB3b24ndCBwcm9iZSwgYW5kIHRob3NlIGZ1bmN0aW9ucyB3b3VsZG4ndCBiZSBjYWxsZWQuIFNvLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYHRlc3RfaG1tLmNgLlxuXG5UbyBzdW1tYXJpemU6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIGhhbmRsZSBUSFAgc3BsaXR0aW5nIGR1cmluZyBkZXZpY2UgbWlncmF0aW9uLiBJdCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCBmb3IgZmF1bHQgaW5qZWN0aW9uIHRlc3RpbmcsIHRob3VnaCB0aGF0IHBhcnQgaXMgdW5yZWFjaGFibGUgZm9yIHVzLiBUaGUgY29yZSBNTSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIsIGZ1enplZCBieSBzeXprYWxsZXIuIFRoZSBkcml2ZXIgY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgd2hpY2ggdHJpZ2dlcnMgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC5cblxuU28gdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2AgYXJlIHdoYXQgSSBuZWVkOlxuLSBgVEVTVF9ITU1gXG4tIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbi0gYERFVklDRV9QUklWQVRFYFxuLSBgWk9ORV9ERVZJQ0VgXG4tIGBNSUdSQVRJT05gXG5cbk15IG1haW4gRm9jdXNTeW1ib2xzIGFyZTpcbi0gYG1pZ3JhdGVfdm1hX3BhZ2VzYFxuLSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgXG4tIGBtaWdyYXRlX2RldmljZV9yYW5nZWBcbi0gYG1pZ3JhdGVfZGV2aWNlX3BmbnNgXG5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxNzQsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjU5LjUwMDg5MDE4OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjc4MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4hv5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 23:19:56 +0000 UTC FinishedAt: 2026-08-05 23:39:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "TRANSPARENT_HUGEPAGE", "DEVICE_PRIVATE", "ZONE_DEVICE", "MIGRATION" ], "series_id": "2e7ea268-282a-4703-bca9-9196f95dd88d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "migrate_vma_pages", "migrate_device_pages", "migrate_device_range", "migrate_device_pfns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xuaW5kZXggODkyYjMyNWZhOTliOC4uNmFlOGM5YWEzNmNjYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xuQEAgLTMsNiAmIzQzOzMsNyBAQFxuICAqIENvcHlyaWdodCDCqSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWZlbmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEzLDI3IEBAXG4gI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9wYWdlbWFwX3V0aWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2RybS9kcm1fcHJpbnQuaFx1MDAzZVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTlxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuJiM0MztzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG1pZ3JhdGVfdG9fcmFtX2ZhdWx0X2luamVjdCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGb3JjZSBhIGhpZ2hlci1vcmRlciBkZXN0aW5hdGlvbiBmb2xpbyBhbGxvY2F0aW9uIHRvIGZhaWwgaW5cbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCksIGV4ZXJjaXNpbmcgdGhlIG9yZGVyLTAgZmFsbGJhY2tcbiYjNDM7ICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuJiM0MzsgKiBoYXZpbmcgdG8gZHJpdmUgdGhlIHN5c3RlbSBpbnRvIGFjdHVhbCBtZW1vcnkgcHJlc3N1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaG91bGRfZmFpbChcdTAwMjZtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QsIDEpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBET0M6IE92ZXJ2aWV3XG4gICpcbkBAIC0zODMsNiAmIzQzOzQwNSw1OCBAQCBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxuJiM0MzsgKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxuJiM0MzsgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbiYjNDM7ICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbiYjNDM7ICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheXNcbiYjNDM7ICpcbiYjNDM7ICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uXG4mIzQzOyAqXG4mIzQzOyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXG4mIzQzOyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxuJiM0MzsgKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcbiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcbiYjNDM7ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cbiYjNDM7ICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXG4mIzQzOyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGUgc291cmNlIGZvbGlvIGl0c2VsZiBpcyBvbmx5IHNwbGl0IGxhdGVyLCBieVxuJiM0MzsgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG4mIzQzOyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmRzdF9tcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOykge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19tcGZuW2ldKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGosIG5yO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcGFnZSkge1xuJiM0MztcdFx0XHRpJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XHRcdG5yID0gTlJfUEFHRVMob3JkZXIpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChvcmRlciBcdTAwMjZcdTAwMjYgIShkc3RfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XG4mIzQzO1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG5yIFx1MDAyNlx1MDAyNiBpICYjNDM7IGogXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0cGFnZXNbaSAmIzQzOyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYWdlc1tpXSA9IHBhZ2U7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aSAmIzQzOz0gbnI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoKSAtIFVubWFwIHBhZ2VzIHByZXZpb3VzbHkgbWFwcGVkIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxuICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZFxuQEAgLTg3NSw2ICYjNDM7OTQ5LDcgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKnNyY19wYWdlO1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0hJR0hVU0VSO1xuIFxuIFx0XHRpZiAoIShzcmNfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTg5MSwxMSAmIzQzOzk2Niw1MyBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbiBcbiBcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7XG4gXG4tXHRcdC8qIFRPRE86IFN1cHBvcnQgZmFsbGJhY2sgdG8gc2luZ2xlIHBhZ2VzIGlmIFRIUCBhbGxvY2F0aW9uIGZhaWxzICovXG4tXHRcdGlmICh2YXMpXG4tXHRcdFx0Zm9saW8gPSB2bWFfYWxsb2NfZm9saW8oR0ZQX0hJR0hVU0VSLCBvcmRlciwgdmFzLCBhZGRyKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxuJiM0MztcdFx0ICogcGFnZSwgUE1EIGFsaWduZWQgYW5kIGZsYWdnZWQgTUlHUkFURV9QRk5fQ09NUE9VTkQ6IGFueXRoaW5nXG4mIzQzO1x0XHQgKiBlbHNlIGlzIHNwbGl0IGJlZm9yZSBpdCByZWFjaGVzIHVzLCBlaXRoZXIgYnlcbiYjNDM7XHRcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcbiYjNDM7XHRcdCAqIG1pZ3JhdGVfZGV2aWNlX3BmbnMoKS4gQm90aCB0aGUgb3JkZXItMCBmYWxsYmFjayBiZWxvdyBhbmRcbiYjNDM7XHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuJiM0MztcdFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG9yZGVyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxuJiM0MztcdFx0XHQgICAgICAhKHNyY19tcGZuW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAob3JkZXIpXG4mIzQzO1x0XHRcdGdmcCB8PSBfX0dGUF9OT1dBUk47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbiYjNDM7XHRcdFx0Zm9saW8gPSBOVUxMO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFzKVxuJiM0MztcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xuIFx0XHRlbHNlXG4tXHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTtcbiYjNDM7XHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhnZnAsIG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiBvcmRlcikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIaWdoZXItb3JkZXIgYWxsb2NhdGlvbiBmYWlsZWQsIGZhbGwgYmFjayB0b1xuJiM0MztcdFx0XHQgKiBvcmRlci0wIGFsbG9jYXRpb25zIGZvciB0aGUgZW50aXJlIHJhbmdlIGNvdmVyZWRcbiYjNDM7XHRcdFx0ICogYnkgdGhlIG9yaWdpbmFsIGhpZ2hlci1vcmRlciBhbGxvY2F0aW9uLCB3aXRob3V0XG4mIzQzO1x0XHRcdCAqIHNldHRpbmcgTUlHUkFURV9QRk5fQ09NUE9VTkQsIHVudGlsIHdlIG1vdmUgcGFzdFxuJiM0MztcdFx0XHQgKiB0aGF0IHJhbmdlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBuciA9IE5SX1BBR0VTKG9yZGVyKTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBqO1xuJiM0MztcbiYjNDM7XHRcdFx0Z2ZwIFx1MDAyNj0gfl9fR0ZQX05PV0FSTjtcbiYjNDM7XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7LCBhZGRyICYjNDM7PSBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRmb2xpbyA9IHZhcyA/XG4mIzQzO1x0XHRcdFx0XHR2bWFfYWxsb2NfZm9saW8oZ2ZwLCAwLCB2YXMsIGFkZHIpIDpcbiYjNDM7XHRcdFx0XHRcdGZvbGlvX2FsbG9jKGdmcCwgMCk7XG4mIzQzO1x0XHRcdFx0aWYgKCFmb2xpbylcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZnJlZV9wYWdlcztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0cGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuJiM0MztcdFx0XHRcdG1wZm5baV0gPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihwYWdlKSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmICghZm9saW8pXG4gXHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuQEAgLTk0MCwxMSAmIzQzOzEwNTcsMTEgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRnb3RvIG5leHRfcHV0O1xuIFxuJiM0MztcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XG4gXHRcdHB1dF9wYWdlKHBhZ2UpO1xuIFx0XHRtcGZuW2ldID0gMDtcbiBcbi1cdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbi1cbiBuZXh0X3B1dDpcbiBcdFx0aSAmIzQzOz0gTlJfUEFHRVMob3JkZXIpO1xuIFx0fVxuQEAgLTExMjAsNyAmIzQzOzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuIFx0dW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0O1xuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFx0dW5zaWduZWQgaW50IHJldHJ5X2NvdW50ID0gMjtcbiBcbiBcdG5wYWdlcyA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5AQCAtMTE2MCwyNyAmIzQzOzEyNzcsMTkgQEAgaW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbmFsaXplO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xuLVxuLVx0XHRwYWdlc1tpXSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMocGFnZXMsIHNyYywgZHN0LCBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2VkZXYsIHBhZ2VtYXBfYWRkciwgZHN0LCBucGFnZXMsXG4mIzQzO1x0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UsIFx1MDAyNnN0YXRlKTtcbiBcdGlmIChlcnIpXG4gXHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcbiBcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xuIFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcbi1cdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFLCBcdTAwMjZzdGF0ZSk7XG4gXG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbkBAIC0xMjM1LDcgJiM0MzsxMzQ0LDcgQEAgc3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuIFx0emRkID0gZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHBhZ2UpO1xuIFx0aWYgKHRpbWVfYmVmb3JlNjQoZ2V0X2ppZmZpZXNfNjQoKSwgemRkLVx1MDAzZWRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZXRpbWVzbGljZV9leHBpcmF0aW9uKSlcbkBAIC0xMjkwLDI5ICYjNDM7MTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4mIzQzO1x0ZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMocGFnZXMsIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4tXHRpZiAoZXJyKVxuLVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbi1cdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuLVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gXHRpZiAoZGV2KVxuIFx0XHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcbiBcdFx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xuJiM0MztcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuJiM0MztcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFx1MDAyNm1pZ3JhdGUpO1xuIGVycl9mcmVlOlxuIFx0a3ZmcmVlKGJ1Zik7XG4gZXJyX291dDpcbkBAIC0xNDc2LDYgJiM0MzsxNTc4LDE2IEBAIHZvaWQgZHJtX3BhZ2VtYXBfZGVzdHJveShzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLCBib29sIGlzX2F0b21pY19vcl9yZWNsYWltXG4gXHRcdGtmcmVlKGRwYWdlbWFwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGRybV9wYWdlbWFwX21vZHVsZV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKVxuJiM0MztcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXCYjMzQ7ZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0XCYjMzQ7LCBOVUxMLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2luaXQoZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9leGl0KHZvaWQpXG4ge1xuIFx0Zmx1c2hfd29yayhcdTAwMjZkcm1fcGFnZW1hcF93b3JrKTtcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xuaW5kZXggOTA4ZDJkNGVjNDNhYy4uYWUxN2JkNTE2ZDI0OCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC04OTksMjIgJiM0Mzs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRERUZJTkVfRk9MSU9fVk1BX1dBTEsocHZtdywgZm9saW8sIHZtYSwgYWRkciwgUFZNV19TWU5DIHwgUFZNV19NSUdSQVRJT04pO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbiYjNDM7XHRcdGlmIChwdm13LnB0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbiYjNDM7XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYVxuJiM0MztcdFx0ICogbWlncmF0aW9uIGVudHJ5LCBzbyBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZCgpIGNyZWF0ZXMgUFRFXG4mIzQzO1x0XHQgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50XG4mIzQzO1x0XHQgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvXG4mIzQzO1x0XHQgKiBzdG9wIHRoZSB3YWxrIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBtaWdyYXRlX2RldmljZV91bm1hcCgpIHVubWFwcyB3aXRoIHRyeV90b19taWdyYXRlKGZvbGlvLCAwKSwgaS5lLiB3aXRob3V0XG4mIzQzOyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlclxuJiM0MzsgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxuJiM0MzsgKiBvZiB0aGVtLiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIGJlbG93IGRvZXMgbm90IGNhcmUsIGl0IG9ubHkgbG9va3MgYXQgdGhlXG4mIzQzOyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkXG4mIzQzOyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cbiYjNDM7ICogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgdHJpcHMgb3ZlciB0aGF0IGluIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG4mIzQzO1x0XHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRG8gbm90IHBhc3MgLmFub25fbG9jazogZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKCkgcmVxdWlyZXNcbiYjNDM7XHQgKiBmb2xpb19tYXBwZWQoKSwgYW5kIEBmb2xpbyBpcyBhbHJlYWR5IGZ1bGx5IHVubWFwcGVkIGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cm1hcF93YWxrKGZvbGlvLCBcdTAwMjZyd2MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGlkeCxcbiBcdFx0XHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpO1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgZmF1bHRfZm9saW87XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4tXHQgKiB0YWtlIGEgcmVmZXJlbmNlLCBzaW5jZSBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgd2l0aCBmcmVlemUgPSB0cnVlXG4tXHQgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLlxuJiM0MztcdCAqIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncygpIHdhbGtzIHRoZSBybWFwLCBhbmRcbiYjNDM7XHQgKiBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgemFwcyByYXRoZXIgdGhhbiBkZW1vdGVzIGEgUE1EIGluIGEgVk1BIHRoYXRcbiYjNDM7XHQgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlXG4mIzQzO1x0ICogVk1BIHR5cGUsIHNvIGEgZmlsZSBUSFAgY2FuIHJlYWNoIGhlcmU7IHRoZSByZXN0IG9mIHRoZSBtaWdyYXRlX3ZtYSgpXG4mIzQzO1x0ICogbWFjaGluZXJ5IG9ubHkgc3VwcG9ydHMgYW5vbnltb3VzIG1lbW9yeSBhbnl3YXkuXG4gXHQgKi9cbi1cdGZvbGlvX2dldChmb2xpbyk7XG4tXHRzcGxpdF9odWdlX3BtZF9hZGRyZXNzKG1pZ3JhdGUtXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIENQVSBmYXVsdCBvbiBhIGRldmljZSBwcml2YXRlIFBNRCBob2xkcyBhbiBleHRyYSByZWZlcmVuY2Ugb24gdGhlXG4mIzQzO1x0ICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKClcbiYjNDM7XHQgKiBvbmx5IHRvbGVyYXRlcyBhIHNpbmdsZSBjYWxsZXIgcmVmZXJlbmNlLCBzbyB0aGUgc3BsaXQgd291bGQgYWx3YXlzXG4mIzQzO1x0ICogZmFpbCB3aXRoIC1FQUdBSU4gd2hpbGUgdGhpcyBmYXVsdCByZWZlcmVuY2UgaXMgaGVsZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkgZGVyaXZlcyB0aGUgZmF1bHQgcGFnZSBmcm9tIHRoZSBQTURcbiYjNDM7XHQgKiBlbnRyeSwgc28gaXQgaXMgYWx3YXlzIHRoZSBoZWFkIHBhZ2Ugb2YgQGZvbGlvLCBhbmQgdGhlcmVmb3JlIGFsd2F5c1xuJiM0MztcdCAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wXG4mIzQzO1x0ICogdGhlIHJlZmVyZW5jZSBhY3Jvc3MgdGhlIHNwbGl0IGFuZCByZS10YWtlIGl0IG9uIHRoZSBoZWFkIGZvbGlvXG4mIzQzO1x0ICogYWZ0ZXJ3YXJkcywgbGVhdmluZyB0aGUgcmVmZXJlbmNlIGV4YWN0bHkgd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdG8gYmVcbiYjNDM7XHQgKiByZWxlYXNlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxuJiM0MztcdCAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdHBhZ2VfZm9saW8obWlncmF0ZS1cdTAwM2VmYXVsdF9wYWdlKSA9PSBmb2xpbztcbiYjNDM7XG4mIzQzO1x0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZhdWx0X2ZvbGlvKVxuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbiYjNDM7XHRpZiAoZmF1bHRfZm9saW8pXG4mIzQzO1x0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRtaWdyYXRlLVx1MDAzZXNyY1tpZHhdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuQEAgLTkzNSw3ICYjNDM7MTAxNyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIH1cbiBcbiBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LCB1bnNpZ25lZCBsb25nIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTExMDMsNyAmIzQzOzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdGJvb2wgbm90aWZpZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpuZXdwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpXSk7XG5AQCAtMTE3NywxMiAmIzQzOzEyNTgsMTggQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0bnIgPSAxIFx1MDAzY1x1MDAzYyBmb2xpb19vcmRlcihmb2xpbyk7XG4tXHRcdFx0XHRhZGRyID0gbWlncmF0ZS1cdTAwM2VzdGFydCAmIzQzOyBpICogUEFHRV9TSVpFO1xuLVx0XHRcdFx0aWYgKG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKG1pZ3JhdGUsIGksIGFkZHIsIGZvbGlvKSkge1xuJiM0MztcdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+KE1JR1JBVEVfUEZOX01JR1JBVEUgfFxuIFx0XHRcdFx0XHRcdFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0XHQvKlxuJiM0MztcdFx0XHRcdCAqIHJlc2V0IG5yIHNvIHRoYXQgb25seSBmaXJzdCBhZnRlci1zcGxpdCBmb2xpb1xuJiM0MztcdFx0XHRcdCAqIGlzIHByb2Nlc3NlZCBiZWxvd1xuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XG4mIzQzO1x0XHRcdFx0bnIgPSAxO1xuIFx0XHRcdH0gZWxzZSBpZiAoKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdChkc3RfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0IShzcmNfcGZuc1tpXSBcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XG5AQCAtMTIyMiw2ICYjNDM7MTMwOSwxMiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19wZm5zW2kmIzQzO2pdKSk7XG4gXHRcdFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaSYjNDM7al0pKTtcbiBcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuJiM0MztcdFx0XHQgKiBjYWNoZS4gUmVmcmVzaCB0aGUgc2F2ZWQgbWFwcGluZyBiZWZvcmUgbWlncmF0aW9uLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuJiM0MztcbiBcdFx0XHRyID0gZm9saW9fbWlncmF0ZV9tYXBwaW5nKG1hcHBpbmcsIG5ld2ZvbGlvLCBmb2xpbywgZXh0cmFfY250KTtcbiBcdFx0XHRpZiAocilcbiBcdFx0XHRcdHNyY19wZm5zW2kmIzQzO2pdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX01JR1JBVEU7XG5AQCAtMTQwMiw3ICYjNDM7MTQ5NSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICYjNDM7IGopIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KVxuIFx0XHRcdFx0c3JjX3BmbnNbaSYjNDM7al0gPSAwO1xuIFx0XHRcdGkgJiM0Mzs9IGogLSAxO1xuIFx0XHRcdHBmbiAmIzQzOz0gaiAtIDE7XG5AQCAtMTQzNiw3ICYjNDM7MTUyOSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9wZm5zKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICYjNDM7IGopIFx1MDAzYyBucGFnZXM7IGomIzQzOyYjNDM7KVxuIFx0XHRcdFx0c3JjX3BmbnNbaSYjNDM7al0gPSAwO1xuIFx0XHRcdGkgJiM0Mzs9IGogLSAxO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCmluZGV4IDg5MmIzMjVmYTk5YjguLjZhZThjOWFhMzZjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqIENvcHlyaWdodCDCqSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtZmVuY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKQEAgLTEyLDYgJiM0MzsxMywyNyBAQAogI2luY2x1ZGUgJmx0O2RybS9kcm1fcGFnZW1hcF91dGlsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZHJtL2RybV9wcmludC5oJmd0OwogCiYjNDM7I2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmF1bHQtaW5qZWN0LmgmZ3Q7CiYjNDM7c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRm9yY2UgYSBoaWdoZXItb3JkZXIgZGVzdGluYXRpb24gZm9saW8gYWxsb2NhdGlvbiB0byBmYWlsIGluCiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCksIGV4ZXJjaXNpbmcgdGhlIG9yZGVyLTAgZmFsbGJhY2sKJiM0MzsgKiAoYW5kLCBpbiB0dXJuLCB0aGUgVEhQIHNwbGl0IHBhdGggaW4gX19taWdyYXRlX2RldmljZV9wYWdlcygpKSB3aXRob3V0CiYjNDM7ICogaGF2aW5nIHRvIGRyaXZlIHRoZSBzeXN0ZW0gaW50byBhY3R1YWwgbWVtb3J5IHByZXNzdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHNob3VsZF9mYWlsKCZhbXA7bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIERPQzogT3ZlcnZpZXcKICAqCkBAIC0zODMsNiAmIzQzOzQwNSw1OCBAQCBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheQomIzQzOyAqIEBwYWdlczogQXJyYXkgb2Ygc291cmNlIHBhZ2VzIHRvIHBvcHVsYXRlCiYjNDM7ICogQHNyY19tcGZuOiBTb3VyY2UgYXJyYXkgb2YgbWlncmF0ZSBQRk5zCiYjNDM7ICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnMKJiM0MzsgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXMgaW4gdGhlIGFycmF5cwomIzQzOyAqCiYjNDM7ICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uCiYjNDM7ICoKJiM0MzsgKiBFbnRyaWVzIGFyZSBub3JtYWxseSBvbmx5IHBvcHVsYXRlZCBhdCB0aGUgaGVhZCBvZiBlYWNoIHNvdXJjZSBmb2xpbywgd2l0aAomIzQzOyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpbgomIzQzOyAqIHRoZSBjb3JyZXNwb25kaW5nIGRybV9wYWdlbWFwX2FkZHIuIFRoYXQgZG9lcyBub3Qgd29yayB3aGVyZQomIzQzOyAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpIGhhZCB0byBkZW1vdGUgYSBoaWdoZXItb3JkZXIgc291cmNlCiYjNDM7ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW4KJiM0MzsgKiBwZXItcGFnZSwgYW5kIHRoZSBjb3B5IGNhbGxiYWNrIG5lZWRzIGEgc291cmNlIHBhZ2UgZm9yIGVhY2ggb2YgdGhlbS4KJiM0MzsgKiBQb3B1bGF0ZSBldmVyeSBlbnRyeSBmb3IgdGhvc2UgcmFuZ2VzLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoZSBzb3VyY2UgZm9saW8gaXRzZWxmIGlzIG9ubHkgc3BsaXQgbGF0ZXIsIGJ5CiYjNDM7ICogbWlncmF0ZV92bWFfcGFnZXMoKSAvIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCksIHNvIGl0cyBvcmRlciBjYW5ub3QgYmUgdXNlZCB0bwomIzQzOyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyAqZHN0X21wZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyBucGFnZXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucGFnZXM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX21wZm5baV0pOwomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyID0gMDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgaiwgbnI7CiYjNDM7CiYjNDM7CQlpZiAoIXBhZ2UpIHsKJiM0MzsJCQlpJiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CQluciA9IE5SX1BBR0VTKG9yZGVyKTsKJiM0MzsKJiM0MzsJCWlmIChvcmRlciAmYW1wOyZhbXA7ICEoZHN0X21wZm5baV0gJmFtcDsgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7CiYjNDM7CQkJZm9yIChqID0gMDsgaiAmbHQ7IG5yICZhbXA7JmFtcDsgaSAmIzQzOyBqICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKJiM0MzsJCQkJcGFnZXNbaSAmIzQzOyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXBhZ2VzW2ldID0gcGFnZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWkgJiM0Mzs9IG5yOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBwcmV2aW91c2x5IG1hcHBlZCBmb3IgR1BVIFNWTSBtaWdyYXRpb24KICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZApAQCAtODc1LDYgJiM0Mzs5NDksNyBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMLCAqc3JjX3BhZ2U7CiAJCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJCXVuc2lnbmVkIGludCBvcmRlciA9IDA7CiYjNDM7CQlnZnBfdCBnZnAgPSBHRlBfSElHSFVTRVI7CiAKIAkJaWYgKCEoc3JjX21wZm5baV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkpCiAJCQlnb3RvIG5leHQ7CkBAIC04OTEsMTEgJiM0Mzs5NjYsNTMgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAKIAkJb3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7CiAKLQkJLyogVE9ETzogU3VwcG9ydCBmYWxsYmFjayB0byBzaW5nbGUgcGFnZXMgaWYgVEhQIGFsbG9jYXRpb24gZmFpbHMgKi8KLQkJaWYgKHZhcykKLQkJCWZvbGlvID0gdm1hX2FsbG9jX2ZvbGlvKEdGUF9ISUdIVVNFUiwgb3JkZXIsIHZhcywgYWRkcik7CiYjNDM7CQkvKgomIzQzOwkJICogQSBsYXJnZSBzb3VyY2UgZm9saW8gaXMgYWx3YXlzIGNvbGxlY3RlZCB3aG9sZSwgYXQgaXRzIGhlYWQKJiM0MzsJCSAqIHBhZ2UsIFBNRCBhbGlnbmVkIGFuZCBmbGFnZ2VkIE1JR1JBVEVfUEZOX0NPTVBPVU5EOiBhbnl0aGluZwomIzQzOwkJICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5CiYjNDM7CQkgKiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCgpIG9yLCBmb3IgdGhlIGV2aWN0aW9uIHBhdGgsIGJ5CiYjNDM7CQkgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kCiYjNDM7CQkgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXMKJiM0MzsJCSAqIHRoZXkgaW5kZXggdGhlIGZvbGlvIGZyb20gQGkuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRShvcmRlciAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAoc3JjX3BhZ2UgIT0gZm9saW9fcGFnZShwYWdlX2ZvbGlvKHNyY19wYWdlKSwgMCkgfHwKJiM0MzsJCQkgICAgICAhKHNyY19tcGZuW2ldICZhbXA7IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkpOwomIzQzOwomIzQzOwkJaWYgKG9yZGVyKQomIzQzOwkJCWdmcCB8PSBfX0dGUF9OT1dBUk47CiYjNDM7CiYjNDM7CQlpZiAob3JkZXIgJmFtcDsmYW1wOyBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSkKJiM0MzsJCQlmb2xpbyA9IE5VTEw7CiYjNDM7CQllbHNlIGlmICh2YXMpCiYjNDM7CQkJZm9saW8gPSB2bWFfYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgdmFzLCBhZGRyKTsKIAkJZWxzZQotCQkJZm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTsKJiM0MzsJCQlmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCwgb3JkZXIpOwomIzQzOwomIzQzOwkJaWYgKCFmb2xpbyAmYW1wOyZhbXA7IG9yZGVyKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBIaWdoZXItb3JkZXIgYWxsb2NhdGlvbiBmYWlsZWQsIGZhbGwgYmFjayB0bwomIzQzOwkJCSAqIG9yZGVyLTAgYWxsb2NhdGlvbnMgZm9yIHRoZSBlbnRpcmUgcmFuZ2UgY292ZXJlZAomIzQzOwkJCSAqIGJ5IHRoZSBvcmlnaW5hbCBoaWdoZXItb3JkZXIgYWxsb2NhdGlvbiwgd2l0aG91dAomIzQzOwkJCSAqIHNldHRpbmcgTUlHUkFURV9QRk5fQ09NUE9VTkQsIHVudGlsIHdlIG1vdmUgcGFzdAomIzQzOwkJCSAqIHRoYXQgcmFuZ2UuCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBuciA9IE5SX1BBR0VTKG9yZGVyKTsKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGo7CiYjNDM7CiYjNDM7CQkJZ2ZwICZhbXA7PSB+X19HRlBfTk9XQVJOOwomIzQzOwkJCWZvciAoaiA9IDA7IGogJmx0OyBuciAmYW1wOyZhbXA7IGkgJmx0OyBucGFnZXM7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiYjNDM7CQkJCWZvbGlvID0gdmFzID8KJiM0MzsJCQkJCXZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOgomIzQzOwkJCQkJZm9saW9fYWxsb2MoZ2ZwLCAwKTsKJiM0MzsJCQkJaWYgKCFmb2xpbykKJiM0MzsJCQkJCWdvdG8gZnJlZV9wYWdlczsKJiM0MzsKJiM0MzsJCQkJcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApOwomIzQzOwkJCQltcGZuW2ldID0gbWlncmF0ZV9wZm4ocGFnZV90b19wZm4ocGFnZSkpOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAogCQlpZiAoIWZvbGlvKQogCQkJZ290byBmcmVlX3BhZ2VzOwpAQCAtOTQwLDExICYjNDM7MTA1NywxMSBAQCBzdGF0aWMgaW50IGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcywKIAkJaWYgKCFwYWdlKQogCQkJZ290byBuZXh0X3B1dDsKIAomIzQzOwkJb3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTsKJiM0MzsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJCW1wZm5baV0gPSAwOwogCi0JCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7Ci0KIG5leHRfcHV0OgogCQlpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7CiAJfQpAQCAtMTEyMCw3ICYjNDM7MTIzNyw3IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pCiAJdW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0OwogCXN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7CiAJdm9pZCAqYnVmOwotCWludCBpLCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyOwogCiAJbnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tJmd0O3NpemUgJmd0OyZndDsgUEFHRV9TSElGVDsKQEAgLTExNjAsMjcgJiM0MzsxMjc3LDE5IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pCiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOykgewotCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSAwOwotCi0JCXBhZ2VzW2ldID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmNbaV0pOwotCQlpZiAocGFnZXNbaV0pCi0JCQlvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTsKLQotCQlpICYjNDM7PSBOUl9QQUdFUyhvcmRlcik7Ci0JfQomIzQzOwlkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcyhwYWdlcywgc3JjLCBkc3QsIG5wYWdlcyk7CiAKIAllcnIgPSBvcHMtJmd0O2NvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKIGVycl9maW5hbGl6ZToKJiM0MzsJZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi0mZ3Q7ZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLAomIzQzOwkJCQkJRE1BX0ZST01fREVWSUNFLCAmYW1wO3N0YXRlKTsKIAlpZiAoZXJyKQogCQlkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7CiAJbWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjLCBkc3QsIG5wYWdlcyk7CiAJbWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7Ci0JZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi0mZ3Q7ZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLAotCQkJCQlETUFfRlJPTV9ERVZJQ0UsICZhbXA7c3RhdGUpOwogCiBlcnJfZnJlZToKIAlrdmZyZWUoYnVmKTsKQEAgLTEyMzUsNyAmIzQzOzEzNDQsNyBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAJc3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJdm9pZCAqYnVmOwotCWludCBpLCBlcnIgPSAwOwomIzQzOwlpbnQgZXJyID0gMDsKIAogCXpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTsKIAlpZiAodGltZV9iZWZvcmU2NChnZXRfamlmZmllc182NCgpLCB6ZGQtJmd0O2Rldm1lbV9hbGxvY2F0aW9uLSZndDt0aW1lc2xpY2VfZXhwaXJhdGlvbikpCkBAIC0xMjkwLDI5ICYjNDM7MTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsCiAJaWYgKGVycikKIAkJZ290byBlcnJfZmluYWxpemU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOykgewotCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSAwOwotCi0JCXBhZ2VzW2ldID0gbWlncmF0ZV9wZm5fdG9fcGFnZShtaWdyYXRlLnNyY1tpXSk7Ci0JCWlmIChwYWdlc1tpXSkKLQkJCW9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpOwotCi0JCWkgJiM0Mzs9IE5SX1BBR0VTKG9yZGVyKTsKLQl9CiYjNDM7CWRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsCiYjNDM7CQkJCQkgICAgICAgbnBhZ2VzKTsKIAogCWVyciA9IG9wcy0mZ3Q7Y29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9maW5hbGl6ZTsKIAogZXJyX2ZpbmFsaXplOgotCWlmIChlcnIpCi0JCWRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpOwotCW1pZ3JhdGVfdm1hX3BhZ2VzKCZhbXA7bWlncmF0ZSk7Ci0JbWlncmF0ZV92bWFfZmluYWxpemUoJmFtcDttaWdyYXRlKTsKIAlpZiAoZGV2KQogCQlkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCwKIAkJCQkJCW5wYWdlcywgRE1BX0ZST01fREVWSUNFLAogCQkJCQkJJmFtcDtzdGF0ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTsKJiM0MzsJbWlncmF0ZV92bWFfcGFnZXMoJmFtcDttaWdyYXRlKTsKJiM0MzsJbWlncmF0ZV92bWFfZmluYWxpemUoJmFtcDttaWdyYXRlKTsKIGVycl9mcmVlOgogCWt2ZnJlZShidWYpOwogZXJyX291dDoKQEAgLTE0NzYsNiAmIzQzOzE1NzgsMTYgQEAgdm9pZCBkcm1fcGFnZW1hcF9kZXN0cm95KHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIGJvb2wgaXNfYXRvbWljX29yX3JlY2xhaW0KIAkJa2ZyZWUoZHBhZ2VtYXApOwogfQogCiYjNDM7c3RhdGljIGludCBfX2luaXQgZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0ZBVUxUX0lOSkVDVElPTikKJiM0MzsJZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cigmIzM0O2RybV9wYWdlbWFwX2ZhdWx0X2luamVjdCYjMzQ7LCBOVUxMLAomIzQzOwkJCQkgICZhbXA7bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO21vZHVsZV9pbml0KGRybV9wYWdlbWFwX21vZHVsZV9pbml0KTsKJiM0MzsKIHN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX2V4aXQodm9pZCkKIHsKIAlmbHVzaF93b3JrKCZhbXA7ZHJtX3BhZ2VtYXBfd29yayk7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuYwppbmRleCA5MDhkMmQ0ZWM0M2FjLi5hZTE3YmQ1MTZkMjQ4IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTg5OSwyMiAmIzQzOzg5OSwxMDQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CURFRklORV9GT0xJT19WTUFfV0FMSyhwdm13LCBmb2xpbywgdm1hLCBhZGRyLCBQVk1XX1NZTkMgfCBQVk1XX01JR1JBVElPTik7CiYjNDM7CiYjNDM7CXdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsaygmYW1wO3B2bXcpKSB7CiYjNDM7CQlpZiAocHZtdy5wdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlhZGRyID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYQomIzQzOwkJICogbWlncmF0aW9uIGVudHJ5LCBzbyBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZCgpIGNyZWF0ZXMgUFRFCiYjNDM7CQkgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50CiYjNDM7CQkgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvCiYjNDM7CQkgKiBzdG9wIHRoZSB3YWxrIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLgomIzQzOyAqCiYjNDM7ICogbWlncmF0ZV9kZXZpY2VfdW5tYXAoKSB1bm1hcHMgd2l0aCB0cnlfdG9fbWlncmF0ZShmb2xpbywgMCksIGkuZS4gd2l0aG91dAomIzQzOyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlcgomIzQzOyAqIGZvcmsoKSwgZm9yIGluc3RhbmNlIC0tIGVuZHMgdXAgd2l0aCBhIFBNRCBzaXplZCBtaWdyYXRpb24gZW50cnkgaW4gZXZlcnkgb25lCiYjNDM7ICogb2YgdGhlbS4gZm9saW9fc3BsaXRfdW5tYXBwZWQoKSBiZWxvdyBkb2VzIG5vdCBjYXJlLCBpdCBvbmx5IGxvb2tzIGF0IHRoZQomIzQzOyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkCiYjNDM7ICogbGVhdmUgdGhlIG90aGVyIFZNQXMgcG9pbnRpbmcgYSBodWdlIFBNRCBhdCB3aGF0IGlzIG5vdyBhbiBvcmRlci0wIGZvbGlvLgomIzQzOyAqIHJlbW92ZV9taWdyYXRpb25fcHRlcygpIHRyaXBzIG92ZXIgdGhhdCBpbiBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHsKJiM0MzsJCS5ybWFwX29uZSA9IG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvIG5vdCBwYXNzIC5hbm9uX2xvY2s6IGZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZCgpIHJlcXVpcmVzCiYjNDM7CSAqIGZvbGlvX21hcHBlZCgpLCBhbmQgQGZvbGlvIGlzIGFscmVhZHkgZnVsbHkgdW5tYXBwZWQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkJCSAgICB1bnNpZ25lZCBsb25nIGlkeCwKIAkJCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgZmF1bHRfZm9saW87CiAJaW50IHJldCA9IDA7CiAKIAkvKgotCSAqIHRha2UgYSByZWZlcmVuY2UsIHNpbmNlIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB3aXRoIGZyZWV6ZSA9IHRydWUKLQkgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLgomIzQzOwkgKiBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoKSB3YWxrcyB0aGUgcm1hcCwgYW5kCiYjNDM7CSAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdAomIzQzOwkgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlCiYjNDM7CSAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKQomIzQzOwkgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS4KIAkgKi8KLQlmb2xpb19nZXQoZm9saW8pOwotCXNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS0mZ3Q7dm1hLCBhZGRyLCB0cnVlKTsKJiM0MzsJaWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEEgQ1BVIGZhdWx0IG9uIGEgZGV2aWNlIHByaXZhdGUgUE1EIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiB0aGUKJiM0MzsJICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkKJiM0MzsJICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5cwomIzQzOwkgKiBmYWlsIHdpdGggLUVBR0FJTiB3aGlsZSB0aGlzIGZhdWx0IHJlZmVyZW5jZSBpcyBoZWxkLgomIzQzOwkgKgomIzQzOwkgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1ECiYjNDM7CSAqIGVudHJ5LCBzbyBpdCBpcyBhbHdheXMgdGhlIGhlYWQgcGFnZSBvZiBAZm9saW8sIGFuZCB0aGVyZWZvcmUgYWx3YXlzCiYjNDM7CSAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wCiYjNDM7CSAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpbwomIzQzOwkgKiBhZnRlcndhcmRzLCBsZWF2aW5nIHRoZSByZWZlcmVuY2UgZXhhY3RseSB3aGVyZSBpdCBpcyBleHBlY3RlZCB0byBiZQomIzQzOwkgKiByZWxlYXNlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlCiYjNDM7CSAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC4KJiM0MzsJICovCiYjNDM7CWZhdWx0X2ZvbGlvID0gbWlncmF0ZS0mZ3Q7ZmF1bHRfcGFnZSAmYW1wOyZhbXA7CiYjNDM7CQlwYWdlX2ZvbGlvKG1pZ3JhdGUtJmd0O2ZhdWx0X3BhZ2UpID09IGZvbGlvOwomIzQzOwomIzQzOwltaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoZmF1bHRfZm9saW8pCiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwogCXJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTsKJiM0MzsJaWYgKGZhdWx0X2ZvbGlvKQomIzQzOwkJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCW1pZ3JhdGUtJmd0O3NyY1tpZHhdICZhbXA7PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7CkBAIC05MzUsNyAmIzQzOzEwMTcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIH0KIAogc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGlkeCwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaWR4LAogCQkJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gMDsKQEAgLTExMDMsNyAmIzQzOzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCWJvb2wgbm90aWZpZWQgPSBmYWxzZTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnBhZ2VzOyApIHsKIAkJc3RydWN0IHBhZ2UgKm5ld3BhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKGRzdF9wZm5zW2ldKTsKQEAgLTExNzcsMTIgJiM0MzsxMjU4LDE4IEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsCiAJCQkJCWdvdG8gbmV4dDsKIAkJCQl9CiAJCQkJbnIgPSAxICZsdDsmbHQ7IGZvbGlvX29yZGVyKGZvbGlvKTsKLQkJCQlhZGRyID0gbWlncmF0ZS0mZ3Q7c3RhcnQgJiM0MzsgaSAqIFBBR0VfU0laRTsKLQkJCQlpZiAobWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8obWlncmF0ZSwgaSwgYWRkciwgZm9saW8pKSB7CiYjNDM7CQkJCWlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHsKIAkJCQkJc3JjX3BmbnNbaV0gJmFtcDs9IH4oTUlHUkFURV9QRk5fTUlHUkFURSB8CiAJCQkJCQkJIE1JR1JBVEVfUEZOX0NPTVBPVU5EKTsKIAkJCQkJZ290byBuZXh0OwogCQkJCX0KJiM0MzsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogcmVzZXQgbnIgc28gdGhhdCBvbmx5IGZpcnN0IGFmdGVyLXNwbGl0IGZvbGlvCiYjNDM7CQkJCSAqIGlzIHByb2Nlc3NlZCBiZWxvdwomIzQzOwkJCQkgKi8KJiM0MzsJCQkJVk1fV0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKTsKJiM0MzsJCQkJbnIgPSAxOwogCQkJfSBlbHNlIGlmICgoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fTUlHUkFURSkgJmFtcDsmYW1wOwogCQkJCShkc3RfcGZuc1tpXSAmYW1wOyBNSUdSQVRFX1BGTl9DT01QT1VORCkgJmFtcDsmYW1wOwogCQkJCSEoc3JjX3BmbnNbaV0gJmFtcDsgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7CkBAIC0xMjIyLDYgJiM0MzsxMzA5LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsCiAJCQlmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpJiM0MztqXSkpOwogCQkJbmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaSYjNDM7al0pKTsKIAomIzQzOwkJCS8qCiYjNDM7CQkJICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcAomIzQzOwkJCSAqIGNhY2hlLiBSZWZyZXNoIHRoZSBzYXZlZCBtYXBwaW5nIGJlZm9yZSBtaWdyYXRpb24uCiYjNDM7CQkJICovCiYjNDM7CQkJbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwomIzQzOwogCQkJciA9IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhtYXBwaW5nLCBuZXdmb2xpbywgZm9saW8sIGV4dHJhX2NudCk7CiAJCQlpZiAocikKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSAmYW1wOz0gfk1JR1JBVEVfUEZOX01JR1JBVEU7CkBAIC0xNDAyLDcgJiM0MzsxNDk1LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJaWYgKG5yICZndDsgMSkgewogCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQomIzQzOwkJCWZvciAoaiA9IDE7IGogJmx0OyBuciAmYW1wOyZhbXA7IChpICYjNDM7IGopICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7CiAJCQlpICYjNDM7PSBqIC0gMTsKIAkJCXBmbiAmIzQzOz0gaiAtIDE7CkBAIC0xNDM2LDcgJiM0MzsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQogCQluciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAkJaWYgKG5yICZndDsgMSkgewogCQkJc3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7Ci0JCQlmb3IgKGogPSAxOyBqICZsdDsgbnI7IGomIzQzOyYjNDM7KQomIzQzOwkJCWZvciAoaiA9IDE7IGogJmx0OyBuciAmYW1wOyZhbXA7IChpICYjNDM7IGopICZsdDsgbnBhZ2VzOyBqJiM0MzsmIzQzOykKIAkJCQlzcmNfcGZuc1tpJiM0MztqXSA9IDA7CiAJCQlpICYjNDM7PSBqIC0gMTsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJNL01NIFBhdGNoIGZvciBGYXVsdCBJbmplY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBmYXVsdCBpbmplY3Rpb24gaW50byBgZHJtX3BhZ2VtYXAuY2AgdGhyb3VnaCB0aGlzIGBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW9gIGZ1bmN0aW9uLiBUaGUgZ29hbCBoZXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGZvcmNlIGEgZmFsbGJhY2sgdG8gb3JkZXItMCBhbGxvY2F0aW9ucywgd2hpY2ggaXMgb2Z0ZW4gZG9uZSBmb3IgZGVidWdnaW5nIG9yIHRvIHRlc3QgYSBzeXN0ZW0mIzM5O3MgcmVzaWxpZW5jZSB0byBzcGVjaWZpYyBmYWlsdXJlcy4gVGhpcyBkaXJlY3RseSB0b3VjaGVzIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlc2AgYW5kIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm5gLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGludGVydHdpbmVkIHdpdGggdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gdGhlIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlci4KCkluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgd2Ugc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhpcyBoZWF2aWx5IHN1Z2dlc3RzIHRoYXQgdGhlIGZhdWx0IGluamVjdGlvbiBpcyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGV2aWNlIHBhZ2UgbWlncmF0aW9uLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGlzLCBhcyBpdCBjb3VsZCBiZSB0cmlja3kgdG8gZGVidWcuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgY29kZSBwYXRoLiBgZHJtX3BhZ2VtYXAuY2AsIGFzIHdlIGtub3csIGlzIHBhcnQgb2YgdGhlIERSTSBzdGFjaywgYnV0IGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwgdG8gcmV2aWV3IGFsbCB1c2VzIG9mIHRoZSBwYWdlIG1hcHBpbmcgc3RydWN0dXJlIHRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0byB0cmlnZ2VyIGFuZCB0ZXN0IHRoaXMgaW5qZWN0aW9uLiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgcGFydCBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgREVWSUNFX1BSSVZBVEUuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlcywgc28gbGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgdXNlIG9mIGBkcm1fcGFnZW1hcF9ldmljdF90b19yYW1gIG9yIGBkcm1fcGFnZW1hcF9kZXN0cm95YCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGxldmVyYWdlIGl0IHRvIHN0dWR5IHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTEyMjA9RVhQT1JUX1NZTUJPTChkcm1fcGFnZW1hcF9wdXQpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjItLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjIzOiAqIGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbSgpIC0gRXZpY3QgR1BVIFNWTSByYW5nZSB0byBSQU1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjQtICogQGRldm1lbV9hbGxvY2F0aW9uOiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjMwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTppbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTIzMi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTMwOS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzEwOkVYUE9SVF9TWU1CT0xfR1BMKGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzExLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNDYyPWludCB4ZV9zdm1fYm9fZXZpY3Qoc3RydWN0IHhlX2JvICpibylcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNDYzLXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNDY0Olx0cmV0dXJuIGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShcdTAwMjZiby1cdTAwM2VkZXZtZW1fYWxsb2NhdGlvbik7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTQ2NS19XG4tLVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zNDI9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxuLS1cbmluY2x1ZGUvZHJtL2RybV9wYWdlbWFwLmgtMzQ2LVxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNDc6aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbik7XG5pbmNsdWRlL2RybS9kcm1fcGFnZW1hcC5oLTM0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEUk0gcGFnZW1hcCBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0JiMzOTtzIHVzZWQgYnkgdGhlIEludGVsIFhlIGRyaXZlciAoYHhlX3N2bS5jYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIEkgc2VlIHRoZXNlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYCDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBmb2N1c2luZyBvbiBmdW5jdGlvbnMgbGlrZSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFJpZ2h0LCBhbmQgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgZHJpdmVycyB0aGF0IGxldmVyYWdlIGBERVZJQ0VfUFJJVkFURWAgbWVtb3J5LCBsaWtlIE5vdXZlYXUgYW5kLCBvZiBjb3Vyc2UsIHRoZSBYZSBkcml2ZXIuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IGVpdGhlciBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIG9yLCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIGluIHBhcnRpY3VsYXIsIHdoZXRoZXIgdGhpcyBgbWlncmF0ZV92bWFfcGFnZXNgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGEgbW9yZSBnZW5lcmFsIHBhdGguIElzIGl0IGp1c3QgZGV2aWNlLXNwZWNpZmljIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGNvdWxkIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCBgbWlncmF0ZV92bWFfcGFnZXNgIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjM2NTo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTM2Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjIwLW1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkg5Ye95pWw5peo5Zyo5L2/6amx5Yqo56iL5bqP5pu05piT5LqO57yW5YaZ5bm26ZuG5Lit6Leo6amx5Yqo56iL5bqP55qE6YCa55So5Luj56CB44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjk4OjQuIGBgbWlncmF0ZV92bWFfcGFnZXMoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5OS1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTQ5LSAqIDEuIGt2bS1cdTAwM2VzcmN1IC0gUHJvdGVjdHMgS1ZNIG1lbXNsb3RzXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUwOiAqIDIuIGt2bS1cdTAwM2VtbS1cdTAwM2VtbWFwX2xvY2sgLSBmaW5kX3ZtYSwgbWlncmF0ZV92bWFfcGFnZXMgYW5kIGhlbHBlcnMsIGtzbV9tYWR2aXNlXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUxLSAqIDMuIGt2bS1cdTAwM2VhcmNoLnV2bWVtX2xvY2sgLSBwcm90ZWN0cyByZWFkL3dyaXRlcyB0byB1dm1lbSBzbG90cyB0aHVzIGFjdGluZ1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Nzk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01ODAtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03ODctXHQqbWlnLmRzdCA9IG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKGRwYWdlKSk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc4ODpcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc4OS1vdXRfZmluYWxpemU6XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTQ9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTEtXHRyID0gc3ZtX21pZ3JhdGVfY29weV90b192cmFtKG5vZGUsIHByYW5nZSwgXHUwMDI2bWlncmF0ZSwgXHUwMDI2bWZlbmNlLCBzY3JhdGNoLCB0dG1fcmVzX29mZnNldCk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQ1MjpcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00NTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1NS1cdFx0XHRcdCAgICBzY3JhdGNoLCBucGFnZXMpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3NTY6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzU3LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTM0Nz1kcm1fcGFnZW1hcF9taWdyYXRlX21hcF9zeXN0ZW1fcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNS0gKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQyNjogKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjctICogZGV0ZWN0IHRoZSBkZW1vdGlvbiAtIHRoZSBkZXN0aW5hdGlvbiBoYXMgdG8gYmUgaW5zcGVjdGVkIGluc3RlYWQuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NjkwPWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTEtZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODkyOlx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTMyNT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQxNS1cdFx0ZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMobnBhZ2VzLCBtaWdyYXRlLmRzdCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNDE2Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDE3LVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjctXHRub3V2ZWF1X2ZlbmNlX25ldyhcdTAwMjZmZW5jZSwgZG1lbS1cdTAwM2VtaWdyYXRlLmNoYW4pO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4Olx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2YXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcdTAwMjZmZW5jZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9NzgzPXN0YXRpYyB2b2lkIG5vdXZlYXVfZG1lbV9taWdyYXRlX2NodW5rKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cdG5vdXZlYXVfZmVuY2VfbmV3KFx1MDAyNmZlbmNlLCBkcm0tXHUwMDNlZG1lbS1cdTAwM2VtaWdyYXRlLmNoYW4pO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODEwOlx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04MTEtXHRub3V2ZWF1X2RtZW1fZmVuY2VfZG9uZShcdTAwMjZmZW5jZSk7XG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg9MTU4PXN0cnVjdCBtaWdyYXRlX3ZtYSB7XG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY1LVx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjctXHQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xOTM9aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk1LXZvaWQgbWlncmF0ZV92bWFfZmluYWxpemUoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbi0tXG5saWIvdGVzdF9obW0uYy0xMDc1LVx0XHRcdFx0XHQvKiBDbGVhciByZW1haW5pbmcgZHN0IGVudHJpZXMgdG8gYXZvaWRcbmxpYi90ZXN0X2htbS5jOjEwNzY6XHRcdFx0XHRcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzL2ZpbmFsaXplKCkgdXNpbmdcbmxpYi90ZXN0X2htbS5jLTEwNzctXHRcdFx0XHRcdCAqIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuLS1cbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTExNzUtXG5saWIvdGVzdF9obW0uYzoxMTc2Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTExNzctXHRcdGNtZC1cdTAwM2VjcGFnZXMgJiM0Mzs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQ4LVx0XHRkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYzoxMjQ5Olx0XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNTAtXHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcxOC1cdH1cbmxpYi90ZXN0X2htbS5jOjE3MTk6XHRtaWdyYXRlX3ZtYV9wYWdlcyhcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTE3MjAtXHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjYwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMC0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjcwMTogKiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwgZm9yIHRob3NlIGVudHJpZXMgYWZ0ZXIgY2FsbGluZyBtaWdyYXRlX3ZtYV9wYWdlcygpLFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDItICoganVzdCBsaWtlIGZvciByZWd1bGFyIG1pZ3JhdGlvbi5cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAzLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjcwNDogKiBBZnRlciB0aGF0LCB0aGUgY2FsbGVycyBtdXN0IGNhbGwgbWlncmF0ZV92bWFfcGFnZXMoKSB0byBnbyBvdmVyIGVhY2ggZW50cnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA1LSAqIGluIHRoZSBzcmMgYXJyYXkgdGhhdCBoYXMgdGhlIE1JR1JBVEVfUEZOX1ZBTElEIGFuZCBNSUdSQVRFX1BGTl9NSUdSQVRFIGZsYWdcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA2LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzA3OiAqIHRoZW4gbWlncmF0ZV92bWFfcGFnZXMoKSB0byBtaWdyYXRlIHN0cnVjdCBwYWdlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDgtICogc3RydWN0IHBhZ2UgdG8gdGhlIGRlc3RpbmF0aW9uIHN0cnVjdCBwYWdlLiAgSWYgaXQgZmFpbHMgdG8gbWlncmF0ZSB0aGVcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNS0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MTY6ICogT25jZSBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMgdGhlIGNhbGxlciBtYXkgaW5zcGVjdCB3aGljaCBwYWdlcyB3ZXJlXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNy0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTktICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzIwOiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjEtICogYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIHBhZ2UgYXJlIHN0aWxsIGxvY2tlZCwgYW5kIHRoZSBtbWFwX2xvY2sgaXMgaGVsZFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTE4MT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMzNy0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzM4OiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzM5LSAqIG1ldGEtZGF0YSBmcm9tIHNvdXJjZSBzdHJ1Y3QgcGFnZSB0byBkZXN0aW5hdGlvbi5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNDY9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzQ4LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ5OiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNTAtICogQG1pZ3JhdGU6IG1pZ3JhdGUgc3RydWN0IGNvbnRhaW5pbmcgYWxsIG1pZ3JhdGlvbiBpbmZvcm1hdGlvblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM1Njp2b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1Ny17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU5LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2MDpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3BhZ2VzKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB0ZXN0X2htbWAgTW9kdWxlIGFuZCBpdHMgSW1wYWN0IG9uIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBsaWIvdGVzdF9obW0uY2AgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGl0JiMzOTtzIHV0aWxpemluZyBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRlc3RfaG1tLmNgLCBhcyBJIHJlY2FsbCwgaXMgYSB0ZXN0IG1vZHVsZSBkZXNpZ25lZCBmb3IgSE1NIGFuZCwgc3BlY2lmaWNhbGx5LCBERVZJQ0VfUFJJVkFURSBtZW1vcnkuIEl0JiMzOTtzIGJ1aWx0IHRvIGV4ZXJjaXNlIGJvdGggYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC4gQnV0IG5vdyBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc29tZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGF0IHRoZXNlIHJlbHkgb24sIG5hbWVseSBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZWAsIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgLCBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gLCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBUaGVzZSBhcmUgY29yZSBNTSBmdW5jdGlvbnMsIHJpZ2h0IGF0IHRoZSBoZWFydCBvZiBob3cgZGV2aWNlIG1lbW9yeSBnZXRzIG1vdmVkIGFyb3VuZC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgYHRlc3RfaG1tYCBtb2R1bGUsIGFuZCBieSBleHRlbnNpb24sIHRoZXNlIHRlc3RzLCBhcmUgYWN0dWFsbHkgcmVhY2hhYmxlIHRocm91Z2ggb3VyIGZ1enppbmcgZWZmb3J0cyBpbiBTeXprYWxsZXIuIEhtbSwgeWVzLCBpdCBsb29rcyBsaWtlIFN5emthbGxlciBkb2VzIGluZGVlZCBmdXp6IGB0ZXN0X2htbWAgdmlhIGAvZGV2L2htbV9kbWlycm9yKmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTbywgY2FuIHRoaXMgZnV6emluZyBhY3R1YWxseSAqdHJpZ2dlciogdGhlIGNvZGUgdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGluIGBtbS9taWdyYXRlX2RldmljZS5jYD8KClRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgYWxsIGFib3V0IFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYW5kIGhvdyB3ZSBoYW5kbGUgUE1EIChQYWdlIE1hcCBEaXJlY3RvcnkpIHNwbGl0dGluZyBkdXJpbmcgZGV2aWNlIG1pZ3JhdGlvbi4gSSBrbm93IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AgZ2V0cyBjYWxsZWQgd2l0aGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCB3aGVuIGBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKWAgaXMgdHJ1ZS4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFRIUC4KClNvLCB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBgdGVzdF9obW1gIGV2ZW4gc3VwcG9ydCBtaWdyYXRpbmcgVEhQPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgYGxpYi90ZXN0X2htbS5jYCB0byBjb25maXJtIHdoZXRoZXIgaXQgaGFzIHRoZSBjYXBhY2l0eSB0byBkZWFsIHdpdGggVEhQLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VEhQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVEhQIEludGVyYWN0aW9ucyB3aXRoIERSTSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgbm8gZGlyZWN0IFRIUCB1c2FnZSB3aXRoaW4gYGxpYi90ZXN0X2htbS5jYC4gSG93ZXZlciwgYHRlc3RfaG1tYCByZWxpZXMgb24gc3RhbmRhcmQgYG1tYXBgIGFuZCBgbWFkdmlzZWAuIFRoaXMgbWVhbnMgaWYgc29tZW9uZSBjbGV2ZXJseSBzZXRzIHVwIGEgVEhQIG1hcHBpbmcgYW5kIHRoZW4gdHJpZ2dlcnMgdGhlIGB0ZXN0X2htbWAgaW9jdGwgZm9yIG1pZ3JhdGlvbiB0byBkZXZpY2UgbWVtb3J5LCB0aGUgY29kZSBwYXRoIHdvdWxkIGludm9sdmUgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4gVGhlIGdvb2QgbmV3cyBpcyB0aGUgcGF0Y2ggZXhwbGljaXRseSBhZGRyZXNzZXMgUE1EIHNwbGl0dGluZyBkdXJpbmcgdGhhdCBtaWdyYXRpb24sIHdoaWNoIGlzIGNydWNpYWwuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRybV9wYWdlbWFwLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AgYW5kIGFyZSB1dGlsaXppbmcgaXQgaW4gYGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbmAuIE15IHNwaWRlciBzZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIGBkcm1fcGFnZW1hcC5jYCBpcyBiZWluZyB1c2VkIGJ5IGB4ZV9zdm0uY2AgYW5kIGBub3V2ZWF1X2RtZW0uY2AuIEhhbmcgb24uLi4gYGRybV9wYWdlbWFwLmNgIGlzIGFjdHVhbGx5IGEgZ2VuZXJpYyBEUk0gcGFnZW1hcCBtb2R1bGUhIFRoaXMgaGFzIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSBgeGVgIG9yIGBub3V2ZWF1YCBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBTeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IHRob3NlIGRyaXZlcnMsIGJ1dCBpZiB0aGVyZSYjMzk7cyBhIGdlbmVyYWxpemVkIHJvdXRlIHRvIGBkcm1fcGFnZW1hcGAsIG9yIGlmIGVpdGhlciBgeGVgIG9yIGBub3V2ZWF1YCBhcmUgc29tZWhvdyBlbmFibGVkIGR1cmluZyB0aGUgdGVzdCwgdGhlbiBgZHJtX3BhZ2VtYXBgIGl0c2VsZiBjb3VsZCBiZSBzdWJqZWN0IHRvIGZ1enppbmcuIEhtbS4uLiB0aGlzIGBkcm1fcGFnZW1hcC5jYCBpcyBhIG5ldyBhZGRpdGlvbiB0byB0aGUgRFJNIHRyZWU/IEkgc2hvdWxkIGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kIHdoZW4gaXQgd2FzIGludHJvZHVjZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEyOlx0ZHJtX3BhZ2VtYXAub1xcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEzOlx0ZHJtX3BhZ2VtYXBfdXRpbC5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBidXQgb25seSBpZiBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBlbmFibGVkICphbmQqIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIGZ1bmN0aW9uIG9yIG1vZHVsZSBpcyBhY3R1YWxseSB1c2VkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMsIG1ha2VmaWxlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb2RlIHBhdGhzIHRoYXQgbWlnaHQgc2VsZWN0IG9yIGRlcGVuZCBvbiBgZHJtX2dwdXN2bV9oZWxwZXJgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBsZXZlcmFnZWQuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGF0IGBkcm1fZ3B1c3ZtX2hlbHBlcmAgbW9kdWxlIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgZHJpdmVycyB3aWxsIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGVzZSBzcGVjaWZpYyBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9oZWxwZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTAtXHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBHUFVTVk0gRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gYENPTkZJR19EUk1fR1BVU1ZNYCBkaXJlY3RseSBlbmFibGVzIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBhcyBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIsIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiAqd2hhdCogaXMgc2VsZWN0aW5nIHRoYXQgY29uZmlnIG9wdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSByYXRpb25hbGUsIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2h5IGEgdXNlciBtaWdodCBjaG9vc2UgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMsIGRlcGVuZGVudCBvbiBvdGhlciBkaXNwbGF5IGRyaXZlciBjb21wb25lbnRzLCBvciBqdXN0IGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgZmxhZz8gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgS2NvbmZpZyBoaWVyYXJjaHkgYW5kIGZpZ3VyZSBvdXQgd2hhdCBwdWxscyB0aGF0IHNwZWNpZmljIGZsYWcuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEUk1fR1BVU1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyMT1jb25maWcgUlVTVF9EUk1fR1BVVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjctXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMjg6Y29uZmlnIERSTV9HUFVTVk1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICYjNDM7PSBkcm1fZ3B1c3ZtX2hlbHBlci5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9NzYyPWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzc3LVx0XHRqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3ODpcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzktXHR1bnNpZ25lZCBsb25nICpwZm5zO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzg1LVx0aWYgKCFwZm5zKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3ODY6XHRcdHJldHVybiBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc4Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMC1cdFx0aWYgKCEocGZuc1tpXSBcdTAwMjYgSE1NX1BGTl9WQUxJRCkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODIxOlx0XHRcdHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MjItXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzAtXHRcdGlmIChjdXIgPT0gcGFnZW1hcCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MzE6XHRcdFx0bmV3X3N0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX0VRVUFMO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzItXHRcdH0gZWxzZSBpZiAoY3VyIFx1MDAyNlx1MDAyNiAoY3VyID09IG90aGVyIHx8ICFvdGhlcikpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODMzOlx0XHRcdG5ld19zdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9PVEhFUjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM0LVx0XHRcdG90aGVyID0gY3VyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzUtXHRcdH0gZWxzZSBpZiAoY3VyKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzNjpcdFx0XHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzctXHRcdH0gZWxzZSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzODpcdFx0XHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzktXHRcdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcdFx0aWYgKHN0YXRlID09IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDctXHRcdFx0c3RhdGUgPSBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0OC1cdFx0fSBlbHNlIGlmIChzdGF0ZSAhPSBuZXdfc3RhdGUpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODQ5Olx0XHRcdGlmIChuZXdfc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTSB8fFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTA6XHRcdFx0ICAgIHN0YXRlID09IERSTV9HUFVTVk1fU0NBTl9TWVNURU0pXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MTpcdFx0XHRcdHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX01JWEVEO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTI6XHRcdFx0ZWxzZSBpZiAoc3RhdGUgIT0gRFJNX0dQVVNWTV9TQ0FOX01JWEVEKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTM6XHRcdFx0XHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9NSVhFRF9ERVZJQ0U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1NC1cdFx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQxLVx0c2VsZWN0IERSTV9FWEVDXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo0MjpcdHNlbGVjdCBEUk1fR1BVU1ZNIGlmICFVTUxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVx0c2VsZWN0IERSTV9HUFVWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODUtXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg2Olx0c2VsZWN0IERSTV9HUFVTVk1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1Zy0xMDYtICAgICAgIGJvb2wgXCYjMzQ7SW5qZWN0IHVzZXJwdHIgaW52YWxpZGF0aW9uIC1FSU5WQUwgZXJyb3JzXCYjMzQ7XG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1ZzoxMDc6ICAgICAgIGRlcGVuZHMgb24gRFJNX0dQVVNWTVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWctMTA4LSAgICAgICBkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU9MTU2PXhlLSQoQ09ORklHX0RSTV9YRV9HUFVTVk0pICYjNDM7PSB4ZV9zdm0ub1xuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjE1Nzp4ZS0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0geGVfdXNlcnB0ci5vXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtMTU4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0MTE9c3RhdGljIGludCB4ZV9wdF9wcmVfY29tbWl0KHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZSAqcHRfdXBkYXRlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MjMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQyNS0vKlxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0NTM9c3RhdGljIGlubGluZSB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKSB7IH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDU1LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTctI2lmZGVmIENPTkZJR19EUk1fWEVfVVNFUlBUUl9JTlZBTF9JTkpFQ1Rcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1OTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU5Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTYxND1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xNjMwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2MzE6XHRpZiAobWlncmF0aW9uX3N0YXRlID09IERSTV9HUFVTVk1fU0NBTl9FUVVBTCkge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2MzItXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19EUk1fWEVfREVCVUdfVk0pKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0yMzM9aW50IHhlX3N2bV9pbml0KHN0cnVjdCB4ZV92bSAqdm0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM0LXtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDoyMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM2LVx0cmV0dXJuIGRybV9ncHVzdm1faW5pdChcdTAwMjZ2bS1cdTAwM2Vzdm0uZ3B1c3ZtLCBcJiMzNDtYZSBTVk0gKHNpbXBsZSlcJiMzNDssIFx1MDAyNnZtLVx1MDAzZXhlLVx1MDAzZWRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9MjQ0PXZvaWQgeGVfc3ZtX2Zpbmkoc3RydWN0IHhlX3ZtICp2bSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0yNDUte1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjI0NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0yNDctXHR4ZV9hc3NlcnQodm0tXHUwMDNleGUsIHhlX3ZtX2lzX2Nsb3NlZCh2bSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0zODU9c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnhlX2RybV9wYWdlbWFwX2Zyb21fZmQoaW50IGZkLCB1MzIgcmVnaW9uX2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaC0zOTItXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6MzkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKSAvKiBOZWVkIHRvIHN1cHBvcnQgdXNlcnB0ciB3aXRob3V0IFhFX0dQVVNWTSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTM5NC0jZGVmaW5lIHhlX3N2bV9hc3NlcnRfaW5fbm90aWZpZXIodm1fXykgXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg9NDM2PXN0YXRpYyBpbmxpbmUgdm9pZCB4ZV9zdm1fbm90aWZpZXJfdW5sb2NrKHN0cnVjdCB4ZV92bSAqdm0pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQzOC19XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmg6NDM5OiNlbmRpZiAvKiBDT05GSUdfRFJNX0dQVVNWTSAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQ0MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oPTQ4PXN0cnVjdCB4ZV91c2VycHRyIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTk5LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuaDoxMDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTEwMS12b2lkIHhlX3VzZXJwdHJfcmVtb3ZlKHN0cnVjdCB4ZV91c2VycHRyX3ZtYSAqdXZtYSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM9MzYwNj1zdGF0aWMgaW50IHZtX2JpbmRfaW9jdGxfY2hlY2tfYXJncyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZtICp2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zNzE2LVx0XHQgICAgWEVfSU9DVExfREJHKHhlLCBvcCA9PSBEUk1fWEVfVk1fQklORF9PUF9NQVBfVVNFUlBUUiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jOjM3MTc6XHRcdFx0XHQgIUlTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pKSB8fFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmMtMzcxOC1cdFx0ICAgIFhFX0lPQ1RMX0RCRyh4ZSwgb2JqIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC01LVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjY6I2lmbmRlZiBfX0RSTV9HUFVTVk1fSF9fXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NzojZGVmaW5lIF9fRFJNX0dQVVNWTV9IX19cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC04LVxuLS1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zMjc9dm9pZCBkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzMyLSAqIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCAtIFNjYW4gcmVzdWx0IGZyb20gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpIGZ1bmN0aW9uLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzMzogKiBARFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEOiBBdCBsZWFzdCBvbmUgcGFnZSB3YXMgbm90IHByZXNlbnQgb3IgaW5hY2Nlc3NpYmxlLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzNDogKiBARFJNX0dQVVNWTV9TQ0FOX0VRVUFMOiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgaW5kaWNhdGVkIGFzXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzM1LSAqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkgZnVuY3Rpb24uXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM2OiAqIEBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI6IEFsbCBwYWdlcyBiZWxvbmcgdG8gZXhhY3RseSBvbmUgZGV2X3BhZ2VtYXAsIHdoaWNoIGlzXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzM3LSAqICpOT1QqIHRoZSBAcGFnZW1hcCBhcmd1bWVudCB0byB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkuIEFsbCBwYWdlcyBiZWxvbmcgdG9cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzgtICogdGhlIHNhbWUgZGV2aWNlIHByaXZhdGUgb3duZXIuXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM5OiAqIEBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNOiBBbGwgcGFnZXMgYXJlIHByZXNlbnQgYW5kIHN5c3RlbSBwYWdlcy5cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDA6ICogQERSTV9HUFVTVk1fU0NBTl9NSVhFRF9ERVZJQ0U6IEFsbCBwYWdlcyBhcmUgZGV2aWNlIHBhZ2VzIGFuZCBiZWxvbmcgdG8gYXQgbGVhc3RcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNDEtICogdHdvIGRpZmZlcmVudCBzdHJ1Y3QgZGV2X3BhZ2VtYXBzLiBBbGwgcGFnZXMgYmVsb25nIHRvIHRoZSBzYW1lIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQyLSAqIG93bmVyLlxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0MzogKiBARFJNX0dQVVNWTV9TQ0FOX01JWEVEOiBQYWdlcyBhcmUgcHJlc2VudCBhbmQgYXJlIGEgbWl4IG9mIHN5c3RlbSBwYWdlc1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0NC0gKiBhbmQgZGV2aWNlLXByaXZhdGUgcGFnZXMuIEFsbCBkZXZpY2UtcHJpdmF0ZSBwYWdlcyBiZWxvbmcgdG8gdGhlIHNhbWUgZGV2aWNlXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTM0Nz1lbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQge1xuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM0ODpcdERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDk6XHREUk1fR1BVU1ZNX1NDQU5fRVFVQUwsXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUwOlx0RFJNX0dQVVNWTV9TQ0FOX09USEVSLFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1MTpcdERSTV9HUFVTVk1fU0NBTl9TWVNURU0sXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUyOlx0RFJNX0dQVVNWTV9TQ0FOX01JWEVEX0RFVklDRSxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNTM6XHREUk1fR1BVU1ZNX1NDQU5fTUlYRUQsXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzU0LX07XG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oPTUzMT1fX2RybV9ncHVzdm1fbm90aWZpZXJfbmV4dChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG4tLVxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTU3MC1cbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDo1NzE6I2VuZGlmIC8qIF9fRFJNX0dQVVNWTV9IX18gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdQVSBWaXJ0dWFsaXphdGlvbiBTdXBwb3J0KioKCk9rYXksIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgaXMgcHVsbGVkIGluIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAsIHdoaWNoIGlzIGluIHR1cm4gc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVgLiBUaGF0IG1lYW5zIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwmIzM5O3MgWGUgZHJpdmVyLCBpcyBkZWZpbml0ZWx5IHVzaW5nIHRoaXMgR1BVIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGJ1dC4uLiBoYW5nIG9uIGEgbWludXRlLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hhdCYjMzk7cyBpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LiBSaWdodCwgU3l6a2FsbGVyLCBpdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQsIEdDRS9RRU1VLCBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgaGF2ZSBwaHlzaWNhbCBJbnRlbCBYZSBHUFVzLiBUaGlzIGNvdWxkIHByZXNlbnQgYSBwcm9ibGVtLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYXNzdW1wdGlvbnMgaGVyZS4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYGRybV9wYWdlbWFwLmNgIGFsc28gdXNlZCBieSBgbm91dmVhdWA/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5vdXZlYXVgIGFjdHVhbGx5IG1ha2VzIHVzZSBvZiBgZHJtX3BhZ2VtYXBgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGlzIGNvdWxkIGNoYW5nZSB0aGluZ3MgYW5kIHByb3ZpZGUgYSBiZXR0ZXIgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgKERSTSkgUGFnZSBNYXBwaW5nIGluIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGRpZmZlcmVudCBkcml2ZXJzIGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlyZWN0IHJlbmRlcmluZy4gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBrZXJuZWwmIzM5O3MgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGFuZCBob3cgZ3JhcGhpY3MgZHJpdmVycyBhbGxvY2F0ZSBhbmQgbWFuYWdlIEdQVSBtZW1vcnkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgJiMzNDtub3V2ZWF1JiMzNDsgZHJpdmVyLCB3aGljaCBpcyBOdmlkaWEmIzM5O3Mgb3Blbi1zb3VyY2UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgKmRvZXNuJiMzOTt0KiBzZWVtIHRvIGJlIGxldmVyYWdpbmcgdGhlIGBkcm1fcGFnZW1hcGAgaW5mcmFzdHJ1Y3R1cmUsIGF0IGxlYXN0IG5vdCBpbiBhIHdheSB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBteSBxdWljayBzY2FuLiBUaGlzIGlzIHNvbWV3aGF0IHN1cnByaXNpbmcsIGFuZCBJJiMzOTttIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFyY2hpdGVjdHVyYWwgY2hvaWNlLgoKTm93LCB0aGlzIHNwYXJrcyBhbm90aGVyIHRob3VnaHQuIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgdGhlIEFNRCBzaWRlIGxvb2tzIGxpa2UuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIGBhbWRncHVgIGRyaXZlciwgQU1EJiMzOTtzIGZsYWdzaGlwIG9wZW4tc291cmNlIGdyYXBoaWNzIGRyaXZlciwgaGFuZGxlIHRoaXM/IERvZXMgYGFtZGdwdWAgZm9sbG93IGEgc2ltaWxhciBwYXRoIGFuZCBhdm9pZCBgZHJtX3BhZ2VtYXBgIGZvciBpdHMgbWVtb3J5IG1hbmFnZW1lbnQ/IE9yLCBkb2VzIGl0IGhhdmUgYSBjb250cmFzdGluZyBhcHByb2FjaD8gSSYjMzk7bGwgbmVlZCB0byBnbyBsb29rIGludG8gdGhhdCwgYW5kIHRoZW4sIGNvbXBhcmUgdGhvc2UgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fcGFnZW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9hbWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IEkmIzM5O20gdGhpbmtpbmcgaGVyZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVc2FnZSBvZiBgZHJtX3BhZ2VtYXAuY2AqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRybV9wYWdlbWFwLmNgIHNlZW1zIHRvIGJlIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gdGhlIGB4ZWAgZHJpdmVyIGF0IHRoZSBtb21lbnQsIHdoaWNoIHN0cmlrZXMgbWUgYXMgYSBiaXQgb2RkLCB1c3VhbGx5IHRoZXNlIHNvcnRzIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGhhdmUgYnJvYWRlciBhcHBsaWNhYmlsaXR5LiBCdXQgd2FpdCwgYSBtZW1vcnkgam9nLi4uIGlzbiYjMzk7dCBgZHJtX3BhZ2VtYXAuY2AgcGFydCBvZiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGU/IE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgZHJtX2dwdXN2bV9oZWxwZXJgIHNvbGVseSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyIG9yIGRvZXMgaXQgaGF2ZSBvdGhlciBjb25zdW1lcnMgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIG9mIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm1fZ3B1c3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTQ0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG4uY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0xODItICAtICYjMzk7ZHJtX2dlbV9mb3JfZWFjaF9ncHV2bV9ib19zYWZlJiMzOTtcbi5jbGFuZy1mb3JtYXQ6MTgzOiAgLSAmIzM5O2RybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UmIzM5O1xuLmNsYW5nLWZvcm1hdC0xODQtICAtICYjMzk7ZHJtX2dwdXZhX2Zvcl9lYWNoX29wJiMzOTtcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD02Nz1PdmVydmlldyBvZiBiYXNlbGluZSBkZXNpZ25cbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjcwOi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03MS0gICA6ZG9jOiBPdmVydmlld1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MzouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzQtICAgOmRvYzogTG9ja2luZ1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3NjouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzctICAgOmRvYzogUGFydGlhbCBVbm1hcHBpbmcgb2YgUmFuZ2VzXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0Ojc5Oi4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC04MC0gICA6ZG9jOiBFeGFtcGxlc1xuLS1cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0PTkxPVBvc3NpYmxlIGZ1dHVyZSBkZXNpZ24gZmVhdHVyZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6MTAxOlx0KiBDYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQgdG8gZHJtX2dwdXN2bV9nZXRfcGFnZXMgZmFpcmx5IGVhc2lseS5cbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XG4tLVxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZGV2aWNlLmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQtICogZXhjZXB0IGZvciB0aGUgcmVjaGVjayByYW5nZSYjMzk7cyBwYWdlcyBiZWluZyB2YWxpZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NTogKiAoZHJtX2dwdXN2bV9yYW5nZV9wYWdlc192YWxpZCkgd2hlbiB0aGUgZHJpdmVyIGlzIGNvbW1pdHRpbmcgR1BVIGJpbmRpbmdzLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05Ni0gKiBUaGlzIGxvY2sgY29ycmVzcG9uZHMgdG8gdGhlIGBgZHJpdmVyLVx1MDAzZXVwZGF0ZWBgIGxvY2sgbWVudGlvbmVkIGluXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDItICogbG9jayB0byBzYWZlZ3VhcmQgY29yZSBHUFUgU1ZNIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbW9kaWZ5IHN0YXRlLCBzdWNoIGFzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0IGFuZCBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZS4gVGhpcyBsb2NrIGlzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNC0gKiBkZW5vdGVkIGFzICYjMzk7ZHJpdmVyX3N2bV9sb2NrJiMzOTsgaW4gY29kZSBleGFtcGxlcy4gRmluZXIgZ3JhaW5lZCBkcml2ZXIgc2lkZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDUtICogbG9ja2luZyBzaG91bGQgYWxzbyBiZSBwb3NzaWJsZSBmb3IgY29uY3VycmVudCBHUFUgZmF1bHQgcHJvY2Vzc2luZyB3aXRoaW4gYVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDY6ICogc2luZ2xlIEdQVSBTVk0uIFRoZSAmIzM5O2RyaXZlcl9zdm1fbG9jayYjMzk7IGNhbiBiZSB2aWEgZHJtX2dwdXN2bV9kcml2ZXJfc2V0X2xvY2tcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3LSAqIHRvIGFkZCBhbm5vdGF0aW9ucyB0byBHUFUgU1ZNLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQyLSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzogKlx0aW50IGRyaXZlcl9iaW5kX3JhbmdlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQ0LSAqXHR7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5OiAqXHRcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTA6ICpcdFx0aWYgKGRybV9ncHVzdm1fcmFuZ2VfcGFnZXNfdmFsaWQocmFuZ2UpKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTEtICpcdFx0XHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCByYW5nZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTMtICpcdFx0XHRlcnIgPSAtRUFHQUlOO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTQ6ICpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2soZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTgtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU5OiAqXHRpbnQgZHJpdmVyX2dwdV9mYXVsdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MC0gKlx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBncHV2YV9zdGFydCwgdW5zaWduZWQgbG9uZyBncHV2YV9lbmQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MS0gKlx0e1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjI6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHt9O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjMtICpcdFx0aW50IGVycjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2OS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzA6ICpcdFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KGdwdXN2bSwgZmF1bHRfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTcxLSAqXHRcdFx0XHRcdFx0XHRncHV2YV9zdGFydCwgZ3B1dmFfZW5kLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg1LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4NjogKlx0XHRlcnIgPSBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyhncHVzdm0sIHJhbmdlLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcdFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUCB8fCBlcnIgPT0gLUVGQVVMVCB8fCBlcnIgPT0gLUVQRVJNKSB7XHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODgtICpcdFx0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxODk6ICpcdFx0XHRcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE5MC0gKlx0XHRcdGdvdG8gcmV0cnk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjA4OiAqXHR2b2lkIF9fZHJpdmVyX2dhcmJhZ2VfY29sbGVjdG9yKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwOTogKlx0XHRcdFx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMC0gKlx0e1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE0LSAqXHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncy5wYXJ0aWFsX3VubWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTU6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KGdwdXN2bSwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMTYtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXHRcdGRyaXZlcl91bmJpbmRfcmFuZ2UocmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTg6ICpcdFx0ZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoZ3B1c3ZtLCByYW5nZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxOS0gKlx0fVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMjAtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjIxOiAqXHR2b2lkIGRyaXZlcl9nYXJiYWdlX2NvbGxlY3RvcihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMjItICpcdHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzMi0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzM6ICpcdHZvaWQgZHJpdmVyX2ludmFsaWRhdGlvbihzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzQ6ICpcdFx0XHRcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIzNS0gKlx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM2LSAqXHR7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNzogKlx0XHRzdHJ1Y3QgZHJtX2dwdXN2bV9jdHggY3R4ID0geyAuaW5fbm90aWZpZXIgPSB0cnVlLCB9O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzg6ICpcdFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlID0gTlVMTDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM5LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQyOiAqXHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2UocmFuZ2UsIG5vdGlmaWVyLCBtbXVfcmFuZ2UtXHUwMDNlc3RhcnQsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0My0gKlx0XHRcdFx0XHQgIG1tdV9yYW5nZS1cdTAwM2VlbmQpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjQ0OiAqXHRcdFx0ZHJtX2dwdXN2bV9yYW5nZV91bm1hcF9wYWdlcyhncHVzdm0sIHJhbmdlLCBcdTAwMjZjdHgpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDUtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0OC0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDk6ICpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgbW11X3JhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjUwLSAqXHRcdFx0ZHJpdmVyX2dhcmJhZ2VfY29sbGVjdG9yX2FkZChncHVzdm0sIHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTI2OD1ucGFnZXNfaW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNzMtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSBub3RpZmllciBmcm9tIEdQVSBTVk1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc4LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3OTogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9ub3RpZmllciBpZiBmb3VuZCBvciBOVUxMXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4MC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgxOnN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgyOmRybV9ncHVzdm1fbm90aWZpZXJfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yODMtXHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjg5LVx0aWYgKGl0cmVlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6XHRcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyLCBpdHJlZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5MS1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5My19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NDpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ni0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mjk3OiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZCgpIC0gRmluZCBHUFUgU1ZNIHJhbmdlIGZyb20gR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yOTgtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMwMS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDI6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fcmFuZ2UgaWYgZm91bmQgb3IgTlVMTFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwNDpzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwNTpkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDYtXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzEyLVx0aWYgKGl0cmVlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTM6XHRcdHJldHVybiBjb250YWluZXJfb2YoaXRyZWUsIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlLCBpdHJlZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC1cdGVsc2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNi19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMxNzpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMTgtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzIwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZSgpIC0gSW52YWxpZGF0ZSBhIEdQVSBTVk0gbm90aWZpZXIuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMyMS0gKiBAbW5pOiBQb2ludGVyIHRvIHRoZSBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MzMxPXN0YXRpYyBib29sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzMjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMzNS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzNjpcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllciA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMzNy1cdFx0Y29udGFpbmVyX29mKG1uaSwgdHlwZW9mKCpub3RpZmllciksIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzM4Olx0c3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSA9IG5vdGlmaWVyLVx1MDAzZWdwdXN2bTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM5LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzUxLS8qXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM1MjogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyAtIE1NVSBpbnRlcnZhbCBub3RpZmllciBvcGVyYXRpb25zIGZvciBHUFUgU1ZNXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyX29wcyBkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU1Olx0LmludmFsaWRhdGUgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1Ni19O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzU4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTk6ICogZHJtX2dwdXN2bV9pbml0KCkgLSBJbml0aWFsaXplIHRoZSBHUFUgU1ZNLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNjAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzQtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzc1OiAqIE5vdGU6IElmIG9ubHkgdXNpbmcgdGhlIHNpbXBsZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSAoZ2V0L3VubWFwL2ZyZWUpLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtICogdGhlbiBvbmx5IEBncHVzdm0sIEBuYW1lLCBhbmQgQGRybSBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBzYW1lIGJhc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc3LSAqIEBncHVzdm0gY2FuIGFsc28gYmUgdXNlZCB3aXRoIGJvdGggbW9kZXMgdG9nZXRoZXIgaW4gd2hpY2ggY2FzZSB0aGUgZnVsbFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzg6ICogc2V0dXAgaXMgbmVlZGVkLCB3aGVyZSB0aGUgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSSB3aWxsIHNpbXBseSBuZXZlciB1c2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc5LSAqIHRoZSBvdGhlciBmaWVsZHMuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODItICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MzppbnQgZHJtX2dwdXN2bV9pbml0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4NC1cdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODctXHRcdCAgICB1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3NpemUsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4ODpcdFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX29wcyAqb3BzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODktXHRcdCAgICBjb25zdCB1bnNpZ25lZCBsb25nICpjaHVua19zaXplcywgaW50IG51bV9jaHVua3MpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTUtXHR9IGVsc2Uge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozOTY6XHRcdC8qIE5vIGZ1bGwgU1ZNIG1vZGUsIG9ubHkgY29yZSBkcm1fZ3B1c3ZtX3BhZ2VzIEFQSS4gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzk3LVx0XHRpZiAob3BzIHx8IG51bV9jaHVua3MgfHwgbW1fcmFuZ2UgfHwgbm90aWZpZXJfc2l6ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNS19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQyNjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2luaXQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MjctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyOC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDI5OiAqIHRvX2RybV9ncHVzdm1fbm90aWZpZXIoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKnRvX2RybV9ncHVzdm1fbm90aWZpZXIoc3RydWN0IHJiX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzNS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNjpcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlLnJiKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDM3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDQwOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDEtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0NS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDQ2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0NzpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0OC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTUtXHRpZiAobm9kZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2Olx0XHRoZWFkID0gXHUwMDI2KHRvX2RybV9ncHVzdm1fbm90aWZpZXIobm9kZSkpLVx1MDAzZWVudHJ5O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NTctXHRlbHNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NjMtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ2NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gbm90aWZpZXJcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDY1LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2OS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDcwOnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3MTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3Mi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzctLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3ODogKiBkcm1fZ3B1c3ZtX2ZpbmkoKSAtIEZpbmFsaXplIHRoZSBHUFUgU1ZNLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzktICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ4NDp2b2lkIGRybV9ncHVzdm1fZmluaShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODY6XHRzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsICpuZXh0O1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ4ODpcdGRybV9ncHVzdm1fZm9yX2VhY2hfbm90aWZpZXJfc2FmZShub3RpZmllciwgbmV4dCwgZ3B1c3ZtLCAwLCBMT05HX01BWCkge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODk6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwgKl9fbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDkwLVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0OTc6XHRcdGRybV9ncHVzdm1fZm9yX2VhY2hfcmFuZ2Vfc2FmZShyYW5nZSwgX19uZXh0LCBub3RpZmllciwgMCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk4LVx0XHRcdFx0XHQgICAgICAgTE9OR19NQVgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ5OTpcdFx0XHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTAwLVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA1LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTA2OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fZmluaSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNy1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTA4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDk6ICogZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYygpIC0gQWxsb2NhdGUgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUxNi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE3OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUxODpkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE5LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOlx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MjEtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU0MTogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZyZWUoKSAtIEZyZWUgR1BVIFNWTSBub3RpZmllclxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDItICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU0Ni0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ3OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NDg6XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU1OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTU5OiAqIHRvX2RybV9ncHVzdm1fcmFuZ2UoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2MDogKiBAbm9kZTogYSBwb2ludGVyIHRvIHRoZSByYnRyZWUgbm9kZSBlbWJlZGRlZCB3aXRoaW4gYSBkcm1fZ3B1c3ZtX3JhbmdlIHN0cnVjdFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjEtICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTYyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fcmFuZ2Ugc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NjMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2NDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnRvX2RybV9ncHVzdm1fcmFuZ2Uoc3RydWN0IHJiX25vZGUgKm5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU2NjpcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlLnJiKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2OS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTcwOiAqIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSByYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NzEtICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc1LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NzY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9yYW5nZV9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1Nzc6XHRcdFx0XHQgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01Nzgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgxLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1ODI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2xvY2sobm90aWZpZXItXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgzLVx0aW50ZXJ2YWxfdHJlZV9pbnNlcnQoXHUwMDI2cmFuZ2UtXHUwMDNlaXRyZWUsIFx1MDAyNm5vdGlmaWVyLVx1MDAzZXJvb3QpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg2LVx0aWYgKG5vZGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU4NzpcdFx0aGVhZCA9IFx1MDAyNih0b19kcm1fZ3B1c3ZtX3JhbmdlKG5vZGUpKS1cdTAwM2VlbnRyeTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkxLVx0bGlzdF9hZGQoXHUwMDI2cmFuZ2UtXHUwMDNlZW50cnksIGhlYWQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTI6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhub3RpZmllci1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTMtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1OTY6ICogX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk3LSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYwMS0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjAyOnN0YXRpYyB2b2lkIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYwNC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MDktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYxMDogKiBkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKCkgLSBBbGxvY2F0ZSBHUFUgU1ZNIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYxMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjIwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjIyOmRybV9ncHVzdm1fcmFuZ2VfYWxsb2Moc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjIzOlx0XHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjQtXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsIHVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyNzpcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjI4LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjQ5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKCkgLSBHZXQgdGhlIGxhcmdlc3QgQ1BVIG1hcHBpbmcgb3JkZXIuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY1MS0gKiBAaG1tX3BmbjogVGhlIGN1cnJlbnQgaG1tX3Bmbi5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Mi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjYzOnN0YXRpYyB1bnNpZ25lZCBpbnQgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHVuc2lnbmVkIGxvbmcgaG1tX3BmbixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjY0LVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaG1tX3Bmbl9pbmRleCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY3OC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Njc5OiAqIGRybV9ncHVzdm1fY2hlY2tfcGFnZXMoKSAtIENoZWNrIHBhZ2VzXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjkwLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTE6c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTI6XHRcdFx0XHQgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY5My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM3LVx0XHR9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjczODpcdFx0aSAmIzQzOz0gMHgxIFx1MDAzY1x1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM5LVx0fVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQ2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDc6ICogZHJtX2dwdXN2bV9zY2FuX21tKCkgLSBDaGVjayB0aGUgbWlncmF0aW9uIHN0YXRlIG9mIGEgZHJtX2dwdXN2bV9yYW5nZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDg6ICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzQ5LSAqIEBkZXZfcHJpdmF0ZV9vd25lcjogVGhlIHN0cnVjdCBkZXZfcHJpdmF0ZV9vd25lciB0byB1c2UgdG8gZGV0ZXJtaW5lXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzYwOiAqIFJldHVybjogU2VlIFx1MDAyNmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NjI6ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc2My1cdFx0XHRcdFx0ICAgICAgIHZvaWQgKmRldl9wcml2YXRlX293bmVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY2LVx0c3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbm90aWZpZXIgPSBcdTAwMjZyYW5nZS1cdTAwM2Vub3RpZmllci1cdTAwM2Vub3RpZmllcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzY3Olx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Njg6XHR1bnNpZ25lZCBsb25nIGVuZCA9IGRybV9ncHVzdm1fcmFuZ2VfZW5kKHJhbmdlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY5LVx0c3RydWN0IGhtbV9yYW5nZSBobW1fcmFuZ2UgPSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzctXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzc4Olx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3OS1cdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MDktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgxMDpcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTEtXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgxMjpcdFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODEzLVx0XHRnb3RvIHJldHJ5O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTY6XHRcdGkgJiM0Mzs9IDF1bCBcdTAwM2NcdTAwM2MgZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKHBmbnNbaV0sIGksIG5wYWdlcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1Ny1cdH1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTk6XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjQtfVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NjU6RVhQT1JUX1NZTUJPTChkcm1fZ3B1c3ZtX3NjYW5fbW0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjYtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2Ny0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODY4OiAqIGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZSgpIC0gRGV0ZXJtaW5lIGNodW5rIHNpemUgZm9yIEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04ODQ9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg1OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4ODY6XHRcdFx0ICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODg3LVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwMi1cdFx0aWYgKHN0YXJ0IFx1MDAzZT0gdmFzLVx1MDAzZXZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2YXMtXHUwMDNldm1fZW5kIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDM6XHRcdCAgICBzdGFydCBcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDQ6XHRcdCAgICBlbmQgXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwNS1cdFx0ICAgIHN0YXJ0IFx1MDAzZT0gZ3B1dmFfc3RhcnQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2M9IGdwdXZhX2VuZClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxNi1cdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTc6XHRcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MTk6XHRcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9maW5kKG5vdGlmaWVyLCBzdGFydCwgZW5kKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTIwLVx0XHRpZiAocmFuZ2UpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMS1cdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkzMjpcdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MzMtXHRcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICYjNDM7IGZhdWx0ZWQgaW4gd2hpY2ggY3JlYXRlcyBhbGxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzOC1cdFx0aWYgKGVuZCAtIHN0YXJ0IFx1MDAzYz0gY2hlY2tfcGFnZXNfdGhyZXNob2xkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Mzk6XHRcdCAgICAhZHJtX2dwdXN2bV9jaGVja19wYWdlcyhncHVzdm0sIG5vdGlmaWVyLCBzdGFydCwgZW5kLCBkZXZfcHJpdmF0ZV9vd25lcikpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQwLVx0XHRcdCYjNDM7JiM0MztpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTQ5LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NTA6ICogZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKCkgLSBBc3NlcnQgR1BVIFNWTSBkcml2ZXIgbG9jayBpcyBoZWxkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1NC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU1OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NTYte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYwLSNlbHNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk2MTpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX2RyaXZlcl9sb2NrX2hlbGQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYyLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2Ni0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTY3OiAqIGRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoKSAtIEZpbmQgc3RhcnQgYWRkcmVzcyBmb3IgZmlyc3QgVk1BIGluIHJhbmdlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9OTc1PXVuc2lnbmVkIGxvbmdcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTc2OmRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTc3LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ny19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk5ODpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX2ZpbmRfdm1hX3N0YXJ0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTk5LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAwLS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDAxOiAqIGRybV9ncHVzdm1fcmFuZ2VfZmluZF9vcl9pbnNlcnQoKSAtIEZpbmQgb3IgaW5zZXJ0IEdQVSBTVk0gcmFuZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAwMi0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxMi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTAxMzpzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMTQ6ZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDE1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxNy1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZ3B1dmFfZW5kLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDE4Olx0XHRcdFx0Y29uc3Qgc3RydWN0IGRybV9ncHVzdm1fY3R4ICpjdHgpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTkte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIwOlx0c3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIxOlx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDIyLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBncHVzdm0tXHUwMDNlbW07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDI4LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDI5Olx0ZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKGdwdXN2bSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMzAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDM4Olx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoZ3B1c3ZtLCBmYXVsdF9hZGRyLCBmYXVsdF9hZGRyICYjNDM7IDEpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM5LVx0aWYgKCFub3RpZmllcikge1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDQwOlx0XHRub3RpZmllciA9IGRybV9ncHVzdm1fbm90aWZpZXJfYWxsb2MoZ3B1c3ZtLCBmYXVsdF9hZGRyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA0MS1cdFx0aWYgKElTX0VSUihub3RpZmllcikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNDctXHRcdFx0XHRcdFx0ICAgbW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDg6XHRcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9ub3RpZmllcl9zdGFydChub3RpZmllciksXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDk6XHRcdFx0XHRcdFx0ICAgZHJtX2dwdXN2bV9ub3RpZmllcl9zaXplKG5vdGlmaWVyKSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA1MDpcdFx0XHRcdFx0XHQgICBcdTAwMjZkcm1fZ3B1c3ZtX25vdGlmaWVyX29wcyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNTEtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDcyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDczOlx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQobm90aWZpZXIsIGZhdWx0X2FkZHIsIGZhdWx0X2FkZHIgJiM0MzsgMSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNzQtXHRpZiAocmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDg0Olx0Y2h1bmtfc2l6ZSA9IGRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShncHVzdm0sIG5vdGlmaWVyLCB2YXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwODUtXHRcdFx0XHRcdFx0IGZhdWx0X2FkZHIsIGdwdXZhX3N0YXJ0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA5My1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA5NDpcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9hbGxvYyhncHVzdm0sIG5vdGlmaWVyLCBmYXVsdF9hZGRyLCBjaHVua19zaXplLFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDk1LVx0XHRcdFx0ICAgICAgIG1pZ3JhdGVfZGV2bWVtKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMDAtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMDE6XHRkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydChub3RpZmllciwgcmFuZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTAyLVx0aWYgKG5vdGlmaWVyX2FsbG9jKVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTAzOlx0XHRkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydChncHVzdm0sIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwNC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMTYtXHRpZiAobm90aWZpZXJfYWxsb2MpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMTc6XHRcdGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShncHVzdm0sIG5vdGlmaWVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTExOC1lcnJfbW11bmxvY2s6XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIxLX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEyMjpFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyMy1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyNC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEyNTogKiBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoKSAtIFVubWFwIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBHUFUgU1ZNIHBhZ2VzIChpbnRlcm5hbClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFN5emthbGxlciBSZWFjaGFiaWxpdHkgb2YgRGV2aWNlIE1pZ3JhdGlvbiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcm1fZ3B1c3ZtYCBmcmFtZXdvcmsuIEl0IHNlZW1zIGxpa2UgYSBnZW5lcmljIGhlbHBlciBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSwgYW5kIHJpZ2h0IG5vdywgb25seSB0aGUgYHhlYCBkcml2ZXIgdXNlcyBpdC4gSG1tLCB3YWl0IGEgbWludXRlLCBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZHJtX2dwdXN2bV9oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGlzIGEgYmlnZ2VyIGFyZWEgdG8gY29uc2lkZXIuIElzIGFueXRoaW5nICplbHNlKiB1c2luZyBgZHJtX2dwdXN2bWA/IE5vLCBqdXN0IGB4ZWAuIFNpbmNlIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBmdXp6IGB4ZWAgKHJlcXVpcmVzIHJlYWwgSW50ZWwgR1BVIGhhcmR3YXJlKSwgY2hhbmdlcyBzcGVjaWZpY2FsbHkgaW4gYGRybV9wYWdlbWFwLmNgIGFyZSBwcm9iYWJseSB1bnJlYWNoYWJsZSBpbiBhIHR5cGljYWwgU3l6a2FsbGVyIGVudmlyb25tZW50LgoKQnV0IHdoYXQgYWJvdXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgPyBUaGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGlzIGlzIHVzZWQgYnkgYHRlc3RfaG1tLmNgLCB3aGljaCBTeXprYWxsZXIgKmRvZXMqIGZ1enogdmlhIGAvZGV2L2htbV9kbWlycm9yKmAuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgYXJlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciBkZXZpY2UgbWlncmF0aW9uLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGVtLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaW50ZXJlc3RpbmcgYnVncy4KCkNhbiBgdGVzdF9obW1gIGFjdHVhbGx5IHRyaWdnZXIgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYD8gV2VsbCwgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2AsIGFuZCB0aGF0JiMzOTtzIHdoZW4gYGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYCBpcyB0cnVlLiBPa2F5LCBjYW4gd2UgbWFwIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGFuZCB0aGVuIG1pZ3JhdGUgaXQgdXNpbmcgYHRlc3RfaG1tYD8gWWVzLCBgdGVzdF9obW1gIHVzZXMgc3RhbmRhcmQgYG1tYXBgIGNhbGxzLCBhbmQgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgdG8gY3JlYXRlIFRIUHMsIHdoaWNoIGNvdWxkIHRoZW4gYmUgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSB1c2luZyB0aGUgYHRlc3RfaG1tYCBpb2N0bHMuCgpMZXQmIzM5O3MgZGlnIGludG8gYHRlc3RfaG1tYCBpdHNlbGYuIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBkdW1teSBkZXZpY2UgbWVtb3J5IHVzaW5nIGBERVZJQ0VfUFJJVkFURWAgcGFnZXMuIFdoZW4gYSB1c2VyIGNhbGxzIGBITU1fRE1JUlJPUl9DTURfTUlHUkFURV9UT19ERVZJQ0VgLCBpdCBlbmRzIHVwIGNhbGxpbmcgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIElmIHdlIGRpZCBtYXAgYSBUSFAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAgd291bGQgaGFuZGxlIHRoZSBQTUQuIEdvb2QhIFdhaXQsIGBtaWdyYXRlX3ZtYV9zZXR1cGAgKmRvZXMqIGhhbmRsZSBUSFBzISBUaGF0IGlzIGV4Y2VsbGVudCBuZXdzLiBOb3csIEkgbmVlZCB0byBjaGVjayBgbWlncmF0ZV92bWFfc2V0dXBgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBjb25maXJtIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz02NjA9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY2LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2Njc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjgtICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzMwOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTczMS17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjktfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3NzA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc3MS1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcwLSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDcyLSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNDc5OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ4MC0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNTQ5PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTU2MS1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTU2MjpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE1NjMtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5pdHR5LWdyaXR0eTogZG9lcyB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBzdGFuZHMsIGNvcnJlY3RseSBoYW5kbGUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcyk/IFdlIGtub3cgaG93IGNydWNpYWwgVEhQIG1hbmFnZW1lbnQgaXMgZm9yIHBlcmZvcm1hbmNlIGluIG1vZGVybiBzeXN0ZW1zLCBhbmQgYSBtaXNzdGVwIGhlcmUgY291bGQgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgaXMgVEhQLWF3YXJlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMuIEFyZSB0aGVyZSBzcGVjaWZpYyBjaGVja3MgZm9yIGh1Z2UgcGFnZSBtYXBwaW5ncz8gRG9lcyBpdCBwcm9wZXJseSByZS1tYXAgaHVnZSBwYWdlcyBpZiB0aGV5IGFyZSBzcGxpdCBvciBtZXJnZWQgZHVyaW5nIG1pZ3JhdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYXRvbWljaXR5IGR1cmluZyB0aGUgZW50aXJlIHByb2Nlc3MgdGhhdCBjb3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbj8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIGtleSBxdWVzdGlvbnMgdGhhdCBJIG5lZWQgYW5zd2VyZWQgdG8gY29uZmlybSBpdCBpcyB0aHJlYWQtc2FmZS4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGEgY2xvc2VyIGluc3BlY3Rpb24gb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyBhbmQgcGFnZSBmbGFncywgaXMgaW4gb3JkZXIuIFRoaXMgZnVuY3Rpb24gaXMgY29tcGxleCBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggVEhQIG1hbmFnZW1lbnQgaXMgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGhlcmUsIG90aGVyd2lzZSwgaXQgY291bGQgY2F1c2UgYmlnIHByb2JsZW1zIGluIGEgbGl2ZSBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz04Mj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMtXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDovKiogbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCAtIGNvbGxlY3QgVEhQIHBhZ2VzIHdpdGhvdXQgc3BsaXR0aW5nIHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUtICogZm9saW8gZm9yIGRldmljZSBwcml2YXRlIHBhZ2VzLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzY6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzctXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsayxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjU2LVx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XG5tbS9taWdyYXRlX2RldmljZS5jOjI1NzpcdFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0yNTgtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NTM9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjUtXHQgKiBzcGxpdF9odWdlX3BtZF9hZGRyZXNzKCkgemFwcyByYXRoZXIgdGhhbiBkZW1vdGVzIGEgUE1EIGluIGEgVk1BIHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTY2Olx0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjctXHQgKiBWTUEgdHlwZSwgc28gYSBmaWxlIFRIUCBjYW4gcmVhY2ggaGVyZTsgdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGVfdm1hKClcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTk4Ni1cdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5ODc6XHQgKiByZWZlcmVuY2UgdGFrZW4gYnkgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGlzIHN0aWxsIGhlbGQuXG5tbS9taWdyYXRlX2RldmljZS5jLTk4OC1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRIUCBNaWdyYXRpb24gTG9naWMqKgoKT2theSwgc28gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGtpY2tzIGluIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBodWdlIFBNRHMsIG1lYW5pbmcgVEhQcyBhcmUgZGVmaW5pdGVseSBzdXBwb3J0ZWQgZHVyaW5nIHRoZSBgbWlncmF0ZV92bWFfc2V0dXBgIHBoYXNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIEFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXRzZWxmIGlzIHRoZSB3b3JraG9yc2UgYmVoaW5kIGJvdGggYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYC4KClNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBgdGVzdF9obW1gIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGlmIGl0JiMzOTtzIG1pZ3JhdGluZyBhIFRIUCB0byBkZXZpY2UgbWVtb3J5LiBUaGVuLCBpZiB0aGUgZGVzdGluYXRpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCBUSFBzLCBvciBpZiB0aGUgYWxsb2NhdGlvbiBnb2VzIGJlbGx5LXVwLCB0aGUgY29kZSB3aWxsIHNwbGl0IHRoZSBmb2xpby4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSB6b29tIGluIG9uIHRoYXQgY3JpdGljYWwgY29uZGl0aW9uLi4uIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBjYWxscyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIG9ubHkgd2hlbiB0aGUgc291cmNlIFBGTiBpcyBtYXJrZWQgZm9yIG1pZ3JhdGlvbiAoYE1JR1JBVEVfUEZOX01JR1JBVEVgKSwgaXQmIzM5O3MgYSBsYXJnZSBmb2xpbyAoYGZvbGlvX3Rlc3RfbGFyZ2VgKSwgYW5kICpjcnVjaWFsbHkqLCB0aGUgZGVzdGluYXRpb24gUEZOIGRvZXMgKm5vdCogaGF2ZSBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIHNldC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJZiB0aGUgZGVzdGluYXRpb24gbGFja3MgYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgaXQgdGVsbHMgdXMgdGhlIGRlc3RpbmF0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlIFRIUCwgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGluIGB0ZXN0X2htbS5jYCwgYXJlIHdlIHNldHRpbmcgYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCBvbiB0aGUgZGVzdGluYXRpb24gd2hlbiBtaWdyYXRpbmc/IFRoYXQmIzM5O3MgdGhlIGxpbmNocGluLiBJZiB3ZSAqZG9uJiMzOTt0KiwgdGhlbiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlcmNpc2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlHUkFURV9QRk5fQ09NUE9VTkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxuLS1cbmxpYi90ZXN0X2htbS5jLTIxNC1cdFx0c3BhZ2UgPSBCQUNLSU5HX1BBR0Uoc3BhZ2UpO1xubGliL3Rlc3RfaG1tLmM6MjE1Olx0XHRpZiAoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSB7XG5saWIvdGVzdF9obW0uYy0yMTYtXHRcdFx0ZHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvX2FsbG9jKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxuLS1cbmxpYi90ZXN0X2htbS5jLTIyOC1cdFx0aWYgKG9yZGVyKVxubGliL3Rlc3RfaG1tLmM6MjI5Olx0XHRcdGRzdF9wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmMtMjMwLVx0XHRmb2xpb19jb3B5KHBhZ2VfZm9saW8oZHBhZ2UpLCBwYWdlX2ZvbGlvKHNwYWdlKSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9NzM5PXN0YXRpYyB2b2lkIGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXG4tLVxubGliL3Rlc3RfaG1tLmMtNzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqcnBhZ2U7XG5saWIvdGVzdF9obW0uYzo3NTA6XHRcdGJvb2wgaXNfbGFyZ2UgPSAqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORDtcbmxpYi90ZXN0X2htbS5jLTc1MS1cdFx0aW50IHdyaXRlID0gKCpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKSA/IE1JR1JBVEVfUEZOX1dSSVRFIDogMDtcbi0tXG5saWIvdGVzdF9obW0uYy04MjUtXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8oZHBhZ2UpO1xubGliL3Rlc3RfaG1tLmM6ODI2Olx0XHRcdCpkc3QgfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYy04MjctXG4tLVxubGliL3Rlc3RfaG1tLmM9ODk0PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX2ZpbmFsaXplX2FuZF9tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxuLS1cbmxpYi90ZXN0X2htbS5jLTkyMC1cbmxpYi90ZXN0X2htbS5jOjkyMTpcdFx0aWYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKVxubGliL3Rlc3RfaG1tLmMtOTIyLVx0XHRcdG5yID0gZm9saW9fbnJfcGFnZXMocGFnZV9mb2xpbyhkcGFnZSkpO1xuLS1cbmxpYi90ZXN0X2htbS5jPTEwMDQ9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHkoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMzItXHRcdGlmIChvcmRlcilcbmxpYi90ZXN0X2htbS5jOjEwMzM6XHRcdFx0KmRzdCA9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmMtMTAzNC1cdFx0aWYgKCpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX1dSSVRFKVxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMzgtXHRcdFx0ZG1pcnJvci1cdTAwM2VmbGFncyBcdTAwMjY9IH5ITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0M7XG5saWIvdGVzdF9obW0uYzoxMDM5Olx0XHRcdCpkc3QgXHUwMDI2PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYy0xMDQwLVx0XHRcdGRwYWdlID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIENvZGUgaW4gbW0vbWlncmF0ZV9kZXZpY2UuYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgY2FuIGJlIHRyaWdnZXJlZCwgYW5kIGB0ZXN0X2htbS5jYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHJvdXRlLiBJdCBkZWZpbml0ZWx5ICpzdXBwb3J0cyogYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgYW5kIHRoZXJlJiMzOTtzIGV2ZW4gYSBmbGFnLCBgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCwgdGhhdCAqY2xlYXJzKiBpdCBhbmQgc2V0cyBgZHBhZ2UgPSBOVUxMYC4gQWN0dWFsbHksIHdhaXQgYSBzZWNvbmQuLi4gaWYgYGRwYWdlYCBpcyBOVUxMLCB0aGUgbWlncmF0aW9uIGZhaWxzIG91dHJpZ2h0LgoKVGhlIGtleSBpcywgaWYgYHRlc3RfaG1tYCBhbGxvY2F0ZXMgYW4gKm9yZGVyLTAqIHBhZ2UgaW5zdGVhZCBvZiBhIFRIUCwgaXQgd29uJiMzOTt0IHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIGluIHRoZSBmaXJzdCBwbGFjZSEgTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJICpmb3JjZSogYHRlc3RfaG1tYCB0byBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzIHdoZW4gaXQgbm9ybWFsbHkgdHJpZXMgZm9yIGEgVEhQPwoKTG9va2luZyBhdCBgZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5YCwgaXQgdXNlcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZWAuIEl0IGNoZWNrcyBgaXNfbGFyZ2UgPSAqc3JjICZhbXA7IE1JR1JBVEVfUEZOX0NPTVBPVU5EYC4gSWYgYGlzX2xhcmdlYCAobWVhbmluZyB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSBsYXJnZSBwYWdlKSB0aGUgY29kZSB0cmllcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCB0cnVlKWAuIElmIHRoYXQgZmFpbHMsIGl0ICpmYWxscyBiYWNrKiB0byBhbiBvcmRlci0wIGFsbG9jYXRpb24gd2l0aCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSlgIGFuZCBzZXRzIGBpc19sYXJnZWAgdG8gZmFsc2UuIEJpbmdvISBJZiB0aGUgJiMzNDt0cnVlJiMzNDsgYWxsb2NhdGlvbiBmYWlscywgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayEKClRoYXQgZmFsbGJhY2sgcGF0aCBtZWFucyB0aGF0IGl0ICp3b24mIzM5O3QqIHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZSBmYWxsYmFjayBwYXRoIGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgbWVhbnMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBnZXRzIGNhbGxlZC4gU28geWVzLCB0aGUgY29kZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgKnJlYWNoYWJsZSogdGhyb3VnaCBgdGVzdF9obW1gIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSAmIzM0O3RydWUmIzM0OyBhbGxvY2F0aW9uIGZhaWx1cmUuCgpOb3csIHdoYXQgYWJvdXQgYGRybV9wYWdlbWFwLmNgPyBJdCBpbnRyb2R1Y2VzIGZhdWx0IGluamVjdGlvbiwgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AsIGFuZCBtb2RpZmllcyBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXNgIGFuZCBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYC4gQnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoOiBgZHJtX3BhZ2VtYXAuY2AgaXMgb25seSB1c2VkIGJ5IHRoZSBgeGVgIGRyaXZlci4gQW5kIGB4ZWAgaXNuJiMzOTt0IGZ1enplZCBpbiB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwOyBpdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIGxpa2VseSAqbm90KiByZWFjaGFibGUuIFdhaXQsIGxldCBtZSBqdXN0IHBhdXNlLi4uIGlzIGBkcm1fcGFnZW1hcC5jYCAqZXhjbHVzaXZlbHkqIHVzZWQgYnkgYHhlYD8gSXMgaXQgdXNlZCBieSAqYW55KiBvdGhlciBkcml2ZXI/IEkgdGhvdWdodCBJIGNoZWNrZWQgZWFybGllciBhbmQgZGV0ZXJtaW5lZCBpdCB3YXNuJiMzOTt0IGJ1dCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSB1c2FnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9wYWdlbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc0NCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTExMT1kcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEyOlx0ZHJtX3BhZ2VtYXAub1xcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTEzOlx0ZHJtX3BhZ2VtYXBfdXRpbC5vXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgtI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9ncHVzdm0uaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxOTojaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXAuaFx1MDAzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMC0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3ByaW50LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3OC0gKlx0XHRpZiAoZHJpdmVyX21pZ3JhdGlvbl9wb2xpY3kocmFuZ2UpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE3OTogKlx0XHRcdGVyciA9IGRybV9wYWdlbWFwX3BvcHVsYXRlX21tKGRyaXZlcl9jaG9vc2VfZHJtX3BhZ2VtYXAoKSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgwLSAqXHRcdFx0XHRcdFx0ICAgICAgZ3B1dmFfc3RhcnQsIGdwdXZhX2VuZCwgZ3B1c3ZtLVx1MDAzZW1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9ODg1PWRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMwLVx0XHQgKiByYW5nZXMuIFdoZW4gbWlncmF0aW5nIHRoZSBTVk0gcmFuZ2VzLCBzb21lIHByb2Nlc3NlcyBmYWlsIGluXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkzMTpcdFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAmIzM5O21pZ3JhdGUuY3BhZ2VzICE9IG5wYWdlcyYjMzk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMi1cdFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTEzMz1zdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMzYte1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTM3Olx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IHN2bV9wYWdlcy1cdTAwM2VkcGFnZW1hcDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzOC1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGdwdXN2bS1cdTAwM2Vkcm0tXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTE2My1cdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTE2NDpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqYWRkciA9IFx1MDAyNnN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcltqXTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODctXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExODg6XHRcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTg5LVx0XHRzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXAgPSBOVUxMO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTQwOD1pbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzItXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzM6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDM0LVx0c3RydWN0IGRybV9ncHVzdm1fcGFnZXNfZmxhZ3MgZmxhZ3M7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTIwLVx0XHQgICAgaXNfZGV2aWNlX2NvaGVyZW50X3BhZ2UocGFnZSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUyMTpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICpfX3pkZCA9XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1MjI6XHRcdFx0XHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1MjMtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM2LVx0XHRcdFx0cGFnZW1hcCA9IHBhZ2VfcGdtYXAocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1Mzc6XHRcdFx0XHRkcGFnZW1hcCA9IGRybV9wYWdlbWFwX3BhZ2VfdG9fZHBhZ2VtYXAocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1MzgtXHRcdFx0XHRpZiAoZHJtX1dBUk5fT04oZ3B1c3ZtLVx1MDAzZWRybSwgIWRwYWdlbWFwKSkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1My1cdFx0XHRcdCAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTU0Olx0XHRcdFx0ZHJtX3BhZ2VtYXBfZ2V0KGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NTpcdFx0XHRcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXHUwMDNlZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTU2LVx0XHRcdFx0c3ZtX3BhZ2VzLVx1MDAzZWRwYWdlbWFwID0gZHBhZ2VtYXA7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjA3LVxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNjA4Olx0XHRcdHN2bV9wYWdlcy1cdTAwM2VkbWFfYWRkcltqXSA9IGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MDktXHRcdFx0XHQoYWRkciwgRFJNX0lOVEVSQ09OTkVDVF9TWVNURU0sIG9yZGVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExLSNpbmNsdWRlIFx1MDAzY2RybS9kcm1fZHJ2LmhcdTAwM2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyOiNpbmNsdWRlIFx1MDAzY2RybS9kcm1fcGFnZW1hcC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzojaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXBfdXRpbC5oXHUwMDNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNC0jaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3ByaW50LmhcdTAwM2Vcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xOD1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG1pZ3JhdGVfdG9fcmFtX2ZhdWx0X2luamVjdCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjEtICogRm9yY2UgYSBoaWdoZXItb3JkZXIgZGVzdGluYXRpb24gZm9saW8gYWxsb2NhdGlvbiB0byBmYWlsIGluXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMjogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSwgZXhlcmNpc2luZyB0aGUgb3JkZXItMCBmYWxsYmFja1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMtICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI1LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjY6c3RhdGljIGJvb2wgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKHZvaWQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNy17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzAtI2Vsc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMxOnN0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc2LSAqIC0gRGV2aWNlIE1lbW9yeSBBbGxvY2F0aW9uczpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjc3OiAqICAgICAgRW1iZWRkZWQgc3RydWN0dXJlIGNvbnRhaW5pbmcgZW5vdWdoIGluZm9ybWF0aW9uIGZvciB0aGUgZHJtX3BhZ2VtYXAgdG9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc4LSAqICAgICAgbWlncmF0ZSB0byAvIGZyb20gZGV2aWNlIG1lbW9yeS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgLSBHUFUgU1ZNIHpvbmUgZGV2aWNlIGRhdGFcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg3LSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODktICogQGRldm1lbV9hbGxvY2F0aW9uOiBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkwOiAqIEBkcGFnZW1hcDogUmVmY291bnRlZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIHN0cnVjdCBkcm1fcGFnZW1hcC5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTgtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5OTpzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwMC1cdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTAxOlx0c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb247XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDI6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTAzLX07XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA2OiAqIGRybV9wYWdlbWFwX3pkZF9hbGxvYygpIC0gQWxsb2NhdGUgYSB6ZGQgc3RydWN0dXJlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3OiAqIEBkcGFnZW1hcDogUG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBzdHJ1Y3QgZHJtX3BhZ2VtYXAuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgtICpcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTQ6c3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1OmRybV9wYWdlbWFwX3pkZF9hbGxvYyhzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNzpcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExOC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjQtXHR6ZGQtXHUwMDNlZGV2bWVtX2FsbG9jYXRpb24gPSBOVUxMO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTI1Olx0emRkLVx1MDAzZWRwYWdlbWFwID0gZHJtX3BhZ2VtYXBfZ2V0KGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNi1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzE6ICogZHJtX3BhZ2VtYXBfemRkX2dldCgpIC0gR2V0IGEgcmVmZXJlbmNlIHRvIGEgemRkIHN0cnVjdHVyZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMi0gKiBAemRkOiBQb2ludGVyIHRvIHRoZSB6ZGQgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNy0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEzODpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqZHJtX3BhZ2VtYXBfemRkX2dldChzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzkte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0NC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0NTogKiBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveSgpIC0gRGVzdHJveSBhIHpkZCBzdHJ1Y3R1cmUuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDYtICogQHJlZjogUG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGNvdW50IHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDktICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTA6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE1MS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTI6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQgPVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTUzOlx0XHRjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkLCByZWZjb3VudCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTQ6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0gPSB6ZGQtXHUwMDNlZGV2bWVtX2FsbG9jYXRpb247XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTU6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gemRkLVx1MDAzZWRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTU2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2Mi1cdGtmcmVlKHpkZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNjM6XHRkcm1fcGFnZW1hcF9wdXQoZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTY0LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNjYtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNjc6ICogZHJtX3BhZ2VtYXBfemRkX3B1dCgpIC0gUHV0IGEgemRkIHJlZmVyZW5jZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2OC0gKiBAemRkOiBQb2ludGVyIHRvIHRoZSB6ZGQgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3Mi0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE3MzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF96ZGRfcHV0KHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZClcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3NC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNzU6XHRrcmVmX3B1dChcdTAwMjZ6ZGQtXHUwMDNlcmVmY291bnQsIGRybV9wYWdlbWFwX3pkZF9kZXN0cm95KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3Ni19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTc4LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTc5OiAqIGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X2ZvbGlvKCkgLSBQdXQgYSBtaWdyYXRpb24gZm9saW9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4MC0gKiBAZm9saW86IFBvaW50ZXIgdG8gdGhlIGZvbGlvIHRvIHB1dFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE4NDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTg1LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxOTE6ICogZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMoKSAtIFB1dCBtaWdyYXRpb24gcGFnZXNcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE5Mi0gKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXNcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTYtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxOTc6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXModW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTgtXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4pXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjEzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjE0Olx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhmb2xpbyk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTUtXHRcdG1pZ3JhdGVfcGZuW2ldID0gMDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMjItLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMjM6ICogZHJtX3BhZ2VtYXBfZ2V0X2Rldm1lbV9wYWdlKCkgLSBHZXQgYSByZWZlcmVuY2UgdG8gYSBkZXZpY2UgbWVtb3J5IHBhZ2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIyNC0gKiBAcGFnZTogUG9pbnRlciB0byB0aGUgcGFnZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIzMC0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzItXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMzpcdFx0XHRcdFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjM0LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzYtXHRcdFx0ICAgICAgIG9yZGVyKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzNzpcdGZvbGlvX3NldF96b25lX2RldmljZV9kYXRhKHBhZ2VfZm9saW8ocGFnZSksIGRybV9wYWdlbWFwX3pkZF9nZXQoemRkKSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzgtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0MC0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI0MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcygpIC0gTWFwIGRldmljZSBwcml2YXRlIG1pZ3JhdGlvblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQyLSAqIHBhZ2VzIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQzLSAqIEBkZXY6IFRoZSBkZXZpY2UgcGVyZm9ybWluZyB0aGUgbWlncmF0aW9uLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjQ0OiAqIEBsb2NhbF9kcGFnZW1hcDogVGhlIGRybV9wYWdlbWFwIGxvY2FsIHRvIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQ1LSAqIEBwYWdlbWFwX2FkZHI6IEFycmF5IHRvIHN0b3JlIERNQSBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIG1hcHBlZCBwYWdlcy5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0yNTg9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjU5OmRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX2RldmljZV9wcml2YXRlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmxvY2FsX2RwYWdlbWFwLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjYxOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNjItXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjY0LVx0XHRcdFx0XHQgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2NTpcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Ni17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjcwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2UobWlncmF0ZV9wZm5baV0pO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjcxOlx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQ7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzI6XHRcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzM6XHRcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyIGFkZHI7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNzQtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjgzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Mjg0Olx0XHR6ZGQgPSBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yODUtXHRcdGRwYWdlbWFwID0gemRkLVx1MDAzZWRwYWdlbWFwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxNi0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMxNzogKiBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAtIERSTSBwYWdlbWFwIElPVkEgc3RhdGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxOC0gKiBAZG1hX3N0YXRlOiBETUEgSU9WQSBzdGF0ZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjMtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMjQ6c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUge1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzI1LVx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlIGRtYV9zdGF0ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjktLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMzA6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKCkgLSBNYXAgc3lzdGVtIG9yIGRldmljZSBjb2hlcmVudFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzMxLSAqIG1pZ3JhdGlvbiBwYWdlcyBmb3IgR1BVIFNWTSBtaWdyYXRpb25cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0zNDY9c3RhdGljIGludFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzQ3OmRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDg6XHRcdFx0XHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHIsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNDktXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM1MS1cdFx0XHRcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzUyOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSAqc3RhdGUpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNTMte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5My1cdFx0cGFnZW1hcF9hZGRyW2ldID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjM5NDpcdFx0XHRkcm1fcGFnZW1hcF9hZGRyX2VuY29kZShkbWFfYWRkcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5NS1cdFx0XHRcdFx0XHREUk1fSU5URVJDT05ORUNUX1NZU1RFTSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MDgtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MDk6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDEwLSAqIEBwYWdlczogQXJyYXkgb2Ygc291cmNlIHBhZ2VzIHRvIHBvcHVsYXRlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDE4LSAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDE5OiAqIHRoZSBjb3JyZXNwb25kaW5nIGRybV9wYWdlbWFwX2FkZHIuIFRoYXQgZG9lcyBub3Qgd29yayB3aGVyZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDIwOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpIGhhZCB0byBkZW1vdGUgYSBoaWdoZXItb3JkZXIgc291cmNlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjE6ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyMi0gKiBwZXItcGFnZSwgYW5kIHRoZSBjb3B5IGNhbGxiYWNrIG5lZWRzIGEgc291cmNlIHBhZ2UgZm9yIGVhY2ggb2YgdGhlbS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjgtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0Mjk6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQzMC1cdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcmNfbXBmbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjAtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NjE6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjItICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjMtICogQG1pZ3JhdGVfcGZuOiBBcnJheSBvZiBtaWdyYXRlIHBmbnMgc2V0IHVwIGZvciB0aGUgbWFwcGVkIHBhZ2VzLiBVc2VkIHRvXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NjQ6ICogZGV0ZXJtaW5lIHRoZSBkcm1fcGFnZW1hcCBvZiBhIHBlZXIgZGV2aWNlIHByaXZhdGUgcGFnZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ2NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSBvZiBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXNcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzQtICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzY6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc3LVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDc5LVx0XHRcdFx0XHQgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDgwOlx0XHRcdFx0XHQgICAgc3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgKnN0YXRlKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDgxLXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00OTUtXHRcdGlmIChpc196b25lX2RldmljZV9wYWdlKHBhZ2UpKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0OTY6XHRcdFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkID0gZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHBhZ2UpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDk3Olx0XHRcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSB6ZGQtXHUwMDNlZHBhZ2VtYXA7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00OTgtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE2PXN0YXRpYyBpbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxNzpkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MTgtXHRcdFx0XHQgICAgc3RydWN0IGRldmljZSAqcmVtb3RlX2RldmljZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUxOTpcdFx0XHRcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKnJlbW90ZV9kcGFnZW1hcCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMC1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxvY2FsX3BmbnNbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMS1cdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZSAqcmVtb3RlX3BhZ2VzW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjI6XHRcdFx0XHQgICAgc3RydWN0IGRybV9wYWdlbWFwX2FkZHIgcGFnZW1hcF9hZGRyW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjMtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjQ6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNi1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNy17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1Mjg6XHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfZGV2aWNlX3ByaXZhdGVfcGFnZXMocmVtb3RlX2RldmljZSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyOS1cdFx0XHRcdFx0XHRcdCAgICAgICByZW1vdGVfZHBhZ2VtYXAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQxLW91dDpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0MjpcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMocmVtb3RlX2RldmljZSwgcGFnZW1hcF9hZGRyLCBsb2NhbF9wZm5zLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQzLVx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSwgTlVMTCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTQ3PXN0YXRpYyBpbnRcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0ODpkcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTQ5LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHN5c19wZm5zW10sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTAtXHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlICpsb2NhbF9wYWdlc1tdLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTUxOlx0XHRcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1Mi1cdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBucGFnZXMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTM6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzICpvcHMsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTY6XHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKGRldm1lbS1cdTAwM2VkZXYsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTctXHRcdFx0XHRcdFx0ICAgICAgIHBhZ2VtYXBfYWRkciwgc3lzX3BmbnMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTY2LW91dDpcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU2NzpcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBzeXNfcGZucywgbnBhZ2VzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTY4LVx0XHRcdFx0XHRETUFfVE9fREVWSUNFLCBzdGF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc2LSAqIEBkZXZpY2U6IG1pZ3JhdGluZyBkZXZpY2UuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1Nzc6ICogQGRwYWdlbWFwOiBQb2ludGVyIHRvIHN0cnVjdCBkcm1fcGFnZW1hcCB1c2VkIGJ5IHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc4LSAqIEBvcHM6IFRoZSBjb3B5IG9wcyB0byBiZSB1c2VkIGZvciB0aGUgbWlncmF0aW5nIGRldmljZS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01ODA9c3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODItXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODM6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg0Olx0Y29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4NS19O1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg3OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODgtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3BmbnNbXSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTAtXHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpwYWdlc1tdLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTkxOlx0XHRcdFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU5Mi1cdFx0XHRcdCAgICAgc3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jICpsYXN0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTkzLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbWlncmF0ZV9yYW5nZV9sb2MgKmN1cixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU5NDpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX21pZ3JhdGVfZGV0YWlscyAqbWRldGFpbHMpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTUte1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTk2Olx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU5Ny1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYwOC1cdGlmIChsYXN0LVx1MDAzZWRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjA5Olx0XHRyZXQgPSBkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChkZXZtZW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MTAtXHRcdFx0XHRcdFx0XHQgIGxhc3QtXHUwMDNlZGV2aWNlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYxOC1cdGVsc2VcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYxOTpcdFx0cmV0ID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KGRldm1lbSxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYyMC1cdFx0XHRcdFx0XHQgICAgIFx1MDAyNnNyY19wZm5zW2xhc3QtXHUwMDNlc3RhcnRdLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYzMS0vKipcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYzMjogKiBkcm1fcGFnZW1hcF9jcGFnZXMoKSAtIENvdW50IGNvbGxlY3RlZCBwYWdlc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjMzLSAqIEBtaWdyYXRlX3BmbjogQXJyYXkgb2YgbWlncmF0ZV9wZm4gZW50cmllcyB0byBhY2NvdW50XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQxLSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjQyOnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfY3BhZ2VzKHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY0My17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjY2LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjY3OiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKCkgLSBNaWdyYXRlIGEgc3RydWN0IG1tX3N0cnVjdCByYW5nZSB0byBkZXZpY2UgbWVtb3J5XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02NjgtICogQGRldm1lbV9hbGxvY2F0aW9uOiBUaGUgZGV2aWNlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIG1pZ3JhdGUgdG8uXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjg5LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkwOmludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY5MS1cdFx0XHRcdCAgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTItXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkzOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY5NC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTU6XHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlb3BzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Njk2Olx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRwYWdlbWFwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjk3LVx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwID0gZHBhZ2VtYXAtXHUwMDNlcGFnZW1hcDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MDgtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcztcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjcwOTpcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MTAtXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzExOlx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTcxMi1cdHZvaWQgKmJ1Zjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NDUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo3NDY6XHR6ZGQgPSBkcm1fcGFnZW1hcF96ZGRfYWxsb2MoZHBhZ2VtYXApO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzQ3LVx0aWYgKCF6ZGQpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NjgtXHRpZiAobWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzY5Olx0ICAgIGRybV9wYWdlbWFwX2NwYWdlcyhtaWdyYXRlLnNyYywgbnBhZ2VzKSAhPSBucGFnZXMpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc3MC1cdFx0Lypcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTktXHRcdGlmIChzcmNfcGFnZSBcdTAwMjZcdTAwMjYgaXNfZGV2aWNlX3ByaXZhdGVfcGFnZShzcmNfcGFnZSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMDpcdFx0XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICpzcmNfemRkID1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMTpcdFx0XHRcdGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShzcmNfcGFnZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MjItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODUzLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODU0Olx0XHRkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2UocGFnZSwgb3JkZXIsIHpkZCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NTUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTY6XHRcdC8qIElmIHdlIHN3aXRjaGVkIHRoZSBtaWdyYXRpbmcgZHJtX3BhZ2VtYXAsIG1pZ3JhdGUgcHJldmlvdXMgcGFnZXMgbm93ICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTc6XHRcdGVyciA9IGRybV9wYWdlbWFwX21pZ3JhdGVfcmFuZ2UoZGV2bWVtX2FsbG9jYXRpb24sIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1OC1cdFx0XHRcdFx0XHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcdTAwMjZsYXN0LCBcdTAwMjZjdXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODcwLVx0Y3VyLm9wcyA9IE5VTEw7IC8qIEZvcmNlIG1pZ3JhdGlvbiAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODcxOlx0ZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShkZXZtZW1fYWxsb2NhdGlvbiwgbWlncmF0ZS5zcmMsIG1pZ3JhdGUuZHN0LFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODcyLVx0XHRcdFx0XHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcdTAwMjZsYXN0LCBcdTAwMjZjdXIsIG1kZXRhaWxzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04ODYtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4ODc6XHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODg4LVx0XHRmb3IgKGkgPSBucGFnZXM7IGkgXHUwMDNjIG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTsgJiM0MzsmIzQzO2kpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEwLWVycl9mcmVlOlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTExOlx0ZHJtX3BhZ2VtYXBfemRkX3B1dCh6ZGQpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEyLVx0a3ZmcmVlKGJ1Zik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTE4LX1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkxOTpFWFBPUlRfU1lNQk9MX0dQTChkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjAtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MjI6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgLSBQb3B1bGF0ZSBSQU0gUEZOcyBmb3IgYSBWTSBhcmVhXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjMtICogQHZhczogUG9pbnRlciB0byB0aGUgVk0gYXJlYSBzdHJ1Y3R1cmUsIGNhbiBiZSBOVUxMXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTM3LSAqL1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTM4OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTM5LVx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpmYXVsdF9wYWdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2MS1cdFx0aWYgKGZhdWx0X3BhZ2UpIHtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MjpcdFx0XHRpZiAoZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHNyY19wYWdlKSAhPVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTYzOlx0XHRcdCAgICBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEoZmF1bHRfcGFnZSkpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NjQtXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTc0LVx0XHQgKiBtaWdyYXRlX2RldmljZV9wZm5zKCkuIEJvdGggdGhlIG9yZGVyLTAgZmFsbGJhY2sgYmVsb3cgYW5kXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5NzU6XHRcdCAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKCkgcmVseSBvbiB0aGF0LCBhc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTc2LVx0XHQgKiB0aGV5IGluZGV4IHRoZSBmb2xpbyBmcm9tIEBpLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk4NTpcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4Ni1cdFx0XHRmb2xpbyA9IE5VTEw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3MC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzE6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDcyOnN0YXRpYyBMTElTVF9IRUFEKGRybV9wYWdlbWFwX3VuaG9sZF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzM6c3RhdGljIERFQ0xBUkVfV09SSyhkcm1fcGFnZW1hcF93b3JrLCBkcm1fcGFnZW1hcF9kZXZfdW5ob2xkX3dvcmspO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3NC1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwNzUtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDc2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCAtIFN0cnVjdCB0byBhaWQgaW4gZHJtX2RldmljZSByZWxlYXNlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3NzogKiBAbGluazogTGluayBpbnRvIGRybV9wYWdlbWFwX3VuaG9sZF9saXN0IGZvciBkZWZlcnJlZCByZWZlcmVuY2UgcmVsZWFzZXMuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc4LSAqIEBkcm06IGRybSBkZXZpY2UgdG8gcHV0LlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3OS0gKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA4MDogKiBXaGVuIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIHJlbGVhc2VkLCB3ZSBhbHNvIG5lZWQgdG8gcmVsZWFzZSB0aGVcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwODEtICogcmVmZXJlbmNlIGl0IGhvbGRzIG9uIHRoZSBkcm0gZGV2aWNlLiBIb3dldmVyLCB0eXBpY2FsbHkgdGhhdCBuZWVkc1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Mi0gKiB0byBiZSBkb25lIHNlcGFyYXRlbHkgZnJvbSBhIHN5c3RlbS13aWRlIHdvcmtxdWV1ZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODM6ICogRWFjaCB0aW1lIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIGluaXRpYWxpemVkXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg0LSAqIChvciByZS1pbml0aWFsaXplZCBpZiBjYWNoZWQpIHRoZXJlZm9yZSBhbGxvY2F0ZSBhIHNlcGFyYXRlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDg1OiAqIGRybV9wYWdlbWFwX2Rldl9ob2xkIGl0ZW0sIGZyb20gd2hpY2ggd2UgcHV0IHRoZSBkcm0gZGV2aWNlIGFuZFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Ni0gKiBhc3NvY2lhdGVkIG1vZHVsZS5cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwODctICovXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDg4OnN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCB7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg5LVx0c3RydWN0IGxsaXN0X25vZGUgbGluaztcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDkyLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA5MzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk0LXtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTU6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwID0gY29udGFpbmVyX29mKHJlZiwgdHlwZW9mKCpkcGFnZW1hcCksIHJlZik7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDk2Olx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCA9IGRwYWdlbWFwLVx1MDAzZWRldl9ob2xkO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA5Ny1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk5LVx0ICogV2Uga25vdyB0aGUgcGFnZW1hcCBwcm92aWRlciBpcyBhbGl2ZSBhdCB0aGlzIHBvaW50LCBzaW5jZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwMDpcdCAqIHRoZSBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTAxLVx0ICogcGFnZW1hcCBwcm92aWRlciBkcm1fZGV2aWNlIGFuZCBpdHMgbW9kdWxlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMDMtXHRkcGFnZW1hcC1cdTAwM2VkZXZfaG9sZCA9IE5VTEw7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTA0Olx0ZHJtX3BhZ2VtYXBfc2hyaW5rZXJfYWRkKGRwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMDU6XHRsbGlzdF9hZGQoXHUwMDI2ZGV2X2hvbGQtXHUwMDNlbGluaywgXHUwMDI2ZHJtX3BhZ2VtYXBfdW5ob2xkX2xpc3QpO1xuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwNjpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZHJtX3BhZ2VtYXBfd29yayk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA3LVx0Lypcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA5LVx0ICogcGFnZV9mcmVlKCksIHRoZSBjYWxsZXIgaXMgaG9sZGluZyBhIHJlZmVyZW5jZSBvbiB0aGUgZGV2X3BhZ2VtYXAsXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTEwOlx0ICogb3IgaWYgY2FsbGVkIGZyb20gZHJtX3BhZ2VtYXBfcHV0KCksIHRoZSBkaXJlY3QgY2FsbGVyIGlzIHN0aWxsIGFsaXZlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExMS1cdCAqIFRoaXMgZW5zdXJlcyB3ZSBjYW4mIzM5O3QgcmFjZSB3aXRoIFRISVMgbW9kdWxlIHVubG9hZC5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE0LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTExNTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9kZXZfdW5ob2xkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExNi17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTE3Olx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmRybV9wYWdlbWFwX3VuaG9sZF9saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTg6XHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKmRldl9ob2xkLCAqbmV4dDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTktXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVx0LypcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XHQgKiBEZWZlcnJlZCByZWxlYXNlIG9mIGRybV9wYWdlbWFwIHByb3ZpZGVyIGRldmljZSBhbmQgbW9kdWxlLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyMi1cdCAqIFRISVMgbW9kdWxlIGlzIGtlcHQgYWxpdmUgZHVyaW5nIHRoZSByZWxlYXNlIGJ5IHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMzpcdCAqIGZsdXNoX3dvcmsoKSBpbiB0aGUgZHJtX3BhZ2VtYXBfZXhpdCgpIGZ1bmN0aW9uLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyNC1cdCAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMzUtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM2OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEzNzpkcm1fcGFnZW1hcF9kZXZfaG9sZChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzOC17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM5Olx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZDtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNDAtXHRzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZHBhZ2VtYXAtXHUwMDNlZHJtO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNTQtLyoqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTU1OiAqIGRybV9wYWdlbWFwX3JlaW5pdCgpIC0gUmVpbml0aWFsaXplIGEgZHJtX3BhZ2VtYXBcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNTY6ICogQGRwYWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgdG8gcmVpbml0aWFsaXplXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU3LSAqXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTU4OiAqIFJlaW5pdGlhbGl6ZSBhIGRybV9wYWdlbWFwLCBmb3Igd2hpY2ggZHJtX3BhZ2VtYXBfcmVsZWFzZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE1OS0gKiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gVGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHRoZVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2MDogKiBzaXR1YXRpb24gd2hlcmUgdGhlIGRyaXZlciBjYWNoZXMgYSBkZXN0cm95ZWQgZHJtX3BhZ2VtYXAuXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTYxLSAqXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2My0gKi9cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNjQ6aW50IGRybV9wYWdlbWFwX3JlaW5pdChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2NS17XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY2Olx0ZHBhZ2VtYXAtXHUwMDNlZGV2X2hvbGQgPSBkcm1fcGFnZW1hcF9kZXZfaG9sZChkcGFnZW1hcCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY3LVx0aWYgKElTX0VSUihkcGFnZW1hcC1cdTAwM2VkZXZfaG9sZCkpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3Mi19XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTczOkVYUE9SVF9TWU1CT0woZHJtX3BhZ2VtYXBfcmVpbml0KTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTc1LS8qKlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NjogKiBkcm1fcGFnZW1hcF9pbml0KCkgLSBJbml0aWFsaXplIGEgcHJlLWFsbG9jYXRlZCBkcm1fcGFnZW1hcFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NzogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byBpbml0aWFsaXplLlxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3OC0gKiBAcGFnZW1hcDogVGhlIGFzc29jaWF0ZWQgZGV2X3BhZ2VtYXAgcHJvdmlkaW5nIHRoZSBkZXZpY2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTk2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBkcm1fcGFnZW1hcC5jYCBhbmQgaXRzIHJvbGUuIFJpZ2h0IG5vdywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeGVgIGRyaXZlciB1dGlsaXplcyBpdCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYGRybV9ncHVzdm1gLiBCdXQgc29tZXRoaW5nJiMzOTtzIG5pZ2dsaW5nIGF0IG1lLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgb25seSBkcml2ZXIgaW52b2x2ZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYG5vdXZlYXVgIGRyaXZlciBkaXJlY3RvcnksIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIG9yIGZvcmdvdHRlbiBhIG51YW5jZWQgaW50ZXJhY3Rpb24uIEl0JiMzOTtzIGJlc3QgdG8gYmUgc3lzdGVtYXRpYywgYW5kIGRvdWJsZS1jaGVjaywgYW5kIG5vdCBsZXQgYXNzdW1wdGlvbnMgbGVhZCBtZSBhc3RyYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMjE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBHcmFwaGljcyBEcml2ZXIgT3B0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGhpdHRpbmcgYSB3YWxsIHdpdGggYG5vdXZlYXVgLiBOb3RoaW5nJiMzOTtzIG1hdGNoaW5nIHVwIHRoZXJlLCB3aGljaCBpcyBhIGJpdCBvZiBhIGhlYWQtc2NyYXRjaGVyIGdpdmVuIHRoZSBleHBlY3RlZCBoYXJkd2FyZS4gT2theSwgbGV0JiMzOTtzIHBpdm90LiBJZiBgbm91dmVhdWAgaXNuJiMzOTt0IGNvb3BlcmF0aW5nLCB0aGVuIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGBhbWRncHVgLiBJdCYjMzk7cyBhIGtleSBkcml2ZXIgdG8gY2hlY2sgdG8gc2VlIGlmIGl0IHN1cHBvcnRzIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZSBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX3BhZ2VtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vYW1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAzOTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFRhcmdldCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IHRoZSBjaGFuZ2VzIGluIGBkcm1fcGFnZW1hcC5jYCB3ZXJlIGRlYWQgY29kZSwgc2luY2UgdGhlIGB4ZWAgZHJpdmVyIGlzbiYjMzk7dCBwYXJ0IG9mIHN0YW5kYXJkIFN5emthbGxlciBmdXp6aW5nLiBJdCBuZWVkcyBzcGVjaWZpYyBJbnRlbCBYZSBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IHRoZSBTeXprYWxsZXIgZGVmYXVsdC4gQnV0IHdhaXQsIHRob3NlIGNoYW5nZXMgaW4gYGRybV9wYWdlbWFwLmNgIGFyZSAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUuIEJ1dCBJIHNlZSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgYW5kIEkga25vdyBgdGVzdF9obW0uY2AgaXMgZnV6emVkLCBzbyAqdGhhdCogY29kZSBpcyByZWFjaGFibGUuCgpSaWdodCwgYHRlc3RfaG1tLmNgIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBjYWxscyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFNvIHRoZSBjb3JlIE1NIGNoYW5nZXMsIGxpa2UgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhcmUgKmRlZmluaXRlbHkqIGhpdCB3aGVuIGB0ZXN0X2htbWAgbWlncmF0ZXMgVEhQcy4gSSBjYW4gdHJ1c3QgdGhvc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBleGVjdXRlZCBhbmQgdGVzdGVkLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcnVuZG93biBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0aGF0IHdlcmUgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2U6CiogICBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZWAKKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgCiogICBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gCiogICBgX19taWdyYXRlX2RldmljZV9wYWdlc2AKKiAgIGBtaWdyYXRlX2RldmljZV9yYW5nZWAKKiAgIGBtaWdyYXRlX2RldmljZV9wZm5zYAoKT2theSwgdGhlIGxhc3QgdHdvLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXJlIGV4cG9ydGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGB0ZXN0X2htbWAgYWN0dWFsbHkgKnVzZXMqIHRoZW0gZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdXNlZnVsLiBMZXQgbWUgc2NhbiBgdGVzdF9obW0uY2AgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXG4tLVxubGliL3Rlc3RfaG1tLmMtMjAwLVxubGliL3Rlc3RfaG1tLmM6MjAxOlx0bWlncmF0ZV9kZXZpY2VfcmFuZ2Uoc3JjX3BmbnMsIHN0YXJ0X3BmbiwgbnBhZ2VzKTtcbmxpYi90ZXN0X2htbS5jLTIwMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgaSYjNDM7JiM0MzspIHtcbi0tXG5saWIvdGVzdF9obW0uYy0yMzEtXHR9XG5saWIvdGVzdF9obW0uYzoyMzI6XHRtaWdyYXRlX2RldmljZV9wYWdlcyhzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYzoyMzM6XHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XG5saWIvdGVzdF9obW0uYy0yMzQtXHRrdmZyZWUoc3JjX3BmbnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQyOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG1pZ3JhdGVfZGV2aWNlYCBDb2RlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRlc3RfaG1tLmNgIGluZGVlZCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplYC4gVGhhdCBtZWFucyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IHRlc3QuIEV4Y2VsbGVudC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSAqa2V5KiBmdW5jdGlvbnMuIExldCYjMzk7cyBsaXN0IHRob3NlIGluaXRpYWxseTogYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBCdXQgd2FpdC4uLiBjaGVja2luZyB0aGUgY29kZSBhZ2FpbiBJIHNlZSB0aGF0IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AgYW5kIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBhcmUgc3RhdGljLCBzbyB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQuCgpUaGVyZWZvcmUsIHRoZSBhY3R1YWxseSAqZXhwb3J0ZWQqIGZ1bmN0aW9ucyBhcmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gIE9rYXksIHNvIHRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCBsaXN0IGFzIG15IEZvY3VzU3ltYm9scy4gSGFuZyBvbiwgdGhvdWdoIOKAkyBgbWlncmF0ZV92bWFfcGFnZXNgICppdHNlbGYqIGRvZXNuJiMzOTt0IGhhdmUgY2hhbmdlczsgaXQgY2FsbHMgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgdGhhdCBpcyBzdGF0aWMuICBTbyBJIG9ubHkgbmVlZCB0byBsaXN0IGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXMgYmVpbmcgb2YgaW50ZXJlc3QuCgpGaW5hbGx5LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gYENPTkZJR19URVNUX0hNTWAgaXMgb2J2aW91c2x5IG5lZWRlZCB0byBlbmFibGUgYHRlc3RfaG1tYC4gIEkgYWxzbyByZWNhbGwgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYmVpbmcgcmVxdWlyZWQgYnkgYG1pZ3JhdGVfZGV2aWNlLmNgLiBOZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGluIGBtbS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjIzNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYFRFU1RfSE1NYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgVEVTVF9ITU1gLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGFueSBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgZm9yIGEgZGVidWctcmVsYXRlZCBvcHRpb24gbGlrZSB0aGlzLiBCeSBleGFtaW5pbmcgdGhhdCBmaWxlLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBgVEVTVF9ITU1gIGFjdHVhbGx5ICpkb2VzKiwgaG93IGl0JiMzOTtzIHVzZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBlbmFibGVkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGNvZGUgdGhhdCYjMzk7cyB1c2luZyBpdC4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBjb25maWd1cmF0aW9uLXJlbGF0ZWQgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXG4tLVxubGliL0tjb25maWcuZGVidWctMzM1My1cbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVx0dHJpc3RhdGUgXCYjMzQ7VGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgVEVTVF9ITU0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O09rYXksIGBURVNUX0hNTWAgLSB0aGF0JiMzOTtzIGEga2V5IG1vZHVsZSwgb2J2aW91c2x5LiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgcnVubmluZyBpdCwgdHdlYWtpbmcgaXQsIG9yIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGEgdGhvcm91Z2ggZGVwZW5kZW5jeSBjaGVjay4gTm8gcG9pbnQgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlIHRyb3VibGVzaG9vdGluZyB1bmV4cGVjdGVkIHJlc3VsdHMgaWYgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4mIzM0OwoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgbGlicmFyaWVzLCBtb2R1bGVzLCBhbmQgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBwcmVzZW50LCBjb3JyZWN0bHkgdmVyc2lvbmVkLCBhbmQgYWNjZXNzaWJsZS4gSXMgdGhlcmUgYSBkZWZpbmVkIGJ1aWxkIHByb2Nlc3Mgb3IgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IEkgbmVlZCB0byByZWZlciB0bz8gV2hhdCBhYm91dCBkYXRhIGZpbGVzPyBEb2VzIGl0IHJlbHkgb24gYW55IHNoYXJlZCBsaWJyYXJpZXMgb3IgY3VzdG9tIEMmIzQzOyYjNDM7IGNvZGUgdGhhdCYjMzk7cyBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgbW9kdWxlJiMzOTtzIG1hbmlmZXN0PyYjMzQ7IAoKRXNzZW50aWFsbHksICYjMzQ7SSYjMzk7bSBub3QgZ29pbmcgdG8gcHJvY2VlZCBiZWZvcmUgSSBoYXZlIGEgKnNvbGlkKiB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYFRFU1RfSE1NYCByZWxpZXMgdXBvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgZGVwZW5kZW5jaWVzIGZpbGUgdG8gY2hlY2sgb3IgYSBsaXN0IG9mIGltcG9ydHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUuJiMzNDsgRnJvbSB0aGVyZSwgSSB3aWxsIGxpa2VseSBmb3JtdWxhdGUgYSBwbGFuIHRvIHJ1biB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtURVNUX0hNTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzNDY9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzU0OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM1NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjk1MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgRGVidWcgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYFRFU1RfSE1NYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBleGFtaW5pbmcgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcG9zc2libHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBkZWJ1ZyBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgYFRFU1RfSE1NYCBpbmZsdWVuY2VzIHRoZSBidWlsZCBwcm9jZXNzLCB3aGF0IGZlYXR1cmVzIGl0IGVuYWJsZXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gdGhvcm91Z2hseSB0byBjb25maWRlbnRseSBjb25maWd1cmUgYW5kIHRyb3VibGVzaG9vdCBhbnkgSE1NIHJlbGF0ZWQgaXNzdWVzIHRoYXQgbWF5IGFyaXNlIGluIG15IHdvcmsuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgdGhlICYjMzk7d2hhdCYjMzk7IGluIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM1MDpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzUxOlx0XG4zMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzUzOlx0XG4zMzU0Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNTY6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNTc6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNTg6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzU5Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzYwOlx0XHRoZWxwXG4zMzYxOlx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM2MjpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzYzOlx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNjQ6XHRcbjMzNjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzNjY6XHRcbjMzNjc6XHRjb25maWcgVEVTVF9GUkVFX1BBR0VTXG4zMzY4Olx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IGZyZWVpbmcgcGFnZXNcJiMzNDtcbjMzNjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NTUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYFRFU1RfSE1NYCBoYXMgZGVwZW5kZW5jaWVzLCBzcGVjaWZpY2FsbHkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gTmF0dXJhbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCB0aHJlZSBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZyBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgc28gSSYjMzk7bGwgaW5jbHVkZSBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uIEkgcmVtZW1iZXIgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIGl0ICpjb3VsZCogYmUgYnVpbHQgYXMgYSBtb2R1bGUuIEhvd2V2ZXIsIFN5emthbGxlciB1c3VhbGx5IHdvcmtzIGJlc3Qgd2hlbiBvcHRpb25zIGFyZSBlaXRoZXIgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLiBTbywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgU3l6a2FsbGVyICpzaG91bGQqIGxvYWQgaXQgYXMgbG9uZyBhcyB0aGUgbW9kdWxlIGlzIHByZXNlbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhcm91bmQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBtbS9taWdyYXRlX2RldmljZS5jYC4gSG1tLCBJJiMzOTtkIGJldHRlciBjb25maXJtIHRoYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IGRlcGVuZGVuY3kuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2RldmljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDA3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLi4uIHRoYXQmIzM5O3MgdGhlIGtleSB0byBjb21waWxpbmcgYG1pZ3JhdGVfZGV2aWNlLmNgLiBNYWtlcyBzZW5zZSwgdGhlIGZpbGUgbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkZXBlbmRlbmNpZXMgKmVuYWJsZSogdGhpcyBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgdG8gc2VlIHdoYXQgcHVsbHMgaXQgaW4uIFdoYXQmIzM5O3MgdXBzdHJlYW0gdGhhdCBtYWtlcyB0aGlzIHBvc3NpYmxlPyBMZXQmIzM5O3MgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gR290dGEgZGlnIGEgbGl0dGxlIGRlZXBlciBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY5Nj1jb25maWcgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02OTktXG5tbS9LY29uZmlnOjcwMDpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZy03MDEtXHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjkxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGV2aWNlIE1pZ3JhdGlvbiBMb2dpYyBGbG93KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBERVZJQ0VfTUlHUkFUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gYnJlYWsgdGhhdCBkb3duLiBJdCYjMzk7cyBjbGVhcmx5IGEgY29tYmluYXRpb246IGl0ICptdXN0KiBpbnZvbHZlIGEgYE1JR1JBVElPTmAgcHJvY2VzcyBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYSBgWk9ORV9ERVZJQ0VgLiBGaW5lLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTWFrZXMgc2Vuc2UgdG8gYmUgZXhwbGljaXQgYWJvdXQgdGhlIHNjb3BlLgoKTm93LCB3aGVyZSBkbyB3ZSBnbyBmcm9tIGhlcmU/IExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0IGRlZmluZXMgYSBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbXBvbmVudCBpbiBkZXRhaWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERFVklDRV9NSUdSQVRJT05gLiBXaGF0IGRvZXMgdGhhdCB6b25lIHJlcHJlc2VudD8gV2hhdCBhcmUgdGhlIGtleSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHdpdGhpbiB0aGF0IHpvbmU/IFRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscywgc28gbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWk9ORV9ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDYxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRvdWJsZS1DaGVja2luZyB0aGUgYERFVklDRV9QUklWQVRFYCBWYXJpYWJsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYERFVklDRV9QUklWQVRFYCB2YXJpYWJsZS4gSXQmIzM5O3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBXZSYjMzk7dmUgZ290IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSwgYnV0IHdpdGggb3VyIGxldmVsIG9mIGNvbXBsZXhpdHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgd2UmIzM5O3JlIHN0aWxsIGhhbmRsaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGNvcnJlY3RseS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIGhvdyBgREVWSUNFX1BSSVZBVEVgIGludGVyYWN0cyB3aXRoIHRoZSBzZWN1cml0eSBjb250ZXh0IGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgZGV2aWNlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgYXJlIHN0aWxsIGFzIGFudGljaXBhdGVkIGFuZCBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cywgcGFydGljdWxhcmx5IGFyb3VuZCBwcml2aWxlZ2UgZXNjYWxhdGlvbiBvciBkYXRhIGxlYWthZ2UuIEdpdmVuIHRoZSBzZW5zaXRpdml0eSBvZiB0aGUgZGF0YSB0aGF0IG1pZ2h0IGJlIGFzc29jaWF0ZWQgd2l0aCBpdCwgSSB3YW50IHRvIGJlIDEwMCUgY2VydGFpbiB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGxhc3QgcmV2aXNpb24gdG8gdGhlIGZpcm13YXJlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50cyBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHNwb3QtY2hlY2sgd2l0aCB0aGUgZGVidWdnZXIgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIGFib3V0IG1haW50YWluaW5nIHRoYXQgY3JpdGljYWwgbGV2ZWwgb2Ygcmlnb3IsIG5vdCBqdXN0IGFzc3VtaW5nIGl0JiMzOTtzIHNvbGlkIGJlY2F1c2UgaXQgKnNob3VsZCogYmUuIEl0JiMzOTtzIG15IGd1dCB0ZWxsaW5nIG1lIHRvIG1ha2Ugc3VyZSwgaXQganVzdCBuZXZlciBodXJ0cyB0byBiZSBleHRyYSBjYXV0aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTc0CgkJCQkJCQlvdXRwdXQ6IDMwNQoJCQkJCQkJdGhvdWdodHM6IDE3NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTt2ZSBnb3QgZGVwZW5kZW5jaWVzLiBgREVWSUNFX1BSSVZBVEVgIHJlbGllcyBvbiBgWk9ORV9ERVZJQ0VgLiBJZiBgVEVTVF9ITU1gIGlzIGVuYWJsZWQsIHdlJiMzOTtyZSBhbHNvIHB1bGxpbmcgaW4gYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgSSBzaG91bGQgYmUgdXNpbmcgZm9yIHRoaXMgbXVzdCBpbmNsdWRlIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUlHUkFUSU9OYC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhlIGBkcm1fcGFnZW1hcC5jYCBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBkcm1fZ3B1c3ZtYCwgd2hpY2ggdGhlIGB4ZWAgZHJpdmVyIHV0aWxpemVzLiBTaW5jZSB3ZSYjMzk7cmUgbm90IGZ1enppbmcgdGhlIGB4ZWAgZHJpdmVyLCB0aGF0JiMzOTtzIGxpa2VseSBhIGRlYWQgZW5kIGZvciBvdXIgcHVycG9zZXMuIEhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbnMgZm9yIGBtaWdyYXRlX2RldmljZV9wYWdlc2AsIGBtaWdyYXRlX2RldmljZV9yYW5nZWAsIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgYHRlc3RfaG1tLmNgIG1vZHVsZSwgd2hpY2ggaXMgYWN0aXZlbHkgZnV6emVkIGJ5IFN5emthbGxlci4gVGhlc2UgY2hhbmdlcyBmb2N1cyBvbiBoYW5kbGluZyBUSFAgc3BsaXR0aW5nIGR1cmluZyBkZXZpY2UgbWlncmF0aW9uIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhlbSBvciBhbGxvY2F0aW9uIGZhaWxzLiBGdW5jdGlvbmFsbHkgdGhhdCYjMzk7cyBwZXJmZWN0IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLCBhbmQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCwgc2luY2UgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGNhbGxlZCBmcm9tIHRoZXJlIGFzIHdlbGwuIFdhaXQsIGBtaWdyYXRlX3ZtYV9wYWdlc2AgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgYHRlc3RfaG1tLmNgIHNwZWNpZmljYWxseSBpbiBmdW5jdGlvbnMgc3VjaCBhcyBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAgYW5kIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCB3aGVyZWFzIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgaXMgdXNlZCBieSBgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmtgLiBTbywgYWxsIG9mIHRoZW0gYXJlIHJlYWNoYWJsZS4KClF1aWNrIHNhbml0eSBjaGVjazogaXMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBzdGF0aWM/IFllcywgaXQgaXMuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0OiBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGUgYGRybV9wYWdlbWFwLmNgIGNvZGUgbWlnaHQgYmUgcmVhY2hhYmxlIHZpYSBhbm90aGVyIHJvdXRlLiBPa2F5LCBgZHJtX3BhZ2VtYXAuY2AgaGFzIGBkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdGAgd2hpY2ggcmVnaXN0ZXJzIGEgZGVidWdmcyBmaWxlLiBBaCwgSSBzZWU6IGBkcm1fcGFnZW1hcC5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5IHdpdGggYENPTkZJR19aT05FX0RFVklDRWAgZW5hYmxlZCBhbmQgYGRybV9ncHVzdm1faGVscGVyYCBzZWxlY3RlZCwgd2hpY2ggaW4gdHVybiBpcyBzZWxlY3RlZCBieSBgQ09ORklHX0RSTV9HUFVTVk1gIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAuIFNvIGlmIGBDT05GSUdfRFJNX1hFX0dQVVNWTWAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYGRybV9wYWdlbWFwLmNgIHdvbiYjMzk7dCBiZSBjb21waWxlZC4gQ291bGQgYENPTkZJR19EUk1fWEVgIGJlIGVuYWJsZWQgaW4gU3l6a2FsbGVyPyBVc3VhbGx5IGl0IGVuYWJsZXMgYWxsIGRyaXZlcnMsIHNvIHByb2JhYmx5LiBJZiBpdCBpcyBlbmFibGVkLCBgZHJtX3BhZ2VtYXAuY2AgKndvdWxkKiBjb21waWxlLiBCdXQgZXZlbiB0aGVuLCB0aG9zZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLiBTaW5jZSB3ZSYjMzk7cmUgdW5saWtlbHkgdG8gaGF2ZSBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSwgdGhhdCBkcml2ZXIgd29uJiMzOTt0IHByb2JlLCBhbmQgdGhvc2UgZnVuY3Rpb25zIHdvdWxkbiYjMzk7dCBiZSBjYWxsZWQuIFNvLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYHRlc3RfaG1tLmNgLgoKVG8gc3VtbWFyaXplOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBoYW5kbGUgVEhQIHNwbGl0dGluZyBkdXJpbmcgZGV2aWNlIG1pZ3JhdGlvbi4gSXQgYWxzbyB0b3VjaGVzIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgZm9yIGZhdWx0IGluamVjdGlvbiB0ZXN0aW5nLCB0aG91Z2ggdGhhdCBwYXJ0IGlzIHVucmVhY2hhYmxlIGZvciB1cy4gVGhlIGNvcmUgTU0gY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLCBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBUaGUgZHJpdmVyIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHdoaWNoIHRyaWdnZXJzIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AuCgpTbyB0aGUgZm9sbG93aW5nIGBFbmFibGVDb25maWdzYCBhcmUgd2hhdCBJIG5lZWQ6Ci0gYFRFU1RfSE1NYAotIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKLSBgREVWSUNFX1BSSVZBVEVgCi0gYFpPTkVfREVWSUNFYAotIGBNSUdSQVRJT05gCgpNeSBtYWluIEZvY3VzU3ltYm9scyBhcmU6Ci0gYG1pZ3JhdGVfdm1hX3BhZ2VzYAotIGBtaWdyYXRlX2RldmljZV9wYWdlc2AKLSBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgCi0gYG1pZ3JhdGVfZGV2aWNlX3BmbnNgCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWlncmF0ZV92bWFfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGFnZXMmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9kZXZpY2VfcGZucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1NIGRldmljZSBtaWdyYXRpb24gbG9naWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIHN1cHBvcnQgc3BsaXR0aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdoZW4gbWlncmF0aW5nIHRvIGRldmljZSBtZW1vcnkgaWYgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgVEhQcyBvciB0aGUgYWxsb2NhdGlvbiBmYWlscy4gSXQgYWxzbyBhZGRzIGZhdWx0IGluamVjdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIHRvIHRlc3QgdGhpcyBmYWxsYmFjay4gV2hpbGUgdGhlIERSTSBwYWdlbWFwIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBYZSBkcml2ZXIgKHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBpcyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzKSwgdGhlIGNvcmUgTU0gY2hhbmdlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYHRlc3RfaG1tYCBwc2V1ZG8tZGV2aWNlIGRyaXZlci4gU3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBgdGVzdF9obW1gLCB3aGljaCBjYW4gbWFwIFRIUHMgYW5kIG1pZ3JhdGUgdGhlbSB0byBkZXZpY2UgbWVtb3J5LCB0cmlnZ2VyaW5nIHRoZSBtb2RpZmllZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHBhdGhzLiBUaGUgYHRlc3RfaG1tYCBkcml2ZXIgZXZlbiBoYXMgYSBzcGVjaWZpYyBmbGFnIChgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCkgdG8gc2ltdWxhdGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggd2lsbCBkaXJlY3RseSBleGVyY2lzZSB0aGUgbmV3IFRIUCBzcGxpdHRpbmcgZmFsbGJhY2sgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pZ3JhdGVfdm1hX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BhZ2VzJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3JhbmdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfZGV2aWNlX3BmbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNTSBkZXZpY2UgbWlncmF0aW9uIGxvZ2ljIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBzdXBwb3J0IHNwbGl0dGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aGVuIG1pZ3JhdGluZyB0byBkZXZpY2UgbWVtb3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBzdXBwb3J0IFRIUHMgb3IgdGhlIGFsbG9jYXRpb24gZmFpbHMuIEl0IGFsc28gYWRkcyBmYXVsdCBpbmplY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCB0byB0ZXN0IHRoaXMgZmFsbGJhY2suIFdoaWxlIHRoZSBEUk0gcGFnZW1hcCBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGUgSW50ZWwgWGUgZHJpdmVyICh3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgaXMgbm90IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyksIHRoZSBjb3JlIE1NIGNoYW5nZXMgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIuIFN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgYHRlc3RfaG1tYCwgd2hpY2ggY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgdHJpZ2dlcmluZyB0aGUgbW9kaWZpZWQgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBwYXRocy4gVGhlIGB0ZXN0X2htbWAgZHJpdmVyIGV2ZW4gaGFzIGEgc3BlY2lmaWMgZmxhZyAoYEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ2ApIHRvIHNpbXVsYXRlIGFsbG9jYXRpb24gZmFpbHVyZXMsIHdoaWNoIHdpbGwgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBUSFAgc3BsaXR0aW5nIGZhbGxiYWNrIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6MzIuOTYzMjk1MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY2MTc4ODUyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9wYWdlc1wiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcmFuZ2VcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BmbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1NIGRldmljZSBtaWdyYXRpb24gbG9naWMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIHN1cHBvcnQgc3BsaXR0aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdoZW4gbWlncmF0aW5nIHRvIGRldmljZSBtZW1vcnkgaWYgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgVEhQcyBvciB0aGUgYWxsb2NhdGlvbiBmYWlscy4gSXQgYWxzbyBhZGRzIGZhdWx0IGluamVjdGlvbiBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIHRvIHRlc3QgdGhpcyBmYWxsYmFjay4gV2hpbGUgdGhlIERSTSBwYWdlbWFwIGNoYW5nZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBYZSBkcml2ZXIgKHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBpcyBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzKSwgdGhlIGNvcmUgTU0gY2hhbmdlcyBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSB0aGUgYHRlc3RfaG1tYCBwc2V1ZG8tZGV2aWNlIGRyaXZlci4gU3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBgdGVzdF9obW1gLCB3aGljaCBjYW4gbWFwIFRIUHMgYW5kIG1pZ3JhdGUgdGhlbSB0byBkZXZpY2UgbWVtb3J5LCB0cmlnZ2VyaW5nIHRoZSBtb2RpZmllZCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgIHBhdGhzLiBUaGUgYHRlc3RfaG1tYCBkcml2ZXIgZXZlbiBoYXMgYSBzcGVjaWZpYyBmbGFnIChgSE1NX0RNSVJST1JfRkxBR19GQUlMX0FMTE9DYCkgdG8gc2ltdWxhdGUgYWxsb2NhdGlvbiBmYWlsdXJlcywgd2hpY2ggd2lsbCBkaXJlY3RseSBleGVyY2lzZSB0aGUgbmV3IFRIUCBzcGxpdHRpbmcgZmFsbGJhY2sgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjMyLjk2MzMwMjU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMyNTkzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OTk1ZmY1YzliMjdlMTgzNTgwMWExYmE4YWQ1MjE5YjRhM2I3MGNkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xcbmluZGV4IDg5MmIzMjVmYTk5YjguLjZhZThjOWFhMzZjY2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNcXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAgKiBDb3B5cmlnaHQgwqkgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1mZW5jZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG5AQCAtMTIsNiArMTMsMjcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcF91dGlsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX3ByaW50LmhcXHUwMDNlXFxuIFxcbisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmF1bHQtaW5qZWN0LmhcXHUwMDNlXFxuK3N0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcXG4rXFxuKy8qXFxuKyAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxcbisgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSwgZXhlcmNpc2luZyB0aGUgb3JkZXItMCBmYWxsYmFja1xcbisgKiAoYW5kLCBpbiB0dXJuLCB0aGUgVEhQIHNwbGl0IHBhdGggaW4gX19taWdyYXRlX2RldmljZV9wYWdlcygpKSB3aXRob3V0XFxuKyAqIGhhdmluZyB0byBkcml2ZSB0aGUgc3lzdGVtIGludG8gYWN0dWFsIG1lbW9yeSBwcmVzc3VyZS5cXG4rICovXFxuK3N0YXRpYyBib29sIGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzaG91bGRfZmFpbChcXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogRE9DOiBPdmVydmlld1xcbiAgKlxcbkBAIC0zODMsNiArNDA1LDU4IEBAIGRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxcbisgKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxcbisgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcXG4rICogQGRzdF9tcGZuOiBEZXN0aW5hdGlvbiBhcnJheSBvZiBtaWdyYXRlIFBGTnNcXG4rICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBhcnJheXNcXG4rICpcXG4rICogUG9wdWxhdGUgQHBhZ2VzIHdpdGggdGhlIGRldmljZSBwYWdlcyB0aGUgY29weSBjYWxsYmFjayBpcyB0byByZWFkIGZyb20uXFxuKyAqXFxuKyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXFxuKyAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxcbisgKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcXG4rICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cXG4rICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXFxuKyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCB0aGUgc291cmNlIGZvbGlvIGl0c2VsZiBpcyBvbmx5IHNwbGl0IGxhdGVyLCBieVxcbisgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXFxuKyAqIGRldGVjdCB0aGUgZGVtb3Rpb24gLSB0aGUgZGVzdGluYXRpb24gaGFzIHRvIGJlIGluc3BlY3RlZCBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqc3JjX21wZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmRzdF9tcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjX21wZm5baV0pO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGosIG5yO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlKSk7XFxuK1xcdFxcdG5yID0gTlJfUEFHRVMob3JkZXIpO1xcbitcXG4rXFx0XFx0aWYgKG9yZGVyIFxcdTAwMjZcXHUwMDI2ICEoZHN0X21wZm5baV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IGkgKyBqIFxcdTAwM2MgbnBhZ2VzOyBqKyspXFxuK1xcdFxcdFxcdFxcdHBhZ2VzW2kgKyBqXSA9IGZvbGlvX3BhZ2UocGFnZV9mb2xpbyhwYWdlKSwgaik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHBhZ2VzW2ldID0gcGFnZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aSArPSBucjtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXFxuICAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIG1hcHBlZFxcbkBAIC04NzUsNiArOTQ5LDcgQEAgc3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKnNyY19wYWdlO1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbitcXHRcXHRnZnBfdCBnZnAgPSBHRlBfSElHSFVTRVI7XFxuIFxcbiBcXHRcXHRpZiAoIShzcmNfbXBmbltpXSBcXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpKVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuQEAgLTg5MSwxMSArOTY2LDUzIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbiBcXG4gXFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHNyY19wYWdlKSk7XFxuIFxcbi1cXHRcXHQvKiBUT0RPOiBTdXBwb3J0IGZhbGxiYWNrIHRvIHNpbmdsZSBwYWdlcyBpZiBUSFAgYWxsb2NhdGlvbiBmYWlscyAqL1xcbi1cXHRcXHRpZiAodmFzKVxcbi1cXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhHRlBfSElHSFVTRVIsIG9yZGVyLCB2YXMsIGFkZHIpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxcbitcXHRcXHQgKiBwYWdlLCBQTUQgYWxpZ25lZCBhbmQgZmxhZ2dlZCBNSUdSQVRFX1BGTl9DT01QT1VORDogYW55dGhpbmdcXG4rXFx0XFx0ICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5XFxuK1xcdFxcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcXG4rXFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbitcXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG4rXFx0XFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdFdBUk5fT05fT05DRShvcmRlciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxcbitcXHRcXHRcXHQgICAgICAhKHNyY19tcGZuW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSk7XFxuK1xcbitcXHRcXHRpZiAob3JkZXIpXFxuK1xcdFxcdFxcdGdmcCB8PSBfX0dGUF9OT1dBUk47XFxuK1xcbitcXHRcXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKCkpXFxuK1xcdFxcdFxcdGZvbGlvID0gTlVMTDtcXG4rXFx0XFx0ZWxzZSBpZiAodmFzKVxcbitcXHRcXHRcXHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2MoR0ZQX0hJR0hVU0VSLCBvcmRlcik7XFxuK1xcdFxcdFxcdGZvbGlvID0gZm9saW9fYWxsb2MoZ2ZwLCBvcmRlcik7XFxuK1xcbitcXHRcXHRpZiAoIWZvbGlvIFxcdTAwMjZcXHUwMDI2IG9yZGVyKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEhpZ2hlci1vcmRlciBhbGxvY2F0aW9uIGZhaWxlZCwgZmFsbCBiYWNrIHRvXFxuK1xcdFxcdFxcdCAqIG9yZGVyLTAgYWxsb2NhdGlvbnMgZm9yIHRoZSBlbnRpcmUgcmFuZ2UgY292ZXJlZFxcbitcXHRcXHRcXHQgKiBieSB0aGUgb3JpZ2luYWwgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb24sIHdpdGhvdXRcXG4rXFx0XFx0XFx0ICogc2V0dGluZyBNSUdSQVRFX1BGTl9DT01QT1VORCwgdW50aWwgd2UgbW92ZSBwYXN0XFxuK1xcdFxcdFxcdCAqIHRoYXQgcmFuZ2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yID0gTlJfUEFHRVMob3JkZXIpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGo7XFxuK1xcbitcXHRcXHRcXHRnZnAgXFx1MDAyNj0gfl9fR0ZQX05PV0FSTjtcXG4rXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IGkgXFx1MDAzYyBucGFnZXM7IGorKywgaSsrLCBhZGRyICs9IFBBR0VfU0laRSkge1xcbitcXHRcXHRcXHRcXHRmb2xpbyA9IHZhcyA/XFxuK1xcdFxcdFxcdFxcdFxcdHZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOlxcbitcXHRcXHRcXHRcXHRcXHRmb2xpb19hbGxvYyhnZnAsIDApO1xcbitcXHRcXHRcXHRcXHRpZiAoIWZvbGlvKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcbitcXHRcXHRcXHRcXHRwYWdlID0gZm9saW9fcGFnZShmb2xpbywgMCk7XFxuK1xcdFxcdFxcdFxcdG1wZm5baV0gPSBtaWdyYXRlX3BmbihwYWdlX3RvX3BmbihwYWdlKSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmICghZm9saW8pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9wYWdlcztcXG5AQCAtOTQwLDExICsxMDU3LDExIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbiBcXHRcXHRpZiAoIXBhZ2UpXFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9wdXQ7XFxuIFxcbitcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xcbitcXG4gXFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuIFxcdFxcdG1wZm5baV0gPSAwO1xcbiBcXG4tXFx0XFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4tXFxuIG5leHRfcHV0OlxcbiBcXHRcXHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcXG4gXFx0fVxcbkBAIC0xMTIwLDcgKzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbiBcXHR1bnNpZ25lZCBsb25nICpzcmMsICpkc3Q7XFxuIFxcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7XFxuIFxcdHZvaWQgKmJ1ZjtcXG4tXFx0aW50IGksIGVyciA9IDA7XFxuK1xcdGludCBlcnIgPSAwO1xcbiBcXHR1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyO1xcbiBcXG4gXFx0bnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5AQCAtMTE2MCwyNyArMTI3NywxOSBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maW5hbGl6ZTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7KSB7XFxuLVxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XFxuLVxcbi1cXHRcXHRwYWdlc1tpXSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2Uoc3JjW2ldKTtcXG4tXFx0XFx0aWYgKHBhZ2VzW2ldKVxcbi1cXHRcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcXG4tXFxuLVxcdFxcdGkgKz0gTlJfUEFHRVMob3JkZXIpO1xcbi1cXHR9XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBzcmMsIGRzdCwgbnBhZ2VzKTtcXG4gXFxuIFxcdGVyciA9IG9wcy1cXHUwMDNlY29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZmluYWxpemU7XFxuIFxcbiBlcnJfZmluYWxpemU6XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcXG4rXFx0XFx0XFx0XFx0XFx0RE1BX0ZST01fREVWSUNFLCBcXHUwMDI2c3RhdGUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIGRzdCk7XFxuIFxcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xcbiBcXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmMsIGRzdCwgbnBhZ2VzKTtcXG4tXFx0ZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNlZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRETUFfRlJPTV9ERVZJQ0UsIFxcdTAwMjZzdGF0ZSk7XFxuIFxcbiBlcnJfZnJlZTpcXG4gXFx0a3ZmcmVlKGJ1Zik7XFxuQEAgLTEyMzUsNyArMTM0NCw3IEBAIHN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4gXFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcbiBcXHR2b2lkICpidWY7XFxuLVxcdGludCBpLCBlcnIgPSAwO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdHpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcXG4gXFx0aWYgKHRpbWVfYmVmb3JlNjQoZ2V0X2ppZmZpZXNfNjQoKSwgemRkLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbi1cXHUwMDNldGltZXNsaWNlX2V4cGlyYXRpb24pKVxcbkBAIC0xMjkwLDI5ICsxMzk5LDIyIEBAIHN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZmluYWxpemU7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOykge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSAwO1xcbi1cXG4tXFx0XFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcXG4tXFx0XFx0aWYgKHBhZ2VzW2ldKVxcbi1cXHRcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcXG4tXFxuLVxcdFxcdGkgKz0gTlJfUEFHRVMob3JkZXIpO1xcbi1cXHR9XFxuK1xcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBucGFnZXMpO1xcbiBcXG4gXFx0ZXJyID0gb3BzLVxcdTAwM2Vjb3B5X3RvX3JhbShwYWdlcywgcGFnZW1hcF9hZGRyLCBucGFnZXMsIE5VTEwpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9maW5hbGl6ZTtcXG4gXFxuIGVycl9maW5hbGl6ZTpcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0ZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfcGFnZXMobnBhZ2VzLCBtaWdyYXRlLmRzdCk7XFxuLVxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG4tXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbiBcXHRpZiAoZGV2KVxcbiBcXHRcXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bnBhZ2VzLCBETUFfRlJPTV9ERVZJQ0UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzdGF0ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbitcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuK1xcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFxcdTAwMjZtaWdyYXRlKTtcXG4gZXJyX2ZyZWU6XFxuIFxcdGt2ZnJlZShidWYpO1xcbiBlcnJfb3V0OlxcbkBAIC0xNDc2LDYgKzE1NzgsMTYgQEAgdm9pZCBkcm1fcGFnZW1hcF9kZXN0cm95KHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsIGJvb2wgaXNfYXRvbWljX29yX3JlY2xhaW1cXG4gXFx0XFx0a2ZyZWUoZHBhZ2VtYXApO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9faW5pdCBkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdCh2b2lkKVxcbit7XFxuKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKVxcbitcXHRmYXVsdF9jcmVhdGVfZGVidWdmc19hdHRyKFxcXCJkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RcXFwiLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZtaWdyYXRlX3RvX3JhbV9mYXVsdF9pbmplY3QpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rbW9kdWxlX2luaXQoZHJtX3BhZ2VtYXBfbW9kdWxlX2luaXQpO1xcbitcXG4gc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNmRybV9wYWdlbWFwX3dvcmspO1xcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlX2RldmljZS5jIGIvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbmluZGV4IDkwOGQyZDRlYzQzYWMuLmFlMTdiZDUxNmQyNDggMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtODk5LDIyICs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbWlncmF0ZV92bWFfc3BsaXRfcG1kX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIFBWTVdfU1lOQyB8IFBWTVdfTUlHUkFUSU9OKTtcXG4rXFxuK1xcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG4rXFx0XFx0aWYgKHB2bXcucHRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuK1xcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRGVtb3RlIHdpdGggZnJlZXplID0gZmFsc2U6IHRoZSBQTUQgYWxyZWFkeSBob2xkcyBhXFxuK1xcdFxcdCAqIG1pZ3JhdGlvbiBlbnRyeSwgc28gX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoKSBjcmVhdGVzIFBURVxcbitcXHRcXHQgKiBzaXplZCBtaWdyYXRpb24gZW50cmllcyBmcm9tIGl0IGFuZCBsZWF2ZXMgdGhlIHJlZmNvdW50XFxuK1xcdFxcdCAqIGFsb25lLiBUaGVyZSBpcyBhdCBtb3N0IG9uZSBQTUQgbWFwcGluZyBAZm9saW8gcGVyIFZNQSwgc29cXG4rXFx0XFx0ICogc3RvcCB0aGUgd2FsayBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3BsaXRfaHVnZV9wbWRfYWRkcmVzcyh2bWEsIGFkZHIsIGZhbHNlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZW1vdGUgZXZlcnkgUE1EIHNpemVkIG1pZ3JhdGlvbiBlbnRyeSB0aGF0IG1hcHMgQGZvbGlvIHRvIFBURSBzaXplZCBvbmVzLlxcbisgKlxcbisgKiBtaWdyYXRlX2RldmljZV91bm1hcCgpIHVubWFwcyB3aXRoIHRyeV90b19taWdyYXRlKGZvbGlvLCAwKSwgaS5lLiB3aXRob3V0XFxuKyAqIFRUVV9TUExJVF9IVUdFX1BNRCwgc28gYSBmb2xpbyB0aGF0IHdhcyBQTUQgbWFwcGVkIGluIHNldmVyYWwgVk1BcyAtLSBhZnRlclxcbisgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxcbisgKiBvZiB0aGVtLiBmb2xpb19zcGxpdF91bm1hcHBlZCgpIGJlbG93IGRvZXMgbm90IGNhcmUsIGl0IG9ubHkgbG9va3MgYXQgdGhlXFxuKyAqIHJlZmNvdW50LCBzbyBzcGxpdHRpbmcgdGhlIGZvbGlvIHdpdGhvdXQgZGVtb3RpbmcgYWxsIG9mIHRob3NlIGZpcnN0IHdvdWxkXFxuKyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cXG4rICogcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgdHJpcHMgb3ZlciB0aGF0IGluIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xcbitcXHRcXHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxcbitcXHR9O1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG8gbm90IHBhc3MgLmFub25fbG9jazogZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKCkgcmVxdWlyZXNcXG4rXFx0ICogZm9saW9fbWFwcGVkKCksIGFuZCBAZm9saW8gaXMgYWxyZWFkeSBmdWxseSB1bm1hcHBlZCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0cm1hcF93YWxrKGZvbGlvLCBcXHUwMDI2cndjKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGlkeCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpZHgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdGJvb2wgZmF1bHRfZm9saW87XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogdGFrZSBhIHJlZmVyZW5jZSwgc2luY2Ugc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHdpdGggZnJlZXplID0gdHJ1ZVxcbi1cXHQgKiBkcm9wcyBhIHJlZmVyZW5jZSBhdCB0aGUgZW5kLlxcbitcXHQgKiBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3MoKSB3YWxrcyB0aGUgcm1hcCwgYW5kXFxuK1xcdCAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdFxcbitcXHQgKiBpcyBub3QgYW5vbnltb3VzLiBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgZG9lcyBub3QgY2hlY2sgdGhlXFxuK1xcdCAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKVxcbitcXHQgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS5cXG4gXFx0ICovXFxuLVxcdGZvbGlvX2dldChmb2xpbyk7XFxuLVxcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cXHUwMDNldm1hLCBhZGRyLCB0cnVlKTtcXG4rXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgQ1BVIGZhdWx0IG9uIGEgZGV2aWNlIHByaXZhdGUgUE1EIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiB0aGVcXG4rXFx0ICogZm9saW8sIHRha2VuIGJ5IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKCkuIGZvbGlvX3NwbGl0X3VubWFwcGVkKClcXG4rXFx0ICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5c1xcbitcXHQgKiBmYWlsIHdpdGggLUVBR0FJTiB3aGlsZSB0aGlzIGZhdWx0IHJlZmVyZW5jZSBpcyBoZWxkLlxcbitcXHQgKlxcbitcXHQgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1EXFxuK1xcdCAqIGVudHJ5LCBzbyBpdCBpcyBhbHdheXMgdGhlIGhlYWQgcGFnZSBvZiBAZm9saW8sIGFuZCB0aGVyZWZvcmUgYWx3YXlzXFxuK1xcdCAqIGVuZHMgdXAgaW4gdGhlIGhlYWQgZm9saW8gYWZ0ZXIgYW4gdW5pZm9ybSBzcGxpdCB0byBvcmRlciAwLiBEcm9wXFxuK1xcdCAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpb1xcbitcXHQgKiBhZnRlcndhcmRzLCBsZWF2aW5nIHRoZSByZWZlcmVuY2UgZXhhY3RseSB3aGVyZSBpdCBpcyBleHBlY3RlZCB0byBiZVxcbitcXHQgKiByZWxlYXNlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlXFxuK1xcdCAqIHJlZmVyZW5jZSB0YWtlbiBieSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgaXMgc3RpbGwgaGVsZC5cXG4rXFx0ICovXFxuK1xcdGZhdWx0X2ZvbGlvID0gbWlncmF0ZS1cXHUwMDNlZmF1bHRfcGFnZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRwYWdlX2ZvbGlvKG1pZ3JhdGUtXFx1MDAzZWZhdWx0X3BhZ2UpID09IGZvbGlvO1xcbitcXG4rXFx0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcXG4rXFxuK1xcdGlmIChmYXVsdF9mb2xpbylcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0cmV0ID0gZm9saW9fc3BsaXRfdW5tYXBwZWQoZm9saW8sIDApO1xcbitcXHRpZiAoZmF1bHRfZm9saW8pXFxuK1xcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRtaWdyYXRlLVxcdTAwM2VzcmNbaWR4XSBcXHUwMDI2PSB+TUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxuQEAgLTkzNSw3ICsxMDE3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTEwMyw3ICsxMTg1LDYgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4gXFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqO1xcbiBcXHRib29sIG5vdGlmaWVkID0gZmFsc2U7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7ICkge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaV0pO1xcbkBAIC0xMTc3LDEyICsxMjU4LDE4IEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuIFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRuciA9IDEgXFx1MDAzY1xcdTAwM2MgZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXHRcXHRcXHRcXHRhZGRyID0gbWlncmF0ZS1cXHUwMDNlc3RhcnQgKyBpICogUEFHRV9TSVpFO1xcbi1cXHRcXHRcXHRcXHRpZiAobWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8obWlncmF0ZSwgaSwgYWRkciwgZm9saW8pKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcXG4gXFx0XFx0XFx0XFx0XFx0c3JjX3BmbnNbaV0gXFx1MDAyNj0gfihNSUdSQVRFX1BGTl9NSUdSQVRFIHxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcXG4gXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiByZXNldCBuciBzbyB0aGF0IG9ubHkgZmlyc3QgYWZ0ZXItc3BsaXQgZm9saW9cXG4rXFx0XFx0XFx0XFx0ICogaXMgcHJvY2Vzc2VkIGJlbG93XFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpO1xcbitcXHRcXHRcXHRcXHRuciA9IDE7XFxuIFxcdFxcdFxcdH0gZWxzZSBpZiAoKHNyY19wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0KGRzdF9wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCEoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG5AQCAtMTIyMiw2ICsxMzA5LDEyIEBAIHN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuIFxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhtaWdyYXRlX3Bmbl90b19wYWdlKHNyY19wZm5zW2kral0pKTtcXG4gXFx0XFx0XFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaStqXSkpO1xcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxcbitcXHRcXHRcXHQgKiBjYWNoZS4gUmVmcmVzaCB0aGUgc2F2ZWQgbWFwcGluZyBiZWZvcmUgbWlncmF0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbitcXG4gXFx0XFx0XFx0ciA9IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhtYXBwaW5nLCBuZXdmb2xpbywgZm9saW8sIGV4dHJhX2NudCk7XFxuIFxcdFxcdFxcdGlmIChyKVxcbiBcXHRcXHRcXHRcXHRzcmNfcGZuc1tpK2pdIFxcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xcbkBAIC0xNDAyLDcgKzE0OTUsNyBAQCBpbnQgbWlncmF0ZV9kZXZpY2VfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRcXHRpZiAobnIgXFx1MDAzZSAxKSB7XFxuIFxcdFxcdFxcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbi1cXHRcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgbnI7IGorKylcXG4rXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yIFxcdTAwMjZcXHUwMDI2IChpICsgaikgXFx1MDAzYyBucGFnZXM7IGorKylcXG4gXFx0XFx0XFx0XFx0c3JjX3BmbnNbaStqXSA9IDA7XFxuIFxcdFxcdFxcdGkgKz0gaiAtIDE7XFxuIFxcdFxcdFxcdHBmbiArPSBqIC0gMTtcXG5AQCAtMTQzNiw3ICsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbiBcXHRcXHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0XFx0aWYgKG5yIFxcdTAwM2UgMSkge1xcbiBcXHRcXHRcXHRzcmNfcGZuc1tpXSB8PSBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG4tXFx0XFx0XFx0Zm9yIChqID0gMTsgaiBcXHUwMDNjIG5yOyBqKyspXFxuK1xcdFxcdFxcdGZvciAoaiA9IDE7IGogXFx1MDAzYyBuciBcXHUwMDI2XFx1MDAyNiAoaSArIGopIFxcdTAwM2MgbnBhZ2VzOyBqKyspXFxuIFxcdFxcdFxcdFxcdHNyY19wZm5zW2kral0gPSAwO1xcbiBcXHRcXHRcXHRpICs9IGogLSAxO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjMzLjQyNzE3MjM4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NjE1Mzk5OTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODk5NWZmNWM5YjI3ZTE4MzU4MDFhMWJhOGFkNTIxOWI0YTNiNzBjZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMjM6MzY6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG5pbmRleCA4OTJiMzI1ZmE5OWI4Li42YWU4YzlhYTM2Y2NiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKiBDb3B5cmlnaHQgwqkgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWZlbmNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtMTIsNiArMTMsMjcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nkcm0vZHJtX3BhZ2VtYXBfdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHJtL2RybV9wcmludC5oXHUwMDNlXG4gXG4rI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mYXVsdC1pbmplY3QuaFx1MDAzZVxuK3N0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbitcbisvKlxuKyAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxuKyAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpLCBleGVyY2lzaW5nIHRoZSBvcmRlci0wIGZhbGxiYWNrXG4rICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxuKyAqIGhhdmluZyB0byBkcml2ZSB0aGUgc3lzdGVtIGludG8gYWN0dWFsIG1lbW9yeSBwcmVzc3VyZS5cbisgKi9cbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbit7XG4rXHRyZXR1cm4gc2hvdWxkX2ZhaWwoXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0LCAxKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuK1xuIC8qKlxuICAqIERPQzogT3ZlcnZpZXdcbiAgKlxuQEAgLTM4Myw2ICs0MDUsNTggQEAgZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKipcbisgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIC0gUG9wdWxhdGUgdGhlIHNvdXJjZSBwYWdlIGFycmF5XG4rICogQHBhZ2VzOiBBcnJheSBvZiBzb3VyY2UgcGFnZXMgdG8gcG9wdWxhdGVcbisgKiBAc3JjX21wZm46IFNvdXJjZSBhcnJheSBvZiBtaWdyYXRlIFBGTnNcbisgKiBAZHN0X21wZm46IERlc3RpbmF0aW9uIGFycmF5IG9mIG1pZ3JhdGUgUEZOc1xuKyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlcyBpbiB0aGUgYXJyYXlzXG4rICpcbisgKiBQb3B1bGF0ZSBAcGFnZXMgd2l0aCB0aGUgZGV2aWNlIHBhZ2VzIHRoZSBjb3B5IGNhbGxiYWNrIGlzIHRvIHJlYWQgZnJvbS5cbisgKlxuKyAqIEVudHJpZXMgYXJlIG5vcm1hbGx5IG9ubHkgcG9wdWxhdGVkIGF0IHRoZSBoZWFkIG9mIGVhY2ggc291cmNlIGZvbGlvLCB3aXRoXG4rICogdGhlIGNvcHkgY2FsbGJhY2sgZGVyaXZpbmcgdGhlIHJlc3Qgb2YgdGhlIGZvbGlvIGZyb20gdGhlIG9yZGVyIHJlY29yZGVkIGluXG4rICogdGhlIGNvcnJlc3BvbmRpbmcgZHJtX3BhZ2VtYXBfYWRkci4gVGhhdCBkb2VzIG5vdCB3b3JrIHdoZXJlXG4rICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcbisgKiBmb2xpbyB0byBvcmRlci0wIGRlc3RpbmF0aW9uIGZvbGlvczogdGhlIGRybV9wYWdlbWFwX2FkZHIgZW50cmllcyBhcmUgdGhlblxuKyAqIHBlci1wYWdlLCBhbmQgdGhlIGNvcHkgY2FsbGJhY2sgbmVlZHMgYSBzb3VyY2UgcGFnZSBmb3IgZWFjaCBvZiB0aGVtLlxuKyAqIFBvcHVsYXRlIGV2ZXJ5IGVudHJ5IGZvciB0aG9zZSByYW5nZXMuXG4rICpcbisgKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcbisgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIC8gbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSwgc28gaXRzIG9yZGVyIGNhbm5vdCBiZSB1c2VkIHRvXG4rICogZGV0ZWN0IHRoZSBkZW1vdGlvbiAtIHRoZSBkZXN0aW5hdGlvbiBoYXMgdG8gYmUgaW5zcGVjdGVkIGluc3RlYWQuXG4rICovXG4rc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcyxcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcmNfbXBmbixcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpkc3RfbXBmbixcbitcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7KSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfbXBmbltpXSk7XG4rXHRcdHVuc2lnbmVkIGludCBvcmRlciA9IDA7XG4rXHRcdHVuc2lnbmVkIGxvbmcgaiwgbnI7XG4rXG4rXHRcdGlmICghcGFnZSkge1xuK1x0XHRcdGkrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0XHRuciA9IE5SX1BBR0VTKG9yZGVyKTtcbitcbitcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiAhKGRzdF9tcGZuW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcbitcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgaSArIGogXHUwMDNjIG5wYWdlczsgaisrKVxuK1x0XHRcdFx0cGFnZXNbaSArIGpdID0gZm9saW9fcGFnZShwYWdlX2ZvbGlvKHBhZ2UpLCBqKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwYWdlc1tpXSA9IHBhZ2U7XG4rXHRcdH1cbitcbitcdFx0aSArPSBucjtcbitcdH1cbit9XG4rXG4gLyoqXG4gICogZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcygpIC0gVW5tYXAgcGFnZXMgcHJldmlvdXNseSBtYXBwZWQgZm9yIEdQVSBTVk0gbWlncmF0aW9uXG4gICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXG5AQCAtODc1LDYgKzk0OSw3IEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEwsICpzcmNfcGFnZTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbitcdFx0Z2ZwX3QgZ2ZwID0gR0ZQX0hJR0hVU0VSO1xuIFxuIFx0XHRpZiAoIShzcmNfbXBmbltpXSBcdTAwMjYgTUlHUkFURV9QRk5fTUlHUkFURSkpXG4gXHRcdFx0Z290byBuZXh0O1xuQEAgLTg5MSwxMSArOTY2LDUzIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFxuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8oc3JjX3BhZ2UpKTtcbiBcbi1cdFx0LyogVE9ETzogU3VwcG9ydCBmYWxsYmFjayB0byBzaW5nbGUgcGFnZXMgaWYgVEhQIGFsbG9jYXRpb24gZmFpbHMgKi9cbi1cdFx0aWYgKHZhcylcbi1cdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhHRlBfSElHSFVTRVIsIG9yZGVyLCB2YXMsIGFkZHIpO1xuK1x0XHQvKlxuK1x0XHQgKiBBIGxhcmdlIHNvdXJjZSBmb2xpbyBpcyBhbHdheXMgY29sbGVjdGVkIHdob2xlLCBhdCBpdHMgaGVhZFxuK1x0XHQgKiBwYWdlLCBQTUQgYWxpZ25lZCBhbmQgZmxhZ2dlZCBNSUdSQVRFX1BGTl9DT01QT1VORDogYW55dGhpbmdcbitcdFx0ICogZWxzZSBpcyBzcGxpdCBiZWZvcmUgaXQgcmVhY2hlcyB1cywgZWl0aGVyIGJ5XG4rXHRcdCAqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKCkgb3IsIGZvciB0aGUgZXZpY3Rpb24gcGF0aCwgYnlcbitcdFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxuK1x0XHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcbitcdFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRShvcmRlciBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIChzcmNfcGFnZSAhPSBmb2xpb19wYWdlKHBhZ2VfZm9saW8oc3JjX3BhZ2UpLCAwKSB8fFxuK1x0XHRcdCAgICAgICEoc3JjX21wZm5baV0gXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkpO1xuK1xuK1x0XHRpZiAob3JkZXIpXG4rXHRcdFx0Z2ZwIHw9IF9fR0ZQX05PV0FSTjtcbitcbitcdFx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8oKSlcbitcdFx0XHRmb2xpbyA9IE5VTEw7XG4rXHRcdGVsc2UgaWYgKHZhcylcbitcdFx0XHRmb2xpbyA9IHZtYV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCB2YXMsIGFkZHIpO1xuIFx0XHRlbHNlXG4tXHRcdFx0Zm9saW8gPSBmb2xpb19hbGxvYyhHRlBfSElHSFVTRVIsIG9yZGVyKTtcbitcdFx0XHRmb2xpbyA9IGZvbGlvX2FsbG9jKGdmcCwgb3JkZXIpO1xuK1xuK1x0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiBvcmRlcikge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogSGlnaGVyLW9yZGVyIGFsbG9jYXRpb24gZmFpbGVkLCBmYWxsIGJhY2sgdG9cbitcdFx0XHQgKiBvcmRlci0wIGFsbG9jYXRpb25zIGZvciB0aGUgZW50aXJlIHJhbmdlIGNvdmVyZWRcbitcdFx0XHQgKiBieSB0aGUgb3JpZ2luYWwgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb24sIHdpdGhvdXRcbitcdFx0XHQgKiBzZXR0aW5nIE1JR1JBVEVfUEZOX0NPTVBPVU5ELCB1bnRpbCB3ZSBtb3ZlIHBhc3RcbitcdFx0XHQgKiB0aGF0IHJhbmdlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHVuc2lnbmVkIGxvbmcgbnIgPSBOUl9QQUdFUyhvcmRlcik7XG4rXHRcdFx0dW5zaWduZWQgbG9uZyBqO1xuK1xuK1x0XHRcdGdmcCBcdTAwMjY9IH5fX0dGUF9OT1dBUk47XG4rXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IGkgXHUwMDNjIG5wYWdlczsgaisrLCBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7XG4rXHRcdFx0XHRmb2xpbyA9IHZhcyA/XG4rXHRcdFx0XHRcdHZtYV9hbGxvY19mb2xpbyhnZnAsIDAsIHZhcywgYWRkcikgOlxuK1x0XHRcdFx0XHRmb2xpb19hbGxvYyhnZnAsIDApO1xuK1x0XHRcdFx0aWYgKCFmb2xpbylcbitcdFx0XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuK1xuK1x0XHRcdFx0cGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIDApO1xuK1x0XHRcdFx0bXBmbltpXSA9IG1pZ3JhdGVfcGZuKHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbitcdFx0XHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKCFmb2xpbylcbiBcdFx0XHRnb3RvIGZyZWVfcGFnZXM7XG5AQCAtOTQwLDExICsxMDU3LDExIEBAIHN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuIFx0XHRpZiAoIXBhZ2UpXG4gXHRcdFx0Z290byBuZXh0X3B1dDtcbiBcbitcdFx0b3JkZXIgPSBmb2xpb19vcmRlcihwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcbiBcdFx0cHV0X3BhZ2UocGFnZSk7XG4gXHRcdG1wZm5baV0gPSAwO1xuIFxuLVx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZSkpO1xuLVxuIG5leHRfcHV0OlxuIFx0XHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcbiBcdH1cbkBAIC0xMTIwLDcgKzEyMzcsNyBAQCBpbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxuIFx0dW5zaWduZWQgbG9uZyAqc3JjLCAqZHN0O1xuIFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2VtYXBfYWRkcjtcbiBcdHZvaWQgKmJ1Zjtcbi1cdGludCBpLCBlcnIgPSAwO1xuK1x0aW50IGVyciA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQgPSAyO1xuIFxuIFx0bnBhZ2VzID0gZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbkBAIC0xMTYwLDI3ICsxMjc3LDE5IEBAIGludCBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKHNyY1tpXSk7XG4tXHRcdGlmIChwYWdlc1tpXSlcbi1cdFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8ocGFnZXNbaV0pKTtcbi1cbi1cdFx0aSArPSBOUl9QQUdFUyhvcmRlcik7XG4tXHR9XG4rXHRkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcyhwYWdlcywgc3JjLCBkc3QsIG5wYWdlcyk7XG4gXG4gXHRlcnIgPSBvcHMtXHUwMDNlY29weV90b19yYW0ocGFnZXMsIHBhZ2VtYXBfYWRkciwgbnBhZ2VzLCBOVUxMKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZpbmFsaXplO1xuIFxuIGVycl9maW5hbGl6ZTpcbitcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtX2FsbG9jYXRpb24tXHUwMDNlZGV2LCBwYWdlbWFwX2FkZHIsIGRzdCwgbnBhZ2VzLFxuK1x0XHRcdFx0XHRETUFfRlJPTV9ERVZJQ0UsIFx1MDAyNnN0YXRlKTtcbiBcdGlmIChlcnIpXG4gXHRcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgZHN0KTtcbiBcdG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKHNyYywgZHN0LCBucGFnZXMpO1xuIFx0bWlncmF0ZV9kZXZpY2VfZmluYWxpemUoc3JjLCBkc3QsIG5wYWdlcyk7XG4tXHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldm1lbV9hbGxvY2F0aW9uLVx1MDAzZWRldiwgcGFnZW1hcF9hZGRyLCBkc3QsIG5wYWdlcyxcbi1cdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFLCBcdTAwMjZzdGF0ZSk7XG4gXG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbkBAIC0xMjM1LDcgKzEzNDQsNyBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuIFx0dm9pZCAqYnVmO1xuLVx0aW50IGksIGVyciA9IDA7XG4rXHRpbnQgZXJyID0gMDtcbiBcbiBcdHpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcbiBcdGlmICh0aW1lX2JlZm9yZTY0KGdldF9qaWZmaWVzXzY0KCksIHpkZC1cdTAwM2VkZXZtZW1fYWxsb2NhdGlvbi1cdTAwM2V0aW1lc2xpY2VfZXhwaXJhdGlvbikpXG5AQCAtMTI5MCwyOSArMTM5OSwyMiBAQCBzdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczspIHtcbi1cdFx0dW5zaWduZWQgaW50IG9yZGVyID0gMDtcbi1cbi1cdFx0cGFnZXNbaV0gPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGUuc3JjW2ldKTtcbi1cdFx0aWYgKHBhZ2VzW2ldKVxuLVx0XHRcdG9yZGVyID0gZm9saW9fb3JkZXIocGFnZV9mb2xpbyhwYWdlc1tpXSkpO1xuLVxuLVx0XHRpICs9IE5SX1BBR0VTKG9yZGVyKTtcbi1cdH1cbitcdGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHBhZ2VzLCBtaWdyYXRlLnNyYywgbWlncmF0ZS5kc3QsXG4rXHRcdFx0XHRcdCAgICAgICBucGFnZXMpO1xuIFxuIFx0ZXJyID0gb3BzLVx1MDAzZWNvcHlfdG9fcmFtKHBhZ2VzLCBwYWdlbWFwX2FkZHIsIG5wYWdlcywgTlVMTCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9maW5hbGl6ZTtcbiBcbiBlcnJfZmluYWxpemU6XG4tXHRpZiAoZXJyKVxuLVx0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbi1cdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuLVx0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gXHRpZiAoZGV2KVxuIFx0XHRkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKGRldiwgcGFnZW1hcF9hZGRyLCBtaWdyYXRlLmRzdCxcbiBcdFx0XHRcdFx0XHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZzdGF0ZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyhucGFnZXMsIG1pZ3JhdGUuZHN0KTtcbitcdG1pZ3JhdGVfdm1hX3BhZ2VzKFx1MDAyNm1pZ3JhdGUpO1xuK1x0bWlncmF0ZV92bWFfZmluYWxpemUoXHUwMDI2bWlncmF0ZSk7XG4gZXJyX2ZyZWU6XG4gXHRrdmZyZWUoYnVmKTtcbiBlcnJfb3V0OlxuQEAgLTE0NzYsNiArMTU3OCwxNiBAQCB2b2lkIGRybV9wYWdlbWFwX2Rlc3Ryb3koc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCwgYm9vbCBpc19hdG9taWNfb3JfcmVjbGFpbVxuIFx0XHRrZnJlZShkcGFnZW1hcCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19pbml0IGRybV9wYWdlbWFwX21vZHVsZV9pbml0KHZvaWQpXG4re1xuKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0ZBVUxUX0lOSkVDVElPTilcbitcdGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoXCJkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RcIiwgTlVMTCxcbitcdFx0XHRcdCAgXHUwMDI2bWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbittb2R1bGVfaW5pdChkcm1fcGFnZW1hcF9tb2R1bGVfaW5pdCk7XG4rXG4gc3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZXhpdCh2b2lkKVxuIHtcbiBcdGZsdXNoX3dvcmsoXHUwMDI2ZHJtX3BhZ2VtYXBfd29yayk7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IDkwOGQyZDRlYzQzYWMuLmFlMTdiZDUxNmQyNDggMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlX2RldmljZS5jXG4rKysgYi9tbS9taWdyYXRlX2RldmljZS5jXG5AQCAtODk5LDIyICs4OTksMTA0IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4re1xuK1x0REVGSU5FX0ZPTElPX1ZNQV9XQUxLKHB2bXcsIGZvbGlvLCB2bWEsIGFkZHIsIFBWTVdfU1lOQyB8IFBWTVdfTUlHUkFUSU9OKTtcbitcbitcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xuK1x0XHRpZiAocHZtdy5wdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4rXHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERlbW90ZSB3aXRoIGZyZWV6ZSA9IGZhbHNlOiB0aGUgUE1EIGFscmVhZHkgaG9sZHMgYVxuK1x0XHQgKiBtaWdyYXRpb24gZW50cnksIHNvIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKCkgY3JlYXRlcyBQVEVcbitcdFx0ICogc2l6ZWQgbWlncmF0aW9uIGVudHJpZXMgZnJvbSBpdCBhbmQgbGVhdmVzIHRoZSByZWZjb3VudFxuK1x0XHQgKiBhbG9uZS4gVGhlcmUgaXMgYXQgbW9zdCBvbmUgUE1EIG1hcHBpbmcgQGZvbGlvIHBlciBWTUEsIHNvXG4rXHRcdCAqIHN0b3AgdGhlIHdhbGsgaGVyZS5cbitcdFx0ICovXG4rXHRcdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3Modm1hLCBhZGRyLCBmYWxzZSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogRGVtb3RlIGV2ZXJ5IFBNRCBzaXplZCBtaWdyYXRpb24gZW50cnkgdGhhdCBtYXBzIEBmb2xpbyB0byBQVEUgc2l6ZWQgb25lcy5cbisgKlxuKyAqIG1pZ3JhdGVfZGV2aWNlX3VubWFwKCkgdW5tYXBzIHdpdGggdHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApLCBpLmUuIHdpdGhvdXRcbisgKiBUVFVfU1BMSVRfSFVHRV9QTUQsIHNvIGEgZm9saW8gdGhhdCB3YXMgUE1EIG1hcHBlZCBpbiBzZXZlcmFsIFZNQXMgLS0gYWZ0ZXJcbisgKiBmb3JrKCksIGZvciBpbnN0YW5jZSAtLSBlbmRzIHVwIHdpdGggYSBQTUQgc2l6ZWQgbWlncmF0aW9uIGVudHJ5IGluIGV2ZXJ5IG9uZVxuKyAqIG9mIHRoZW0uIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgYmVsb3cgZG9lcyBub3QgY2FyZSwgaXQgb25seSBsb29rcyBhdCB0aGVcbisgKiByZWZjb3VudCwgc28gc3BsaXR0aW5nIHRoZSBmb2xpbyB3aXRob3V0IGRlbW90aW5nIGFsbCBvZiB0aG9zZSBmaXJzdCB3b3VsZFxuKyAqIGxlYXZlIHRoZSBvdGhlciBWTUFzIHBvaW50aW5nIGEgaHVnZSBQTUQgYXQgd2hhdCBpcyBub3cgYW4gb3JkZXItMCBmb2xpby5cbisgKiByZW1vdmVfbWlncmF0aW9uX3B0ZXMoKSB0cmlwcyBvdmVyIHRoYXQgaW4gbWlncmF0ZV92bWFfZmluYWxpemUoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xuK1x0XHQucm1hcF9vbmUgPSBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lLFxuK1x0fTtcbitcbitcdC8qXG4rXHQgKiBEbyBub3QgcGFzcyAuYW5vbl9sb2NrOiBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoKSByZXF1aXJlc1xuK1x0ICogZm9saW9fbWFwcGVkKCksIGFuZCBAZm9saW8gaXMgYWxyZWFkeSBmdWxseSB1bm1hcHBlZCBoZXJlLlxuK1x0ICovXG4rXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIGZhdWx0X2ZvbGlvO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKlxuLVx0ICogdGFrZSBhIHJlZmVyZW5jZSwgc2luY2Ugc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHdpdGggZnJlZXplID0gdHJ1ZVxuLVx0ICogZHJvcHMgYSByZWZlcmVuY2UgYXQgdGhlIGVuZC5cbitcdCAqIG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5ncygpIHdhbGtzIHRoZSBybWFwLCBhbmRcbitcdCAqIHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MoKSB6YXBzIHJhdGhlciB0aGFuIGRlbW90ZXMgYSBQTUQgaW4gYSBWTUEgdGhhdFxuK1x0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxuK1x0ICogVk1BIHR5cGUsIHNvIGEgZmlsZSBUSFAgY2FuIHJlYWNoIGhlcmU7IHRoZSByZXN0IG9mIHRoZSBtaWdyYXRlX3ZtYSgpXG4rXHQgKiBtYWNoaW5lcnkgb25seSBzdXBwb3J0cyBhbm9ueW1vdXMgbWVtb3J5IGFueXdheS5cbiBcdCAqL1xuLVx0Zm9saW9fZ2V0KGZvbGlvKTtcbi1cdHNwbGl0X2h1Z2VfcG1kX2FkZHJlc3MobWlncmF0ZS1cdTAwM2V2bWEsIGFkZHIsIHRydWUpO1xuK1x0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBBIENQVSBmYXVsdCBvbiBhIGRldmljZSBwcml2YXRlIFBNRCBob2xkcyBhbiBleHRyYSByZWZlcmVuY2Ugb24gdGhlXG4rXHQgKiBmb2xpbywgdGFrZW4gYnkgZG9faHVnZV9wbWRfZGV2aWNlX3ByaXZhdGUoKS4gZm9saW9fc3BsaXRfdW5tYXBwZWQoKVxuK1x0ICogb25seSB0b2xlcmF0ZXMgYSBzaW5nbGUgY2FsbGVyIHJlZmVyZW5jZSwgc28gdGhlIHNwbGl0IHdvdWxkIGFsd2F5c1xuK1x0ICogZmFpbCB3aXRoIC1FQUdBSU4gd2hpbGUgdGhpcyBmYXVsdCByZWZlcmVuY2UgaXMgaGVsZC5cbitcdCAqXG4rXHQgKiBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZSgpIGRlcml2ZXMgdGhlIGZhdWx0IHBhZ2UgZnJvbSB0aGUgUE1EXG4rXHQgKiBlbnRyeSwgc28gaXQgaXMgYWx3YXlzIHRoZSBoZWFkIHBhZ2Ugb2YgQGZvbGlvLCBhbmQgdGhlcmVmb3JlIGFsd2F5c1xuK1x0ICogZW5kcyB1cCBpbiB0aGUgaGVhZCBmb2xpbyBhZnRlciBhbiB1bmlmb3JtIHNwbGl0IHRvIG9yZGVyIDAuIERyb3BcbitcdCAqIHRoZSByZWZlcmVuY2UgYWNyb3NzIHRoZSBzcGxpdCBhbmQgcmUtdGFrZSBpdCBvbiB0aGUgaGVhZCBmb2xpb1xuK1x0ICogYWZ0ZXJ3YXJkcywgbGVhdmluZyB0aGUgcmVmZXJlbmNlIGV4YWN0bHkgd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdG8gYmVcbitcdCAqIHJlbGVhc2VkLlxuK1x0ICpcbitcdCAqIFRoZSBmb2xpbyBjYW5ub3QgZ28gYXdheSB3aGlsZSB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQ6IHRoZVxuK1x0ICogcmVmZXJlbmNlIHRha2VuIGJ5IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBpcyBzdGlsbCBoZWxkLlxuK1x0ICovXG4rXHRmYXVsdF9mb2xpbyA9IG1pZ3JhdGUtXHUwMDNlZmF1bHRfcGFnZSBcdTAwMjZcdTAwMjZcbitcdFx0cGFnZV9mb2xpbyhtaWdyYXRlLVx1MDAzZWZhdWx0X3BhZ2UpID09IGZvbGlvO1xuK1xuK1x0bWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzKGZvbGlvKTtcbitcbitcdGlmIChmYXVsdF9mb2xpbylcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdHJldCA9IGZvbGlvX3NwbGl0X3VubWFwcGVkKGZvbGlvLCAwKTtcbitcdGlmIChmYXVsdF9mb2xpbylcbitcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXHRtaWdyYXRlLVx1MDAzZXNyY1tpZHhdIFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuQEAgLTkzNSw3ICsxMDE3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gfVxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpZHgsIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaWR4LFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTAzLDcgKzExODUsNiBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdGJvb2wgbm90aWZpZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wYWdlczsgKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpuZXdwYWdlID0gbWlncmF0ZV9wZm5fdG9fcGFnZShkc3RfcGZuc1tpXSk7XG5AQCAtMTE3NywxMiArMTI1OCwxOCBAQCBzdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuIFx0XHRcdFx0XHRnb3RvIG5leHQ7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRuciA9IDEgXHUwMDNjXHUwMDNjIGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cdFx0XHRcdGFkZHIgPSBtaWdyYXRlLVx1MDAzZXN0YXJ0ICsgaSAqIFBBR0VfU0laRTtcbi1cdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBhZGRyLCBmb2xpbykpIHtcbitcdFx0XHRcdGlmIChtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhtaWdyYXRlLCBpLCBmb2xpbykpIHtcbiBcdFx0XHRcdFx0c3JjX3BmbnNbaV0gXHUwMDI2PSB+KE1JR1JBVEVfUEZOX01JR1JBVEUgfFxuIFx0XHRcdFx0XHRcdFx0IE1JR1JBVEVfUEZOX0NPTVBPVU5EKTtcbiBcdFx0XHRcdFx0Z290byBuZXh0O1xuIFx0XHRcdFx0fVxuK1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIHJlc2V0IG5yIHNvIHRoYXQgb25seSBmaXJzdCBhZnRlci1zcGxpdCBmb2xpb1xuK1x0XHRcdFx0ICogaXMgcHJvY2Vzc2VkIGJlbG93XG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSk7XG4rXHRcdFx0XHRuciA9IDE7XG4gXHRcdFx0fSBlbHNlIGlmICgoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0KGRzdF9wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQhKHNyY19wZm5zW2ldIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcbkBAIC0xMjIyLDYgKzEzMDksMTIgQEAgc3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbiBcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8obWlncmF0ZV9wZm5fdG9fcGFnZShzcmNfcGZuc1tpK2pdKSk7XG4gXHRcdFx0bmV3Zm9saW8gPSBwYWdlX2ZvbGlvKG1pZ3JhdGVfcGZuX3RvX3BhZ2UoZHN0X3BmbnNbaStqXSkpO1xuIFxuK1x0XHRcdC8qXG4rXHRcdFx0ICogZm9saW9fZnJlZV9zd2FwKCkgcmVtb3ZlZCB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcFxuK1x0XHRcdCAqIGNhY2hlLiBSZWZyZXNoIHRoZSBzYXZlZCBtYXBwaW5nIGJlZm9yZSBtaWdyYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuK1xuIFx0XHRcdHIgPSBmb2xpb19taWdyYXRlX21hcHBpbmcobWFwcGluZywgbmV3Zm9saW8sIGZvbGlvLCBleHRyYV9jbnQpO1xuIFx0XHRcdGlmIChyKVxuIFx0XHRcdFx0c3JjX3BmbnNbaStqXSBcdTAwMjY9IH5NSUdSQVRFX1BGTl9NSUdSQVRFO1xuQEAgLTE0MDIsNyArMTQ5NSw3IEBAIGludCBtaWdyYXRlX2RldmljZV9yYW5nZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0bnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdGlmIChuciBcdTAwM2UgMSkge1xuIFx0XHRcdHNyY19wZm5zW2ldIHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xuLVx0XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIG5yOyBqKyspXG4rXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnIgXHUwMDI2XHUwMDI2IChpICsgaikgXHUwMDNjIG5wYWdlczsgaisrKVxuIFx0XHRcdFx0c3JjX3BmbnNbaStqXSA9IDA7XG4gXHRcdFx0aSArPSBqIC0gMTtcbiBcdFx0XHRwZm4gKz0gaiAtIDE7XG5AQCAtMTQzNiw3ICsxNTI5LDcgQEAgaW50IG1pZ3JhdGVfZGV2aWNlX3BmbnModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuIFx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdFx0aWYgKG5yIFx1MDAzZSAxKSB7XG4gXHRcdFx0c3JjX3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XG4tXHRcdFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgbnI7IGorKylcbitcdFx0XHRmb3IgKGogPSAxOyBqIFx1MDAzYyBuciBcdTAwMjZcdTAwMjYgKGkgKyBqKSBcdTAwM2MgbnBhZ2VzOyBqKyspXG4gXHRcdFx0XHRzcmNfcGZuc1tpK2pdID0gMDtcbiBcdFx0XHRpICs9IGogLSAxO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjozMy40MjcxNzM4MDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTg5ODAwMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFJNL01NIFBhdGNoIGZvciBGYXVsdCBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCBhbmQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGZhdWx0IGluamVjdGlvbiBpbnRvIGBkcm1fcGFnZW1hcC5jYCB0aHJvdWdoIHRoaXMgYGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpb2AgZnVuY3Rpb24uIFRoZSBnb2FsIGhlcmUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gZm9yY2UgYSBmYWxsYmFjayB0byBvcmRlci0wIGFsbG9jYXRpb25zLCB3aGljaCBpcyBvZnRlbiBkb25lIGZvciBkZWJ1Z2dpbmcgb3IgdG8gdGVzdCBhIHN5c3RlbSdzIHJlc2lsaWVuY2UgdG8gc3BlY2lmaWMgZmFpbHVyZXMuIFRoaXMgZGlyZWN0bHkgdG91Y2hlcyBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXNgIGFuZCBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYCwgc28gaXQncyBjbGVhcmx5IGludGVydHdpbmVkIHdpdGggdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3NlcyB3aXRoaW4gdGhlIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlci5cblxuSW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCB3ZSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBrZXkgbWlncmF0aW9uIGZ1bmN0aW9uczogYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9vbmVgLCBgbWlncmF0ZV92bWFfc3BsaXRfcG1kX21hcHBpbmdzYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCwgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiBUaGlzIGhlYXZpbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZmF1bHQgaW5qZWN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBkZXZpY2UgcGFnZSBtaWdyYXRpb24uIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGFzIGl0IGNvdWxkIGJlIHRyaWNreSB0byBkZWJ1Zy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGNvZGUgcGF0aC4gYGRybV9wYWdlbWFwLmNgLCBhcyB3ZSBrbm93LCBpcyBwYXJ0IG9mIHRoZSBEUk0gc3RhY2ssIGJ1dCBpdCB3b3VsZCBiZSBiZW5lZmljaWFsIHRvIHJldmlldyBhbGwgdXNlcyBvZiB0aGUgcGFnZSBtYXBwaW5nIHN0cnVjdHVyZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gdHJpZ2dlciBhbmQgdGVzdCB0aGlzIGluamVjdGlvbi4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIHBhcnQgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IERFVklDRV9QUklWQVRFLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZXMsIHNvIGxldCdzIGNoZWNrIGZvciBhbnkgdXNlIG9mIGBkcm1fcGFnZW1hcF9ldmljdF90b19yYW1gIG9yIGBkcm1fcGFnZW1hcF9kZXN0cm95YCBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIGxldmVyYWdlIGl0IHRvIHN0dWR5IHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NjIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjozOS4wMTY5NzY3NzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzI5MjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fcGFnZW1hcF9ldmljdF90b19yYW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTIyMD1FWFBPUlRfU1lNQk9MKGRybV9wYWdlbWFwX3B1dCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEyMjM6ICogZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKCkgLSBFdmljdCBHUFUgU1ZNIHJhbmdlIHRvIFJBTVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMjQtICogQGRldm1lbV9hbGxvY2F0aW9uOiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMzAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTIzMTppbnQgZHJtX3BhZ2VtYXBfZXZpY3RfdG9fcmFtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTMwOS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTMxMDpFWFBPUlRfU1lNQk9MX0dQTChkcm1fcGFnZW1hcF9ldmljdF90b19yYW0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMTEtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTQ2Mj1pbnQgeGVfc3ZtX2JvX2V2aWN0KHN0cnVjdCB4ZV9ibyAqYm8pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE0NjMte1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxNDY0OlxcdHJldHVybiBkcm1fcGFnZW1hcF9ldmljdF90b19yYW0oXFx1MDAyNmJvLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbik7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE0NjUtfVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaD0zNDI9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNDYtXFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaDozNDc6aW50IGRybV9wYWdlbWFwX2V2aWN0X3RvX3JhbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbik7XFxuaW5jbHVkZS9kcm0vZHJtX3BhZ2VtYXAuaC0zNDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjQxLjI0NDI3NzA1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDA1MTYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBNZW1vcnkgTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEUk0gcGFnZW1hcCBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCBieSB0aGUgSW50ZWwgWGUgZHJpdmVyIChgeGVfc3ZtLmNgKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gSSBzZWUgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aXRoaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGZvY3VzaW5nIG9uIGZ1bmN0aW9ucyBsaWtlIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gUmlnaHQsIGFuZCB0aGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciBkcml2ZXJzIHRoYXQgbGV2ZXJhZ2UgYERFVklDRV9QUklWQVRFYCBtZW1vcnksIGxpa2UgTm91dmVhdSBhbmQsIG9mIGNvdXJzZSwgdGhlIFhlIGRyaXZlci5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGlzIGFjdHVhbGx5IGNhbGxlZCBieSBlaXRoZXIgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBvciwgZXZlbiBtb3JlIGludGVyZXN0aW5nbHksIGBtaWdyYXRlX3ZtYV9wYWdlc2AuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYW5kLCBpbiBwYXJ0aWN1bGFyLCB3aGV0aGVyIHRoaXMgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBmdW5jdGlvbiBpcyByZWFjaGFibGUgdGhyb3VnaCBhIG1vcmUgZ2VuZXJhbCBwYXRoLiBJcyBpdCBqdXN0IGRldmljZS1zcGVjaWZpYyBvciBpcyBpdCBzb21ldGhpbmcgdGhhdCBjb3VsZCBpbXBhY3Qgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gTGV0J3MgdHJhY2UgdGhyb3VnaCBgbWlncmF0ZV92bWFfcGFnZXNgIHRvIHNlZSB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjQ1LjQ4NDc5NTE1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU5OTk0Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI2Ni1mdW5jdGlvbnMgYXJlIGRlc2lnbmVkIHRvIG1ha2UgZHJpdmVycyBlYXNpZXIgdG8gd3JpdGUgYW5kIHRvIGNlbnRyYWxpemUgY29tbW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozNjU6NC4gYGBtaWdyYXRlX3ZtYV9wYWdlcygpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzY2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjE4LeeUseS6jiBDUFUg5peg5rOV55u05o6l6K6/6Zeu6K6+5aSH5YaF5a2Y77yM5Zug5q2k6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75L2/55So56Gs5Lu2IERNQSDmiJborr7lpIfnibnlrprnmoTliqDovb0v5a2YXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI5Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI5ODo0LiBgYG1pZ3JhdGVfdm1hX3BhZ2VzKClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjk5LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy00OS0gKiAxLiBrdm0tXFx1MDAzZXNyY3UgLSBQcm90ZWN0cyBLVk0gbWVtc2xvdHNcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUwOiAqIDIuIGt2bS1cXHUwMDNlbW0tXFx1MDAzZW1tYXBfbG9jayAtIGZpbmRfdm1hLCBtaWdyYXRlX3ZtYV9wYWdlcyBhbmQgaGVscGVycywga3NtX21hZHZpc2VcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUxLSAqIDMuIGt2bS1cXHUwMDNlYXJjaC51dm1lbV9sb2NrIC0gcHJvdGVjdHMgcmVhZC93cml0ZXMgdG8gdXZtZW0gc2xvdHMgdGh1cyBhY3RpbmdcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NzgtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Nzk6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01ODAtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzg3LVxcdCptaWcuZHN0ID0gbWlncmF0ZV9wZm4ocGFnZV90b19wZm4oZHBhZ2UpKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc4ODpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc4OS1vdXRfZmluYWxpemU6XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5ND1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDUxLVxcdHIgPSBzdm1fbWlncmF0ZV9jb3B5X3RvX3ZyYW0obm9kZSwgcHJhbmdlLCBcXHUwMDI2bWlncmF0ZSwgXFx1MDAyNm1mZW5jZSwgc2NyYXRjaCwgdHRtX3Jlc19vZmZzZXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDUyOlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQ1My1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkzPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTc1NS1cXHRcXHRcXHRcXHQgICAgc2NyYXRjaCwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjc1NjpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03NTctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0zNDc9ZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNS0gKiBOb3RlIHRoYXQgdGhlIHNvdXJjZSBmb2xpbyBpdHNlbGYgaXMgb25seSBzcGxpdCBsYXRlciwgYnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjY6ICogbWlncmF0ZV92bWFfcGFnZXMoKSAvIG1pZ3JhdGVfZGV2aWNlX3BhZ2VzKCksIHNvIGl0cyBvcmRlciBjYW5ub3QgYmUgdXNlZCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQyNy0gKiBkZXRlY3QgdGhlIGRlbW90aW9uIC0gdGhlIGRlc3RpbmF0aW9uIGhhcyB0byBiZSBpbnNwZWN0ZWQgaW5zdGVhZC5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTY5MD1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04OTEtZXJyX2Fib3J0ZWRfbWlncmF0aW9uOlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg5MjpcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODkzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTMyNT1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDE1LVxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE0MTY6XFx0bWlncmF0ZV92bWFfcGFnZXMoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0MTctXFx0bWlncmF0ZV92bWFfZmluYWxpemUoXFx1MDAyNm1pZ3JhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTI2Ny1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRtZW0tXFx1MDAzZW1pZ3JhdGUuY2hhbik7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjY4OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yNjktXFx0bm91dmVhdV9kbWVtX2ZlbmNlX2RvbmUoXFx1MDAyNmZlbmNlKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTc4Mz1zdGF0aWMgdm9pZCBub3V2ZWF1X2RtZW1fbWlncmF0ZV9jaHVuayhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTgwOS1cXHRub3V2ZWF1X2ZlbmNlX25ldyhcXHUwMDI2ZmVuY2UsIGRybS1cXHUwMDNlZG1lbS1cXHUwMDNlbWlncmF0ZS5jaGFuKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4MTA6XFx0bWlncmF0ZV92bWFfcGFnZXMoYXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODExLVxcdG5vdXZlYXVfZG1lbV9mZW5jZV9kb25lKFxcdTAwMjZmZW5jZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NS1cXHQgKiBtaWdyYXRlX3ZtYV9zZXR1cCgpLCBhbmQgbXVzdCBub3QgY2hhbmdlIHRoZSBkc3QgYXJyYXkgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjY6XFx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2Ny1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE5Mz1pbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTQ6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpO1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NS12b2lkIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwNzUtXFx0XFx0XFx0XFx0XFx0LyogQ2xlYXIgcmVtYWluaW5nIGRzdCBlbnRyaWVzIHRvIGF2b2lkXFxubGliL3Rlc3RfaG1tLmM6MTA3NjpcXHRcXHRcXHRcXHRcXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcy9maW5hbGl6ZSgpIHVzaW5nXFxubGliL3Rlc3RfaG1tLmMtMTA3Ny1cXHRcXHRcXHRcXHRcXHQgKiB1bmluaXRpYWxpemVkIHZhbHVlcy5cXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE3NS1cXG5saWIvdGVzdF9obW0uYzoxMTc2OlxcdFxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTc3LVxcdFxcdGNtZC1cXHUwMDNlY3BhZ2VzICs9IGRtaXJyb3Jfc3VjY2Vzc2Z1bF9taWdyYXRlZF9wYWdlcyhcXHUwMDI2YXJncyk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDgtXFx0XFx0ZG1pcnJvcl9taWdyYXRlX2FsbG9jX2FuZF9jb3B5KFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG5saWIvdGVzdF9obW0uYzoxMjQ5OlxcdFxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMjUwLVxcdFxcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzE4LVxcdH1cXG5saWIvdGVzdF9obW0uYzoxNzE5OlxcdG1pZ3JhdGVfdm1hX3BhZ2VzKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xNzIwLVxcdC8qXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTY2MD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV91bm1hcChzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMC0gKiB0aGlzIGNhbiBzdGlsbCBmYWlsLCBhbmQgdGh1cyBpbnNpZGUgdGhlIGRldmljZSBkcml2ZXIgeW91IG11c3QgY2hlY2sgaWYgdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDE6ICogbWlncmF0aW9uIHdhcyBzdWNjZXNzZnVsIGZvciB0aG9zZSBlbnRyaWVzIGFmdGVyIGNhbGxpbmcgbWlncmF0ZV92bWFfcGFnZXMoKSxcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwMi0gKiBqdXN0IGxpa2UgZm9yIHJlZ3VsYXIgbWlncmF0aW9uLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzAzLSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MDQ6ICogQWZ0ZXIgdGhhdCwgdGhlIGNhbGxlcnMgbXVzdCBjYWxsIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgdG8gZ28gb3ZlciBlYWNoIGVudHJ5XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MDUtICogaW4gdGhlIHNyYyBhcnJheSB0aGF0IGhhcyB0aGUgTUlHUkFURV9QRk5fVkFMSUQgYW5kIE1JR1JBVEVfUEZOX01JR1JBVEUgZmxhZ1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzA2LSAqIHNldC4gSWYgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gZHN0IGFycmF5IGhhcyBNSUdSQVRFX1BGTl9WQUxJRCBmbGFnIHNldCxcXG5tbS9taWdyYXRlX2RldmljZS5jOjcwNzogKiB0aGVuIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzb3VyY2VcXG5tbS9taWdyYXRlX2RldmljZS5jLTcwOC0gKiBzdHJ1Y3QgcGFnZSB0byB0aGUgZGVzdGluYXRpb24gc3RydWN0IHBhZ2UuICBJZiBpdCBmYWlscyB0byBtaWdyYXRlIHRoZVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MTUtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjcxNjogKiBPbmNlIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucyB0aGUgY2FsbGVyIG1heSBpbnNwZWN0IHdoaWNoIHBhZ2VzIHdlcmVcXG5tbS9taWdyYXRlX2RldmljZS5jLTcxNy0gKiBzdWNjZXNzZnVsbHkgbWlncmF0ZWQsIGFuZCB3aGljaCB3ZXJlIG5vdC4gIFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwYWdlcyB3aWxsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcxOS0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzIwOiAqIEl0IGlzIHNhZmUgdG8gdXBkYXRlIGRldmljZSBwYWdlIHRhYmxlIGFmdGVyIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgYmVjYXVzZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzIxLSAqIGJvdGggZGVzdGluYXRpb24gYW5kIHNvdXJjZSBwYWdlIGFyZSBzdGlsbCBsb2NrZWQsIGFuZCB0aGUgbW1hcF9sb2NrIGlzIGhlbGRcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTE4MT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzM3LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzM4OiAqIEVxdWl2YWxlbnQgdG8gbWlncmF0ZV92bWFfcGFnZXMoKS4gVGhpcyBpcyBjYWxsZWQgdG8gbWlncmF0ZSBzdHJ1Y3QgcGFnZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMzOS0gKiBtZXRhLWRhdGEgZnJvbSBzb3VyY2Ugc3RydWN0IHBhZ2UgdG8gZGVzdGluYXRpb24uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNDY9RVhQT1JUX1NZTUJPTChtaWdyYXRlX2RldmljZV9wYWdlcyk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNDgtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzQ5OiAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgLSBtaWdyYXRlIG1ldGEtZGF0YSBmcm9tIHNyYyBwYWdlIHRvIGRzdCBwYWdlXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzUwLSAqIEBtaWdyYXRlOiBtaWdyYXRlIHN0cnVjdCBjb250YWluaW5nIGFsbCBtaWdyYXRpb24gaW5mb3JtYXRpb25cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1NS0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNTY6dm9pZCBtaWdyYXRlX3ZtYV9wYWdlcyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzU3LXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzYwOkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfcGFnZXMpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6NDcuMzQ0ODAwNjI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMDg3MjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB0ZXN0X2htbWAgTW9kdWxlIGFuZCBpdHMgSW1wYWN0IG9uIE1lbW9yeSBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbGliL3Rlc3RfaG1tLmNgIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCdzIHV0aWxpemluZyBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgYHRlc3RfaG1tLmNgLCBhcyBJIHJlY2FsbCwgaXMgYSB0ZXN0IG1vZHVsZSBkZXNpZ25lZCBmb3IgSE1NIGFuZCwgc3BlY2lmaWNhbGx5LCBERVZJQ0VfUFJJVkFURSBtZW1vcnkuIEl0J3MgYnVpbHQgdG8gZXhlcmNpc2UgYm90aCBgbWlncmF0ZV92bWFfcGFnZXNgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBCdXQgbm93IEkgc2VlIHRoZSBwYXRjaCBtb2RpZmllcyBzb21lIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgdGhlc2UgcmVseSBvbiwgbmFtZWx5IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoZXNlIGFyZSBjb3JlIE1NIGZ1bmN0aW9ucywgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIGhvdyBkZXZpY2UgbWVtb3J5IGdldHMgbW92ZWQgYXJvdW5kLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIGB0ZXN0X2htbWAgbW9kdWxlLCBhbmQgYnkgZXh0ZW5zaW9uLCB0aGVzZSB0ZXN0cywgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIG91ciBmdXp6aW5nIGVmZm9ydHMgaW4gU3l6a2FsbGVyLiBIbW0sIHllcywgaXQgbG9va3MgbGlrZSBTeXprYWxsZXIgZG9lcyBpbmRlZWQgZnV6eiBgdGVzdF9obW1gIHZpYSBgL2Rldi9obW1fZG1pcnJvcipgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBTbywgY2FuIHRoaXMgZnV6emluZyBhY3R1YWxseSAqdHJpZ2dlciogdGhlIGNvZGUgdGhhdCdzIGJlZW4gbW9kaWZpZWQgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgP1xuXG5UaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFsbCBhYm91dCBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFuZCBob3cgd2UgaGFuZGxlIFBNRCAoUGFnZSBNYXAgRGlyZWN0b3J5KSBzcGxpdHRpbmcgZHVyaW5nIGRldmljZSBtaWdyYXRpb24uIEkga25vdyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIGdldHMgY2FsbGVkIHdpdGhpbiBgX19taWdyYXRlX2RldmljZV9wYWdlc2Agd2hlbiBgZm9saW9fdGVzdF9sYXJnZShmb2xpbylgIGlzIHRydWUuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIFRIUC5cblxuU28sIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBkb2VzIGB0ZXN0X2htbWAgZXZlbiBzdXBwb3J0IG1pZ3JhdGluZyBUSFA/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBgbGliL3Rlc3RfaG1tLmNgIHRvIGNvbmZpcm0gd2hldGhlciBpdCBoYXMgdGhlIGNhcGFjaXR5IHRvIGRlYWwgd2l0aCBUSFAuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM2OjUzLjk3NTY3NjMzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDAxNjk4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRIUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6MzY6NTQuMjE1ODU0OTMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1ODE5MDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFRIUCBJbnRlcmFjdGlvbnMgd2l0aCBEUk0gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJIHNlZSBubyBkaXJlY3QgVEhQIHVzYWdlIHdpdGhpbiBgbGliL3Rlc3RfaG1tLmNgLiBIb3dldmVyLCBgdGVzdF9obW1gIHJlbGllcyBvbiBzdGFuZGFyZCBgbW1hcGAgYW5kIGBtYWR2aXNlYC4gVGhpcyBtZWFucyBpZiBzb21lb25lIGNsZXZlcmx5IHNldHMgdXAgYSBUSFAgbWFwcGluZyBhbmQgdGhlbiB0cmlnZ2VycyB0aGUgYHRlc3RfaG1tYCBpb2N0bCBmb3IgbWlncmF0aW9uIHRvIGRldmljZSBtZW1vcnksIHRoZSBjb2RlIHBhdGggd291bGQgaW52b2x2ZSBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBUaGUgZ29vZCBuZXdzIGlzIHRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBQTUQgc3BsaXR0aW5nIGR1cmluZyB0aGF0IG1pZ3JhdGlvbiwgd2hpY2ggaXMgY3J1Y2lhbC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRybV9wYWdlbWFwLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgaW50cm9kdWNlZCBgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvYCBhbmQgYXJlIHV0aWxpemluZyBpdCBpbiBgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuYC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgYGRybV9wYWdlbWFwLmNgIGlzIGJlaW5nIHVzZWQgYnkgYHhlX3N2bS5jYCBhbmQgYG5vdXZlYXVfZG1lbS5jYC4gSGFuZyBvbi4uLiBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgYSBnZW5lcmljIERSTSBwYWdlbWFwIG1vZHVsZSEgVGhpcyBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgYHhlYCBvciBgbm91dmVhdWAgZnV6emVkIGJ5IHN5emthbGxlcj8gU3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgdGFyZ2V0IHRob3NlIGRyaXZlcnMsIGJ1dCBpZiB0aGVyZSdzIGEgZ2VuZXJhbGl6ZWQgcm91dGUgdG8gYGRybV9wYWdlbWFwYCwgb3IgaWYgZWl0aGVyIGB4ZWAgb3IgYG5vdXZlYXVgIGFyZSBzb21laG93IGVuYWJsZWQgZHVyaW5nIHRoZSB0ZXN0LCB0aGVuIGBkcm1fcGFnZW1hcGAgaXRzZWxmIGNvdWxkIGJlIHN1YmplY3QgdG8gZnV6emluZy4gSG1tLi4uIHRoaXMgYGRybV9wYWdlbWFwLmNgIGlzIGEgbmV3IGFkZGl0aW9uIHRvIHRoZSBEUk0gdHJlZT8gSSBzaG91bGQgY2hlY2sgdGhlIGNvbW1pdCBoaXN0b3J5IHRvIHVuZGVyc3RhbmQgd2hlbiBpdCB3YXMgaW50cm9kdWNlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNjo1OS45NzQwNDc4MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTU5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9wYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMjpcXHRkcm1fcGFnZW1hcC5vXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTM6XFx0ZHJtX3BhZ2VtYXBfdXRpbC5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDAuMDIyMjEzNjMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg1MDkyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBkcm1fZ3B1c3ZtX2hlbHBlcmAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgYnV0IG9ubHkgaWYgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZW5hYmxlZCAqYW5kKiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBmdW5jdGlvbiBvciBtb2R1bGUgaXMgYWN0dWFsbHkgdXNlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyB0aGUgaW5jbHVzaW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmA/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgbWFrZWZpbGVzLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IGNvZGUgcGF0aHMgdGhhdCBtaWdodCBzZWxlY3Qgb3IgZGVwZW5kIG9uIGBkcm1fZ3B1c3ZtX2hlbHBlcmAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzY2VuYXJpb3Mgd2hlcmUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGxldmVyYWdlZC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoYXQgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGUgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRldmljZSBkcml2ZXJzIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlc2Ugc3BlY2lmaWMgY2FzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDMuNTYwNzI2NDI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3NDgzNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9ncHVzdm1faGVscGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0xMDc9b2JqLSQoQ09ORklHX0RSTV9HUFVWTSkgKz0gZHJtX2dwdXZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTA4LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMDk6ZHJtX2dwdXN2bV9oZWxwZXIteSA6PSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMC1cXHRkcm1fZ3B1c3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTExOmRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cXHRkcm1fcGFnZW1hcC5vXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSArPSBkcm1fZ3B1c3ZtX2hlbHBlci5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDUuMTc4MjE4NjQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDA1ODM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEdQVVNWTSBEZXBlbmRlbmN5IENoYWluKipcblxuUmlnaHQsIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgZGlyZWN0bHkgZW5hYmxlcyB0aGUgYGRybV9ncHVzdm1faGVscGVyYC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBhcyBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXIsIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiAqd2hhdCogaXMgc2VsZWN0aW5nIHRoYXQgY29uZmlnIG9wdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1cHN0cmVhbSByYXRpb25hbGUsIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygd2h5IGEgdXNlciBtaWdodCBjaG9vc2UgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWMsIGRlcGVuZGVudCBvbiBvdGhlciBkaXNwbGF5IGRyaXZlciBjb21wb25lbnRzLCBvciBqdXN0IGEgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgZmxhZz8gTGV0J3MgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBLY29uZmlnIGhpZXJhcmNoeSBhbmQgZmlndXJlIG91dCB3aGF0IHB1bGxzIHRoYXQgc3BlY2lmaWMgZmxhZy4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzczLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MDguNTc4ODA1MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTU1MTY3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFJNX0dQVVNWTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0yMjE9Y29uZmlnIFJVU1RfRFJNX0dQVVZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjctXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MjI4OmNvbmZpZyBEUk1fR1BVU1ZNXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz03NjI9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3Ny1cXHRcXHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc3ODpcXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc3OS1cXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03ODUtXFx0aWYgKCFwZm5zKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Nzg2OlxcdFxcdHJldHVybiBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03ODctXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMC1cXHRcXHRpZiAoIShwZm5zW2ldIFxcdTAwMjYgSE1NX1BGTl9WQUxJRCkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgyMTpcXHRcXHRcXHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgyMi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODMwLVxcdFxcdGlmIChjdXIgPT0gcGFnZW1hcCkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODMxOlxcdFxcdFxcdG5ld19zdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9FUVVBTDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzMi1cXHRcXHR9IGVsc2UgaWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAoY3VyID09IG90aGVyIHx8ICFvdGhlcikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzMzpcXHRcXHRcXHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzQtXFx0XFx0XFx0b3RoZXIgPSBjdXI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MzUtXFx0XFx0fSBlbHNlIGlmIChjdXIpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjgzNjpcXHRcXHRcXHRuZXdfc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODM3LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Mzg6XFx0XFx0XFx0bmV3X3N0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgzOS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg0NS1cXHRcXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0NjpcXHRcXHRpZiAoc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDctXFx0XFx0XFx0c3RhdGUgPSBuZXdfc3RhdGU7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NDgtXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSAhPSBuZXdfc3RhdGUpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg0OTpcXHRcXHRcXHRpZiAobmV3X3N0YXRlID09IERSTV9HUFVTVk1fU0NBTl9TWVNURU0gfHxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MDpcXHRcXHRcXHQgICAgc3RhdGUgPT0gRFJNX0dQVVNWTV9TQ0FOX1NZU1RFTSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MTpcXHRcXHRcXHRcXHRzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9NSVhFRDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1MjpcXHRcXHRcXHRlbHNlIGlmIChzdGF0ZSAhPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRUQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4NTM6XFx0XFx0XFx0XFx0c3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTI9Y29uZmlnIERSTV9YRVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctNDEtXFx0c2VsZWN0IERSTV9FWEVDXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6NDI6XFx0c2VsZWN0IERSTV9HUFVTVk0gaWYgIVVNTFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTQzLVxcdHNlbGVjdCBEUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04NS1cXHRzZWxlY3QgREVWSUNFX1BSSVZBVEVcXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZzo4NjpcXHRzZWxlY3QgRFJNX0dQVVNWTVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLTg3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnLmRlYnVnPTEwNT1jb25maWcgRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWctMTA2LSAgICAgICBib29sIFxcXCJJbmplY3QgdXNlcnB0ciBpbnZhbGlkYXRpb24gLUVJTlZBTCBlcnJvcnNcXFwiXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWcuZGVidWc6MTA3OiAgICAgICBkZXBlbmRzIG9uIERSTV9HUFVTVk1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy5kZWJ1Zy0xMDgtICAgICAgIGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTE1Nj14ZS0kKENPTkZJR19EUk1fWEVfR1BVU1ZNKSArPSB4ZV9zdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZToxNTc6eGUtJChDT05GSUdfRFJNX0dQVVNWTSkgKz0geGVfdXNlcnB0ci5vXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTE1OC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0MTE9c3RhdGljIGludCB4ZV9wdF9wcmVfY29tbWl0KHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZSAqcHRfdXBkYXRlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMTQyMy1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoxNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0MjUtLypcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jPTE0NTM9c3RhdGljIGlubGluZSB2b2lkIHhlX3B0X3N2bV91c2VycHRyX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKSB7IH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTE0NTUtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MTQ1NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0xNDU3LSNpZmRlZiBDT05GSUdfRFJNX1hFX1VTRVJQVFJfSU5WQUxfSU5KRUNUXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU5NC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1OTYtc3RhdGljIGNvbnN0IHN0cnVjdCB4ZV9taWdyYXRlX3B0X3VwZGF0ZV9vcHMgc3ZtX3VzZXJwdHJfbWlncmF0ZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTYxND1pbnQgeGVfc3ZtX2FsbG9jX3ZyYW0oc3RydWN0IHhlX3N2bV9yYW5nZSAqcmFuZ2UsIGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE2MzAtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE2MzE6XFx0aWYgKG1pZ3JhdGlvbl9zdGF0ZSA9PSBEUk1fR1BVU1ZNX1NDQU5fRVFVQUwpIHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTYzMi1cXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRFJNX1hFX0RFQlVHX1ZNKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaD0yMzM9aW50IHhlX3N2bV9pbml0KHN0cnVjdCB4ZV92bSAqdm0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTIzNC17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjIzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjM2LVxcdHJldHVybiBkcm1fZ3B1c3ZtX2luaXQoXFx1MDAyNnZtLVxcdTAwM2Vzdm0uZ3B1c3ZtLCBcXFwiWGUgU1ZNIChzaW1wbGUpXFxcIiwgXFx1MDAyNnZtLVxcdTAwM2V4ZS1cXHUwMDNlZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTI0ND12b2lkIHhlX3N2bV9maW5pKHN0cnVjdCB4ZV92bSAqdm0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTI0NS17XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjI0NjojaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0dQVVNWTSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMjQ3LVxcdHhlX2Fzc2VydCh2bS1cXHUwMDNleGUsIHhlX3ZtX2lzX2Nsb3NlZCh2bSkpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTM4NT1zdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fcGFnZW1hcCAqeGVfZHJtX3BhZ2VtYXBfZnJvbV9mZChpbnQgZmQsIHUzMiByZWdpb25faW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtMzkyLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uaDozOTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pIC8qIE5lZWQgdG8gc3VwcG9ydCB1c2VycHRyIHdpdGhvdXQgWEVfR1BVU1ZNICovXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTM5NC0jZGVmaW5lIHhlX3N2bV9hc3NlcnRfaW5fbm90aWZpZXIodm1fXykgXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oPTQzNj1zdGF0aWMgaW5saW5lIHZvaWQgeGVfc3ZtX25vdGlmaWVyX3VubG9jayhzdHJ1Y3QgeGVfdm0gKnZtKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oLTQzOC19XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5oOjQzOTojZW5kaWYgLyogQ09ORklHX0RSTV9HUFVTVk0gKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmgtNDQwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3VzZXJwdHIuaD00OD1zdHJ1Y3QgeGVfdXNlcnB0ciB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdXNlcnB0ci5oLTk5LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmg6MTAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fR1BVU1ZNKVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV91c2VycHRyLmgtMTAxLXZvaWQgeGVfdXNlcnB0cl9yZW1vdmUoc3RydWN0IHhlX3VzZXJwdHJfdm1hICp1dm1hKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jPTM2MDY9c3RhdGljIGludCB2bV9iaW5kX2lvY3RsX2NoZWNrX2FyZ3Moc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92bSAqdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdm0uYy0zNzE2LVxcdFxcdCAgICBYRV9JT0NUTF9EQkcoeGUsIG9wID09IERSTV9YRV9WTV9CSU5EX09QX01BUF9VU0VSUFRSIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3ZtLmM6MzcxNzpcXHRcXHRcXHRcXHQgIUlTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pKSB8fFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV92bS5jLTM3MTgtXFx0XFx0ICAgIFhFX0lPQ1RMX0RCRyh4ZSwgb2JqIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtNS1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NjojaWZuZGVmIF9fRFJNX0dQVVNWTV9IX19cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NzojZGVmaW5lIF9fRFJNX0dQVVNWTV9IX19cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtOC1cXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zMjc9dm9pZCBkcm1fZ3B1c3ZtX2ZyZWVfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzItICogZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IC0gU2NhbiByZXN1bHQgZnJvbSB0aGUgZHJtX2dwdXN2bV9zY2FuX21tKCkgZnVuY3Rpb24uXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjMzMzogKiBARFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVEOiBBdCBsZWFzdCBvbmUgcGFnZSB3YXMgbm90IHByZXNlbnQgb3IgaW5hY2Nlc3NpYmxlLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozMzQ6ICogQERSTV9HUFVTVk1fU0NBTl9FUVVBTDogQWxsIHBhZ2VzIGJlbG9uZyB0byB0aGUgc3RydWN0IGRldl9wYWdlbWFwIGluZGljYXRlZCBhc1xcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zMzUtICogdGhlIEBwYWdlbWFwIGFyZ3VtZW50IHRvIHRoZSBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSBmdW5jdGlvbi5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM2OiAqIEBEUk1fR1BVU1ZNX1NDQU5fT1RIRVI6IEFsbCBwYWdlcyBiZWxvbmcgdG8gZXhhY3RseSBvbmUgZGV2X3BhZ2VtYXAsIHdoaWNoIGlzXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMzNy0gKiAqTk9UKiB0aGUgQHBhZ2VtYXAgYXJndW1lbnQgdG8gdGhlIGRybV9ncHVzdm1fc2Nhbl9tbSgpLiBBbGwgcGFnZXMgYmVsb25nIHRvXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTMzOC0gKiB0aGUgc2FtZSBkZXZpY2UgcHJpdmF0ZSBvd25lci5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzM5OiAqIEBEUk1fR1BVU1ZNX1NDQU5fU1lTVEVNOiBBbGwgcGFnZXMgYXJlIHByZXNlbnQgYW5kIHN5c3RlbSBwYWdlcy5cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQwOiAqIEBEUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFOiBBbGwgcGFnZXMgYXJlIGRldmljZSBwYWdlcyBhbmQgYmVsb25nIHRvIGF0IGxlYXN0XFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTM0MS0gKiB0d28gZGlmZmVyZW50IHN0cnVjdCBkZXZfcGFnZW1hcHMuIEFsbCBwYWdlcyBiZWxvbmcgdG8gdGhlIHNhbWUgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQyLSAqIG93bmVyLlxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNDM6ICogQERSTV9HUFVTVk1fU0NBTl9NSVhFRDogUGFnZXMgYXJlIHByZXNlbnQgYW5kIGFyZSBhIG1peCBvZiBzeXN0ZW0gcGFnZXNcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmgtMzQ0LSAqIGFuZCBkZXZpY2UtcHJpdmF0ZSBwYWdlcy4gQWxsIGRldmljZS1wcml2YXRlIHBhZ2VzIGJlbG9uZyB0byB0aGUgc2FtZSBkZXZpY2VcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD0zNDc9ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHtcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ4OlxcdERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzQ5OlxcdERSTV9HUFVTVk1fU0NBTl9FUVVBTCxcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUwOlxcdERSTV9HUFVTVk1fU0NBTl9PVEhFUixcXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6MzUxOlxcdERSTV9HUFVTVk1fU0NBTl9TWVNURU0sXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oOjM1MjpcXHREUk1fR1BVU1ZNX1NDQU5fTUlYRURfREVWSUNFLFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaDozNTM6XFx0RFJNX0dQVVNWTV9TQ0FOX01JWEVELFxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaC0zNTQtfTtcXG4tLVxcbmluY2x1ZGUvZHJtL2RybV9ncHVzdm0uaD01MzE9X19kcm1fZ3B1c3ZtX25vdGlmaWVyX25leHQoc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbi0tXFxuaW5jbHVkZS9kcm0vZHJtX2dwdXN2bS5oLTU3MC1cXG5pbmNsdWRlL2RybS9kcm1fZ3B1c3ZtLmg6NTcxOiNlbmRpZiAvKiBfX0RSTV9HUFVTVk1fSF9fICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjEwLjM3NDMyNjgzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc2NTkyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHUFUgVmlydHVhbGl6YXRpb24gU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBDT05GSUdfRFJNX0dQVVNWTWAgaXMgcHVsbGVkIGluIGJ5IGBDT05GSUdfRFJNX1hFX0dQVVNWTWAsIHdoaWNoIGlzIGluIHR1cm4gc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVgLiBUaGF0IG1lYW5zIHRoZSBgeGVgIGRyaXZlciwgSW50ZWwncyBYZSBkcml2ZXIsIGlzIGRlZmluaXRlbHkgdXNpbmcgdGhpcyBHUFUgdmlydHVhbGl6YXRpb24gZmVhdHVyZS4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0Li4uIGhhbmcgb24gYSBtaW51dGUuIEkgbmVlZCB0byByZW1lbWJlciB3aGF0J3MgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudC4gUmlnaHQsIFN5emthbGxlciwgaXQncyBwcmV0dHkgc3RhbmRhcmQsIEdDRS9RRU1VLCBkb2Vzbid0IHR5cGljYWxseSBoYXZlIHBoeXNpY2FsIEludGVsIFhlIEdQVXMuIFRoaXMgY291bGQgcHJlc2VudCBhIHByb2JsZW0uIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBhc3N1bXB0aW9ucyBoZXJlLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYGRybV9wYWdlbWFwLmNgIGFsc28gdXNlZCBieSBgbm91dmVhdWA/IExldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5vdXZlYXVgIGFjdHVhbGx5IG1ha2VzIHVzZSBvZiBgZHJtX3BhZ2VtYXBgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIFRoaXMgY291bGQgY2hhbmdlIHRoaW5ncyBhbmQgcHJvdmlkZSBhIGJldHRlciBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MTQuMzUwOTIyNjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAzNTYzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzoxNC40MTg5NjU1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzExMjgzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIFBhZ2UgTWFwcGluZyBpbiBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZGlmZmVyZW50IGRyaXZlcnMgaGFuZGxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJlY3QgcmVuZGVyaW5nLiBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUga2VybmVsJ3MgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGFuZCBob3cgZ3JhcGhpY3MgZHJpdmVycyBhbGxvY2F0ZSBhbmQgbWFuYWdlIEdQVSBtZW1vcnkuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgXCJub3V2ZWF1XCIgZHJpdmVyLCB3aGljaCBpcyBOdmlkaWEncyBvcGVuLXNvdXJjZSBkcml2ZXIsIHNwZWNpZmljYWxseSAqZG9lc24ndCogc2VlbSB0byBiZSBsZXZlcmFnaW5nIHRoZSBgZHJtX3BhZ2VtYXBgIGluZnJhc3RydWN0dXJlLCBhdCBsZWFzdCBub3QgaW4gYSB3YXkgdGhhdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSBteSBxdWljayBzY2FuLiBUaGlzIGlzIHNvbWV3aGF0IHN1cnByaXNpbmcsIGFuZCBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJjaGl0ZWN0dXJhbCBjaG9pY2UuXG5cbk5vdywgdGhpcyBzcGFya3MgYW5vdGhlciB0aG91Z2h0LiBJJ20gd29uZGVyaW5nIHdoYXQgdGhlIEFNRCBzaWRlIGxvb2tzIGxpa2UuIFNwZWNpZmljYWxseSwgaG93IGRvZXMgdGhlIGBhbWRncHVgIGRyaXZlciwgQU1EJ3MgZmxhZ3NoaXAgb3Blbi1zb3VyY2UgZ3JhcGhpY3MgZHJpdmVyLCBoYW5kbGUgdGhpcz8gRG9lcyBgYW1kZ3B1YCBmb2xsb3cgYSBzaW1pbGFyIHBhdGggYW5kIGF2b2lkIGBkcm1fcGFnZW1hcGAgZm9yIGl0cyBtZW1vcnkgbWFuYWdlbWVudD8gT3IsIGRvZXMgaXQgaGF2ZSBhIGNvbnRyYXN0aW5nIGFwcHJvYWNoPyBJJ2xsIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoYXQsIGFuZCB0aGVuLCBjb21wYXJlIHRob3NlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MTguNzMwMjUyMDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDQ0NDA2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2FtZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjE4Ljk2MDcwNTIxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU3MTA3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCBJJ20gdGhpbmtpbmcgaGVyZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkcm1fcGFnZW1hcC5jYCBzZWVtcyB0byBiZSBleGNsdXNpdmVseSB0aWVkIHRvIHRoZSBgeGVgIGRyaXZlciBhdCB0aGUgbW9tZW50LCB3aGljaCBzdHJpa2VzIG1lIGFzIGEgYml0IG9kZCwgdXN1YWxseSB0aGVzZSBzb3J0cyBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBoYXZlIGJyb2FkZXIgYXBwbGljYWJpbGl0eS4gQnV0IHdhaXQsIGEgbWVtb3J5IGpvZy4uLiBpc24ndCBgZHJtX3BhZ2VtYXAuY2AgcGFydCBvZiB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBtb2R1bGU/IE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgZHJtX2dwdXN2bV9oZWxwZXJgIHNvbGVseSB1c2VkIGJ5IHRoaXMgc3BlY2lmaWMgZHJpdmVyIG9yIGRvZXMgaXQgaGF2ZSBvdGhlciBjb25zdW1lcnMgd2l0aGluIHRoZSBjb2RlYmFzZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIHNjb3BlIG9mIHVzYWdlIHRvIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjIyLjMxNzgxNDk5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDIxMzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0xODItICAtICdkcm1fZ2VtX2Zvcl9lYWNoX2dwdXZtX2JvX3NhZmUnXFxuLmNsYW5nLWZvcm1hdDoxODM6ICAtICdkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlJ1xcbi5jbGFuZy1mb3JtYXQtMTg0LSAgLSAnZHJtX2dwdXZhX2Zvcl9lYWNoX29wJ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q9Njc9T3ZlcnZpZXcgb2YgYmFzZWxpbmUgZGVzaWduXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC02OS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3MDouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTcxLSAgIDpkb2M6IE92ZXJ2aWV3XFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzItXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6NzM6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03NC0gICA6ZG9jOiBMb2NraW5nXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3QtNzUtXFxuRG9jdW1lbnRhdGlvbi9ncHUvcmZjL2dwdXN2bS5yc3Q6NzY6Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03Ny0gICA6ZG9jOiBQYXJ0aWFsIFVubWFwcGluZyBvZiBSYW5nZXNcXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC03OC1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdDo3OTouLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTgwLSAgIDpkb2M6IEV4YW1wbGVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdD05MT1Qb3NzaWJsZSBmdXR1cmUgZGVzaWduIGZlYXR1cmVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2dwdS9yZmMvZ3B1c3ZtLnJzdC0xMDAtKiBSYW5nZXMgd2l0aCBtaXhlZCBzeXN0ZW0gYW5kIGRldmljZSBwYWdlc1xcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0OjEwMTpcXHQqIENhbiBiZSBhZGRlZCBpZiByZXF1aXJlZCB0byBkcm1fZ3B1c3ZtX2dldF9wYWdlcyBmYWlybHkgZWFzaWx5LlxcbkRvY3VtZW50YXRpb24vZ3B1L3JmYy9ncHVzdm0ucnN0LTEwMi0qIE11bHRpLUdQVSBzdXBwb3J0XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTA3PW9iai0kKENPTkZJR19EUk1fR1BVVk0pICs9IGRybV9ncHV2bS5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTEwOC1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XFx0ZHJtX2dwdXN2bS5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMTpkcm1fZ3B1c3ZtX2hlbHBlci0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTItXFx0ZHJtX3BhZ2VtYXAub1xcXFxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExNTpvYmotJChDT05GSUdfRFJNX0dQVVNWTSkgKz0gZHJtX2dwdXN2bV9oZWxwZXIub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTYtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3LSNpbmNsdWRlIFxcdTAwM2Nkcm0vZHJtX2RldmljZS5oXFx1MDAzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg6I2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fZ3B1c3ZtLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOS0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0LSAqIGV4Y2VwdCBmb3IgdGhlIHJlY2hlY2sgcmFuZ2UncyBwYWdlcyBiZWluZyB2YWxpZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU6ICogKGRybV9ncHVzdm1fcmFuZ2VfcGFnZXNfdmFsaWQpIHdoZW4gdGhlIGRyaXZlciBpcyBjb21taXR0aW5nIEdQVSBiaW5kaW5ncy5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2LSAqIFRoaXMgbG9jayBjb3JyZXNwb25kcyB0byB0aGUgYGBkcml2ZXItXFx1MDAzZXVwZGF0ZWBgIGxvY2sgbWVudGlvbmVkIGluXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMi0gKiBsb2NrIHRvIHNhZmVndWFyZCBjb3JlIEdQVSBTVk0gZnVuY3Rpb24gY2FsbHMgdGhhdCBtb2RpZnkgc3RhdGUsIHN1Y2ggYXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0IGFuZCBkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZS4gVGhpcyBsb2NrIGlzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDQtICogZGVub3RlZCBhcyAnZHJpdmVyX3N2bV9sb2NrJyBpbiBjb2RlIGV4YW1wbGVzLiBGaW5lciBncmFpbmVkIGRyaXZlciBzaWRlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDUtICogbG9ja2luZyBzaG91bGQgYWxzbyBiZSBwb3NzaWJsZSBmb3IgY29uY3VycmVudCBHUFUgZmF1bHQgcHJvY2Vzc2luZyB3aXRoaW4gYVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA2OiAqIHNpbmdsZSBHUFUgU1ZNLiBUaGUgJ2RyaXZlcl9zdm1fbG9jaycgY2FuIGJlIHZpYSBkcm1fZ3B1c3ZtX2RyaXZlcl9zZXRfbG9ja1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3LSAqIHRvIGFkZCBhbm5vdGF0aW9ucyB0byBHUFUgU1ZNLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDItICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE0MzogKlxcdGludCBkcml2ZXJfYmluZF9yYW5nZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNDQtICpcXHR7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQ5OiAqXFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl9sb2NrKGdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTA6ICpcXHRcXHRpZiAoZHJtX2dwdXN2bV9yYW5nZV9wYWdlc192YWxpZChyYW5nZSkpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTEtICpcXHRcXHRcXHRkcml2ZXJfY29tbWl0X2JpbmQoZ3B1c3ZtLCByYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1My0gKlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNTQ6ICpcXHRcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTU1LSAqXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE1OC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU5OiAqXFx0aW50IGRyaXZlcl9ncHVfZmF1bHQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTYwLSAqXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGdwdXZhX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGdwdXZhX2VuZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2MS0gKlxcdHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2MjogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCBjdHggPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2My0gKlxcdFxcdGludCBlcnI7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE2OS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTcwOiAqXFx0XFx0cmFuZ2UgPSBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KGdwdXN2bSwgZmF1bHRfYWRkcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE3MS0gKlxcdFxcdFxcdFxcdFxcdFxcdFxcdGdwdXZhX3N0YXJ0LCBncHV2YV9lbmQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE4NS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTg2OiAqXFx0XFx0ZXJyID0gZHJtX2dwdXN2bV9yYW5nZV9nZXRfcGFnZXMoZ3B1c3ZtLCByYW5nZSwgXFx1MDAyNmN0eCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODctICpcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQIHx8IGVyciA9PSAtRUZBVUxUIHx8IGVyciA9PSAtRVBFUk0pIHtcXHQvLyBDUFUgbWFwcGluZ3MgY2hhbmdlZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTg4LSAqXFx0XFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE4OTogKlxcdFxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QoZ3B1c3ZtLCByYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xOTAtICpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMDctICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwODogKlxcdHZvaWQgX19kcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIwOTogKlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxMC0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE0LSAqXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncy5wYXJ0aWFsX3VubWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjE1OiAqXFx0XFx0XFx0ZHJtX2dwdXN2bV9yYW5nZV9ldmljdChncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxNi0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjE3LSAqXFx0XFx0ZHJpdmVyX3VuYmluZF9yYW5nZShyYW5nZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMTg6ICpcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIxOS0gKlxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIyMC0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjIxOiAqXFx0dm9pZCBkcml2ZXJfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTIyMi0gKlxcdHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjMyLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyMzM6ICpcXHR2b2lkIGRyaXZlcl9pbnZhbGlkYXRpb24oc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzNDogKlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzUtICpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqbW11X3JhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjM2LSAqXFx0e1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjM3OiAqXFx0XFx0c3RydWN0IGRybV9ncHVzdm1fY3R4IGN0eCA9IHsgLmluX25vdGlmaWVyID0gdHJ1ZSwgfTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjIzODogKlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMzktICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjQxLSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDI6ICpcXHRcXHRkcm1fZ3B1c3ZtX2Zvcl9lYWNoX3JhbmdlKHJhbmdlLCBub3RpZmllciwgbW11X3JhbmdlLVxcdTAwM2VzdGFydCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI0My0gKlxcdFxcdFxcdFxcdFxcdCAgbW11X3JhbmdlLVxcdTAwM2VlbmQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI0NDogKlxcdFxcdFxcdGRybV9ncHVzdm1fcmFuZ2VfdW5tYXBfcGFnZXMoZ3B1c3ZtLCByYW5nZSwgXFx1MDAyNmN0eCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yNDUtICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjQ4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNDk6ICpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3NldF91bm1hcHBlZChyYW5nZSwgbW11X3JhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI1MC0gKlxcdFxcdFxcdGRyaXZlcl9nYXJiYWdlX2NvbGxlY3Rvcl9hZGQoZ3B1c3ZtLCByYW5nZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTI2OD1ucGFnZXNfaW5fcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3My0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI3NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSBub3RpZmllciBmcm9tIEdQVSBTVk1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI3NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjc4LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyNzk6ICogUmV0dXJuOiBBIHBvaW50ZXIgdG8gdGhlIGRybV9ncHVzdm1fbm90aWZpZXIgaWYgZm91bmQgb3IgTlVMTFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMjgwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MjgxOnN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI4Mjpkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4My1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI4OS1cXHRpZiAoaXRyZWUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTA6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5MS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5My19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9ub3RpZmllcl9maW5kKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjI5NzogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmQoKSAtIEZpbmQgR1BVIFNWTSByYW5nZSBmcm9tIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTI5OC0gKiBAbm90aWZpZXI6IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gbm90aWZpZXIgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDEtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMwMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgZHJtX2dwdXN2bV9yYW5nZSBpZiBmb3VuZCBvciBOVUxMXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDMtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMDQ6c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzA1OmRybV9ncHVzdm1fcmFuZ2VfZmluZChzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMDYtXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxMi1cXHRpZiAoaXRyZWUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihpdHJlZSwgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UsIGl0cmVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNC1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxNi19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMTc6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9maW5kKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTMxOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMyMDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUoKSAtIEludmFsaWRhdGUgYSBHUFUgU1ZNIG5vdGlmaWVyLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzIxLSAqIEBtbmk6IFBvaW50ZXIgdG8gdGhlIG1tdV9pbnRlcnZhbF9ub3RpZmllciBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTMzMT1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzMyOmRybV9ncHVzdm1fbm90aWZpZXJfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICptbmksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzMtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKm1tdV9yYW5nZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjMzNjpcXHRzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzM3LVxcdFxcdGNvbnRhaW5lcl9vZihtbmksIHR5cGVvZigqbm90aWZpZXIpLCBub3RpZmllcik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozMzg6XFx0c3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSA9IG5vdGlmaWVyLVxcdTAwM2VncHVzdm07XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zMzktXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1MS0vKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzUyOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfb3BzIC0gTU1VIGludGVydmFsIG5vdGlmaWVyIG9wZXJhdGlvbnMgZm9yIEdQVSBTVk1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM1My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM1NDpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgZHJtX2dwdXN2bV9ub3RpZmllcl9vcHMgPSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNTU6XFx0LmludmFsaWRhdGUgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ludmFsaWRhdGUsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNTYtfTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzU4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MzU5OiAqIGRybV9ncHVzdm1faW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgR1BVIFNWTS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM2MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc0LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzozNzU6ICogTm90ZTogSWYgb25seSB1c2luZyB0aGUgc2ltcGxlIGRybV9ncHVzdm1fcGFnZXMgQVBJIChnZXQvdW5tYXAvZnJlZSksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zNzYtICogdGhlbiBvbmx5IEBncHVzdm0sIEBuYW1lLCBhbmQgQGRybSBhcmUgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBzYW1lIGJhc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM3Ny0gKiBAZ3B1c3ZtIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBib3RoIG1vZGVzIHRvZ2V0aGVyIGluIHdoaWNoIGNhc2UgdGhlIGZ1bGxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM3ODogKiBzZXR1cCBpcyBuZWVkZWQsIHdoZXJlIHRoZSBjb3JlIGRybV9ncHVzdm1fcGFnZXMgQVBJIHdpbGwgc2ltcGx5IG5ldmVyIHVzZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMzc5LSAqIHRoZSBvdGhlciBmaWVsZHMuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Mi0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM4MzppbnQgZHJtX2dwdXN2bV9pbml0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zODQtXFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4Ny1cXHRcXHQgICAgdW5zaWduZWQgbG9uZyBub3RpZmllcl9zaXplLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6Mzg4OlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHJtX2dwdXN2bV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTM4OS1cXHRcXHQgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqY2h1bmtfc2l6ZXMsIGludCBudW1fY2h1bmtzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTUtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjM5NjpcXHRcXHQvKiBObyBmdWxsIFNWTSBtb2RlLCBvbmx5IGNvcmUgZHJtX2dwdXN2bV9wYWdlcyBBUEkuICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0zOTctXFx0XFx0aWYgKG9wcyB8fCBudW1fY2h1bmtzIHx8IG1tX3JhbmdlIHx8IG5vdGlmaWVyX3NpemUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0MjY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9pbml0KTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQyOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQyOTogKiB0b19kcm1fZ3B1c3ZtX25vdGlmaWVyKCkgLSByZXRyaWV2ZSB0aGUgY29udGFpbmVyIHN0cnVjdCBmb3IgYSBnaXZlbiByYnRyZWUgbm9kZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDMwOiAqIEBub2RlOiBhIHBvaW50ZXIgdG8gdGhlIHJidHJlZSBub2RlIGVtYmVkZGVkIHdpdGhpbiBhIGRybV9ncHVzdm1fbm90aWZpZXIgc3RydWN0XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzEtICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzMjogKiBSZXR1cm46IEEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBkcm1fZ3B1c3ZtX25vdGlmaWVyIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzMy0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQzNDpzdGF0aWMgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKnRvX2RybV9ncHVzdm1fbm90aWZpZXIoc3RydWN0IHJiX25vZGUgKm5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00MzUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDM2OlxcdHJldHVybiBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIsIGl0cmVlLnJiKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzNy19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQzOS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0MDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2luc2VydCgpIC0gSW5zZXJ0IEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ0MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NDUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0NDY6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9ub3RpZmllcl9pbnNlcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ0NzpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDQ4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDU1LVxcdGlmIChub2RlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDU2OlxcdFxcdGhlYWQgPSBcXHUwMDI2KHRvX2RybV9ncHVzdm1fbm90aWZpZXIobm9kZSkpLVxcdTAwM2VlbnRyeTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ1Ny1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2My0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ2NDogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZSgpIC0gUmVtb3ZlIEdQVSBTVk0gbm90aWZpZXJcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2NS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHRydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ2OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ3MDpzdGF0aWMgdm9pZCBkcm1fZ3B1c3ZtX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00NzctLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0Nzg6ICogZHJtX2dwdXN2bV9maW5pKCkgLSBGaW5hbGl6ZSB0aGUgR1BVIFNWTS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTQ3OS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDg0OnZvaWQgZHJtX2dwdXN2bV9maW5pKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0pXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NDg2OlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllciwgKm5leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00ODctXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODg6XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9ub3RpZmllcl9zYWZlKG5vdGlmaWVyLCBuZXh0LCBncHVzdm0sIDAsIExPTkdfTUFYKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0ODk6XFx0XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLCAqX19uZXh0O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDkwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy00OTYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo0OTc6XFx0XFx0ZHJtX2dwdXN2bV9mb3JfZWFjaF9yYW5nZV9zYWZlKHJhbmdlLCBfX25leHQsIG5vdGlmaWVyLCAwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNDk4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBMT05HX01BWClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjQ5OTpcXHRcXHRcXHRkcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShncHVzdm0sIHJhbmdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwMC1cXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNS19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MDY6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9maW5pKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUwOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjUwOTogKiBkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKCkgLSBBbGxvY2F0ZSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTAtICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTE2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTE3OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1MTg6ZHJtX2dwdXN2bV9ub3RpZmllcl9hbGxvYyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLCB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01MTkte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTIwOlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTUyMS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQxOiAqIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZSgpIC0gRnJlZSBHUFUgU1ZNIG5vdGlmaWVyXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01NDItICogQGdwdXN2bTogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ3OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTQ4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRybV9ncHVzdm1fbm90aWZpZXIgKm5vdGlmaWVyKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTQ5LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTU4LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTU5OiAqIHRvX2RybV9ncHVzdm1fcmFuZ2UoKSAtIHJldHJpZXZlIHRoZSBjb250YWluZXIgc3RydWN0IGZvciBhIGdpdmVuIHJidHJlZSBub2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjA6ICogQG5vZGU6IGEgcG9pbnRlciB0byB0aGUgcmJ0cmVlIG5vZGUgZW1iZWRkZWQgd2l0aGluIGEgZHJtX2dwdXN2bV9yYW5nZSBzdHJ1Y3RcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2MS0gKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTYyOiAqIFJldHVybjogQSBwb2ludGVyIHRvIHRoZSBjb250YWluaW5nIGRybV9ncHVzdm1fcmFuZ2Ugc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTYzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTY0OnN0YXRpYyBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqdG9fZHJtX2dwdXN2bV9yYW5nZShzdHJ1Y3QgcmJfbm9kZSAqbm9kZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU2NS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1NjY6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSwgaXRyZWUucmIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY3LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTY5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTcwOiAqIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KCkgLSBJbnNlcnQgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTcxLSAqIEBub3RpZmllcjogUG9pbnRlciB0byB0aGUgR1BVIFNWTSBub3RpZmllciBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc1LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTc2OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fcmFuZ2VfaW5zZXJ0KHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjU3NzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTc4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTgxLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTgyOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhub3RpZmllci1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTU4My1cXHRpbnRlcnZhbF90cmVlX2luc2VydChcXHUwMDI2cmFuZ2UtXFx1MDAzZWl0cmVlLCBcXHUwMDI2bm90aWZpZXItXFx1MDAzZXJvb3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01ODYtXFx0aWYgKG5vZGUpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo1ODc6XFx0XFx0aGVhZCA9IFxcdTAwMjYodG9fZHJtX2dwdXN2bV9yYW5nZShub2RlKSktXFx1MDAzZWVudHJ5O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTg4LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkxLVxcdGxpc3RfYWRkKFxcdTAwMjZyYW5nZS1cXHUwMDNlZW50cnksIGhlYWQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTkyOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfdW5sb2NrKG5vdGlmaWVyLVxcdTAwM2VncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTkzLX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNTk1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NTk2OiAqIF9fZHJtX2dwdXN2bV9yYW5nZV9yZW1vdmUoKSAtIFJlbW92ZSBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy01OTctICogQG5vdGlmaWVyOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIG5vdGlmaWVyIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MDEtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDI6c3RhdGljIHZvaWQgX19kcm1fZ3B1c3ZtX3JhbmdlX3JlbW92ZShzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MDM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjA0LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjA5LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjEwOiAqIGRybV9ncHVzdm1fcmFuZ2VfYWxsb2MoKSAtIEFsbG9jYXRlIEdQVSBTVk0gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYxMS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02MjAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjE6c3RhdGljIHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjYyMjpkcm1fZ3B1c3ZtX3JhbmdlX2FsbG9jKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2MjM6XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNC1cXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLCB1bnNpZ25lZCBsb25nIGNodW5rX3NpemUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTYyNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Mjc6XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNjI4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NDktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2NTA6ICogZHJtX2dwdXN2bV9obW1fcGZuX3RvX29yZGVyKCkgLSBHZXQgdGhlIGxhcmdlc3QgQ1BVIG1hcHBpbmcgb3JkZXIuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NTEtICogQGhtbV9wZm46IFRoZSBjdXJyZW50IGhtbV9wZm4uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY2Mi0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjY2MzpzdGF0aWMgdW5zaWduZWQgaW50IGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcih1bnNpZ25lZCBsb25nIGhtbV9wZm4sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NjQtXFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBobW1fcGZuX2luZGV4LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02NzgtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2Nzk6ICogZHJtX2dwdXN2bV9jaGVja19wYWdlcygpIC0gQ2hlY2sgcGFnZXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY4MC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy02OTAtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo2OTE6c3RhdGljIGJvb2wgZHJtX2dwdXN2bV9jaGVja19wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NjkyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTY5My1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzM3LVxcdFxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjczODpcXHRcXHRpICs9IDB4MSBcXHUwMDNjXFx1MDAzYyBkcm1fZ3B1c3ZtX2htbV9wZm5fdG9fb3JkZXIocGZuc1tpXSwgaSwgbnBhZ2VzKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTczOS1cXHR9XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc0NzogKiBkcm1fZ3B1c3ZtX3NjYW5fbW0oKSAtIENoZWNrIHRoZSBtaWdyYXRpb24gc3RhdGUgb2YgYSBkcm1fZ3B1c3ZtX3JhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3NDg6ICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSB0byBjaGVjay5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTc0OS0gKiBAZGV2X3ByaXZhdGVfb3duZXI6IFRoZSBzdHJ1Y3QgZGV2X3ByaXZhdGVfb3duZXIgdG8gdXNlIHRvIGRldGVybWluZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NTktICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjc2MDogKiBSZXR1cm46IFNlZSBcXHUwMDI2ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0LlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzYyOmVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzYzLVxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpkZXZfcHJpdmF0ZV9vd25lcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY2LVxcdHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm5vdGlmaWVyID0gXFx1MDAyNnJhbmdlLVxcdTAwM2Vub3RpZmllci1cXHUwMDNlbm90aWZpZXI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Njc6XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6NzY4OlxcdHVuc2lnbmVkIGxvbmcgZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtNzY5LVxcdHN0cnVjdCBobW1fcmFuZ2UgaG1tX3JhbmdlID0ge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzctXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo3Nzg6XFx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy03NzktXFx0dW5zaWduZWQgbG9uZyAqcGZucztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODA5LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODEwOlxcdGRybV9ncHVzdm1fbm90aWZpZXJfbG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTgxMS1cXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkobm90aWZpZXIsIGhtbV9yYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4MTI6XFx0XFx0ZHJtX2dwdXN2bV9ub3RpZmllcl91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04MTMtXFx0XFx0Z290byByZXRyeTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU1LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODU2OlxcdFxcdGkgKz0gMXVsIFxcdTAwM2NcXHUwMDNjIGRybV9ncHVzdm1faG1tX3Bmbl90b19vcmRlcihwZm5zW2ldLCBpLCBucGFnZXMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODU3LVxcdH1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg1OC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg1OTpcXHRkcm1fZ3B1c3ZtX25vdGlmaWVyX3VubG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTg2MC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY0LX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjg2NTpFWFBPUlRfU1lNQk9MKGRybV9ncHVzdm1fc2Nhbl9tbSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04NjctLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo4Njg6ICogZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKCkgLSBEZXRlcm1pbmUgY2h1bmsgc2l6ZSBmb3IgR1BVIFNWTSByYW5nZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtODY5LSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTg4ND1zdGF0aWMgdW5zaWduZWQgbG9uZ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg1OmRybV9ncHVzdm1fcmFuZ2VfY2h1bmtfc2l6ZShzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6ODg2OlxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX2dwdXN2bV9ub3RpZmllciAqbm90aWZpZXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy04ODctXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MDItXFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2U9IHZhcy1cXHUwMDNldm1fc3RhcnQgXFx1MDAyNlxcdTAwMjYgZW5kIFxcdTAwM2M9IHZhcy1cXHUwMDNldm1fZW5kIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDM6XFx0XFx0ICAgIHN0YXJ0IFxcdTAwM2U9IGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MDQ6XFx0XFx0ICAgIGVuZCBcXHUwMDNjPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2VuZChub3RpZmllcikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkwNS1cXHRcXHQgICAgc3RhcnQgXFx1MDAzZT0gZ3B1dmFfc3RhcnQgXFx1MDAyNlxcdTAwMjYgZW5kIFxcdTAwM2M9IGdwdXZhX2VuZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTE2LVxcdGlmIChlbmQgLSBzdGFydCAhPSBTWl80Sykge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTE3OlxcdFxcdHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkxOC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjkxOTpcXHRcXHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZChub3RpZmllciwgc3RhcnQsIGVuZCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MjAtXFx0XFx0aWYgKHJhbmdlKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMS1cXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSB3aXRoICdtaWdyYXRlLmNwYWdlcyAhPSBucGFnZXMnXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MzI6XFx0XFx0ICogYW5kIHRoZW4gdXBvbiBkcm1fZ3B1c3ZtX3JhbmdlX2dldF9wYWdlcyBkZXZpY2UgcGFnZXMgZnJvbVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMzLVxcdFxcdCAqIG90aGVyIHByb2Nlc3NlcyBhcmUgY29sbGVjdGVkICsgZmF1bHRlZCBpbiB3aGljaCBjcmVhdGVzIGFsbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05MzgtXFx0XFx0aWYgKGVuZCAtIHN0YXJ0IFxcdTAwM2M9IGNoZWNrX3BhZ2VzX3RocmVzaG9sZCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTM5OlxcdFxcdCAgICAhZHJtX2dwdXN2bV9jaGVja19wYWdlcyhncHVzdm0sIG5vdGlmaWVyLCBzdGFydCwgZW5kLCBkZXZfcHJpdmF0ZV9vd25lcikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0MC1cXHRcXHRcXHQrK2k7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk0OS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjk1MDogKiBkcm1fZ3B1c3ZtX2RyaXZlcl9sb2NrX2hlbGQoKSAtIEFzc2VydCBHUFUgU1ZNIGRyaXZlciBsb2NrIGlzIGhlbGRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk1MS0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTU0LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTU1OnN0YXRpYyB2b2lkIGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTU2LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTYwLSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5NjE6c3RhdGljIHZvaWQgZHJtX2dwdXN2bV9kcml2ZXJfbG9ja19oZWxkKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0pXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05NjYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5Njc6ICogZHJtX2dwdXN2bV9maW5kX3ZtYV9zdGFydCgpIC0gRmluZCBzdGFydCBhZGRyZXNzIGZvciBmaXJzdCBWTUEgaW4gcmFuZ2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk2OC0gKiBAZ3B1c3ZtOiBQb2ludGVyIHRvIHRoZSBHUFUgU1ZNIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz05NzU9dW5zaWduZWQgbG9uZ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6OTc2OmRybV9ncHVzdm1fZmluZF92bWFfc3RhcnQoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk3Ny1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTk5Ny19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5OTg6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9maW5kX3ZtYV9zdGFydCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy05OTktXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTAwMTogKiBkcm1fZ3B1c3ZtX3JhbmdlX2ZpbmRfb3JfaW5zZXJ0KCkgLSBGaW5kIG9yIGluc2VydCBHUFUgU1ZNIHJhbmdlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDAyLSAqIEBncHVzdm06IFBvaW50ZXIgdG8gdGhlIEdQVSBTVk0gc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTItICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDEzOnN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMTQ6ZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxNS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMTctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBncHV2YV9lbmQsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDE4OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkcm1fZ3B1c3ZtX2N0eCAqY3R4KVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAxOS17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDIwOlxcdHN0cnVjdCBkcm1fZ3B1c3ZtX25vdGlmaWVyICpub3RpZmllcjtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMjE6XFx0c3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAyMi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdwdXN2bS1cXHUwMDNlbW07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwMjgtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDI5OlxcdGRybV9ncHVzdm1fZHJpdmVyX2xvY2tfaGVsZChncHVzdm0pO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAzMC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTAzNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwMzg6XFx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2ZpbmQoZ3B1c3ZtLCBmYXVsdF9hZGRyLCBmYXVsdF9hZGRyICsgMSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDM5LVxcdGlmICghbm90aWZpZXIpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjEwNDA6XFx0XFx0bm90aWZpZXIgPSBkcm1fZ3B1c3ZtX25vdGlmaWVyX2FsbG9jKGdwdXN2bSwgZmF1bHRfYWRkcik7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDQxLVxcdFxcdGlmIChJU19FUlIobm90aWZpZXIpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwNDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgbW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDQ4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGRybV9ncHVzdm1fbm90aWZpZXJfc3RhcnQobm90aWZpZXIpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBkcm1fZ3B1c3ZtX25vdGlmaWVyX3NpemUobm90aWZpZXIpLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZHJtX2dwdXN2bV9ub3RpZmllcl9vcHMpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA1MS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMDcyLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTA3MzpcXHRyYW5nZSA9IGRybV9ncHVzdm1fcmFuZ2VfZmluZChub3RpZmllciwgZmF1bHRfYWRkciwgZmF1bHRfYWRkciArIDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA3NC1cXHRpZiAocmFuZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwODMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDg0OlxcdGNodW5rX3NpemUgPSBkcm1fZ3B1c3ZtX3JhbmdlX2NodW5rX3NpemUoZ3B1c3ZtLCBub3RpZmllciwgdmFzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA4NS1cXHRcXHRcXHRcXHRcXHRcXHQgZmF1bHRfYWRkciwgZ3B1dmFfc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTEwOTMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMDk0OlxcdHJhbmdlID0gZHJtX2dwdXN2bV9yYW5nZV9hbGxvYyhncHVzdm0sIG5vdGlmaWVyLCBmYXVsdF9hZGRyLCBjaHVua19zaXplLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTA5NS1cXHRcXHRcXHRcXHQgICAgICAgbWlncmF0ZV9kZXZtZW0pO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTAwLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTEwMTpcXHRkcm1fZ3B1c3ZtX3JhbmdlX2luc2VydChub3RpZmllciwgcmFuZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwMi1cXHRpZiAobm90aWZpZXJfYWxsb2MpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTAzOlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfaW5zZXJ0KGdwdXN2bSwgbm90aWZpZXIpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEwNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTExNi1cXHRpZiAobm90aWZpZXJfYWxsb2MpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTE3OlxcdFxcdGRybV9ncHVzdm1fbm90aWZpZXJfZnJlZShncHVzdm0sIG5vdGlmaWVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExMTgtZXJyX21tdW5sb2NrOlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIxLX1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMjI6RVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9maW5kX29yX2luc2VydCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTIzLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEyNC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExMjU6ICogX19kcm1fZ3B1c3ZtX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggR1BVIFNWTSBwYWdlcyAoaW50ZXJuYWwpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjIzLjg2ODAzMzczM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDU2MjA0NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSBvZiBEZXZpY2UgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkcm1fZ3B1c3ZtYCBmcmFtZXdvcmsuIEl0IHNlZW1zIGxpa2UgYSBnZW5lcmljIGhlbHBlciBmb3IgR1BVIFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSwgYW5kIHJpZ2h0IG5vdywgb25seSB0aGUgYHhlYCBkcml2ZXIgdXNlcyBpdC4gSG1tLCB3YWl0IGEgbWludXRlLCBgZHJtX3BhZ2VtYXAuY2AgaXMgYWN0dWFsbHkgcGFydCBvZiBgZHJtX2dwdXN2bV9oZWxwZXJgLCB3aGljaCBtZWFucyB0aGlzIGlzIGEgYmlnZ2VyIGFyZWEgdG8gY29uc2lkZXIuIElzIGFueXRoaW5nICplbHNlKiB1c2luZyBgZHJtX2dwdXN2bWA/IE5vLCBqdXN0IGB4ZWAuIFNpbmNlIFN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGZ1enogYHhlYCAocmVxdWlyZXMgcmVhbCBJbnRlbCBHUFUgaGFyZHdhcmUpLCBjaGFuZ2VzIHNwZWNpZmljYWxseSBpbiBgZHJtX3BhZ2VtYXAuY2AgYXJlIHByb2JhYmx5IHVucmVhY2hhYmxlIGluIGEgdHlwaWNhbCBTeXprYWxsZXIgZW52aXJvbm1lbnQuXG5cbkJ1dCB3aGF0IGFib3V0IGBtbS9taWdyYXRlX2RldmljZS5jYD8gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhpcyBpcyB1c2VkIGJ5IGB0ZXN0X2htbS5jYCwgd2hpY2ggU3l6a2FsbGVyICpkb2VzKiBmdXp6IHZpYSBgL2Rldi9obW1fZG1pcnJvcipgLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMga2V5IG1pZ3JhdGlvbiBmdW5jdGlvbnM6IGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYCwgYG1pZ3JhdGVfdm1hX3NwbGl0X3BtZF9tYXBwaW5nc2AsIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgYXJlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb25zIGZvciBkZXZpY2UgbWlncmF0aW9uLCBzbyBpZiB3ZSBjYW4gdHJpZ2dlciB0aGVtLCB3ZSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgaW50ZXJlc3RpbmcgYnVncy5cblxuQ2FuIGB0ZXN0X2htbWAgYWN0dWFsbHkgdHJpZ2dlciBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gPyBXZWxsLCBpdCdzIGNhbGxlZCB3aXRoaW4gYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgdGhhdCdzIHdoZW4gYGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pYCBpcyB0cnVlLiBPa2F5LCBjYW4gd2UgbWFwIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGFuZCB0aGVuIG1pZ3JhdGUgaXQgdXNpbmcgYHRlc3RfaG1tYD8gWWVzLCBgdGVzdF9obW1gIHVzZXMgc3RhbmRhcmQgYG1tYXBgIGNhbGxzLCBhbmQgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hVR0VQQUdFKWAgdG8gY3JlYXRlIFRIUHMsIHdoaWNoIGNvdWxkIHRoZW4gYmUgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSB1c2luZyB0aGUgYHRlc3RfaG1tYCBpb2N0bHMuXG5cbkxldCdzIGRpZyBpbnRvIGB0ZXN0X2htbWAgaXRzZWxmLiBUaGUgZHJpdmVyIGltcGxlbWVudHMgZHVtbXkgZGV2aWNlIG1lbW9yeSB1c2luZyBgREVWSUNFX1BSSVZBVEVgIHBhZ2VzLiBXaGVuIGEgdXNlciBjYWxscyBgSE1NX0RNSVJST1JfQ01EX01JR1JBVEVfVE9fREVWSUNFYCwgaXQgZW5kcyB1cCBjYWxsaW5nIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgd2hpY2ggZXZlbnR1YWxseSBjYWxscyBgbWlncmF0ZV92bWFfc2V0dXBgIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLiBJZiB3ZSBkaWQgbWFwIGEgVEhQLCBgbWlncmF0ZV92bWFfc2V0dXBgIHdvdWxkIGhhbmRsZSB0aGUgUE1ELiBHb29kISBXYWl0LCBgbWlncmF0ZV92bWFfc2V0dXBgICpkb2VzKiBoYW5kbGUgVEhQcyEgVGhhdCBpcyBleGNlbGxlbnQgbmV3cy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYG1pZ3JhdGVfdm1hX3NldHVwYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gY29uZmlybSB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MzIuOTI0MjQwODQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ5NTU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9NjYwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY2LS8qKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjY3OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTY2OC0gKiBAYXJnczogY29udGFpbnMgdGhlIHZtYSwgc3RhcnQsIGFuZCBwZm5zIGFycmF5cyBmb3IgdGhlIG1pZ3JhdGlvblxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3MzA6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG5tbS9taWdyYXRlX2RldmljZS5jLTczMS17XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc2OS19XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3NzA6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzEtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NzAtICpcXG5tbS9taWdyYXRlX2RldmljZS5jOjE0NzE6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3Mi0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2ZcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ3OC0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ3OTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDgwLSAqIG1pZ3JhdGluZyBwYWdlcyB0aGF0IGFyZW4ndCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNTQ5PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNTYxLVxcdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcXG5tbS9taWdyYXRlX2RldmljZS5jOjE1NjI6XFx0ICogZm9saW8gYXMgbWlncmF0ZV92bWFfc2V0dXAoKSB3aWxsIGZhaWwgaWYgYXJncy52bWEgPT0gTlVMTC5cXG5tbS9taWdyYXRlX2RldmljZS5jLTE1NjMtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjMyLjk5Mzc0MjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTg0Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuaXR0eS1ncml0dHk6IGRvZXMgdGhpcyBmdW5jdGlvbiwgYXMgaXQgc3RhbmRzLCBjb3JyZWN0bHkgaGFuZGxlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpPyBXZSBrbm93IGhvdyBjcnVjaWFsIFRIUCBtYW5hZ2VtZW50IGlzIGZvciBwZXJmb3JtYW5jZSBpbiBtb2Rlcm4gc3lzdGVtcywgYW5kIGEgbWlzc3RlcCBoZXJlIGNvdWxkIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb2RlIGlzIFRIUC1hd2FyZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgY2hlY2tzIGZvciBodWdlIHBhZ2UgbWFwcGluZ3M/IERvZXMgaXQgcHJvcGVybHkgcmUtbWFwIGh1Z2UgcGFnZXMgaWYgdGhleSBhcmUgc3BsaXQgb3IgbWVyZ2VkIGR1cmluZyBtaWdyYXRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGF0b21pY2l0eSBkdXJpbmcgdGhlIGVudGlyZSBwcm9jZXNzIHRoYXQgY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24/IFRoZXNlIGFyZSBzb21lIG9mIHRoZSBrZXkgcXVlc3Rpb25zIHRoYXQgSSBuZWVkIGFuc3dlcmVkIHRvIGNvbmZpcm0gaXQgaXMgdGhyZWFkLXNhZmUuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBhIGNsb3NlciBpbnNwZWN0aW9uIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcgYW5kIHBhZ2UgZmxhZ3MsIGlzIGluIG9yZGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGNvbXBsZXggYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIFRIUCBtYW5hZ2VtZW50IGlzIG5vdCBpbW1lZGlhdGVseSBhcHBhcmVudC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBoZXJlLCBvdGhlcndpc2UsIGl0IGNvdWxkIGNhdXNlIGJpZyBwcm9ibGVtcyBpbiBhIGxpdmUgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6MzYuNTM1NTkyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyMjQ4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmM9ODI9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjQ6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNS0gKiBmb2xpbyBmb3IgZGV2aWNlIHByaXZhdGUgcGFnZXMuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNS0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNjpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzctXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjU2LVxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjU3OlxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTI1OC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTUzPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05NjUtXFx0ICogc3BsaXRfaHVnZV9wbWRfYWRkcmVzcygpIHphcHMgcmF0aGVyIHRoYW4gZGVtb3RlcyBhIFBNRCBpbiBhIFZNQSB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo5NjY6XFx0ICogaXMgbm90IGFub255bW91cy4gbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCgpIGRvZXMgbm90IGNoZWNrIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTY3LVxcdCAqIFZNQSB0eXBlLCBzbyBhIGZpbGUgVEhQIGNhbiByZWFjaCBoZXJlOyB0aGUgcmVzdCBvZiB0aGUgbWlncmF0ZV92bWEoKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05ODYtXFx0ICogVGhlIGZvbGlvIGNhbm5vdCBnbyBhd2F5IHdoaWxlIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZDogdGhlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo5ODc6XFx0ICogcmVmZXJlbmNlIHRha2VuIGJ5IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBpcyBzdGlsbCBoZWxkLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTg4LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzozNi41Nzg4MjE5NDZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxNjcxNDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRIUCBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAga2lja3MgaW4gd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggaHVnZSBQTURzLCBtZWFuaW5nIFRIUHMgYXJlIGRlZmluaXRlbHkgc3VwcG9ydGVkIGR1cmluZyB0aGUgYG1pZ3JhdGVfdm1hX3NldHVwYCBwaGFzZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLiBBbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgIGl0c2VsZiBpcyB0aGUgd29ya2hvcnNlIGJlaGluZCBib3RoIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AuXG5cblNvLCB0aGUgZ2FtZSBwbGFuIGlzOiBgdGVzdF9obW1gIGNhbiBwb3RlbnRpYWxseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoIGlmIGl0J3MgbWlncmF0aW5nIGEgVEhQIHRvIGRldmljZSBtZW1vcnkuIFRoZW4sIGlmIHRoZSBkZXN0aW5hdGlvbiBkb2Vzbid0IHN1cHBvcnQgVEhQcywgb3IgaWYgdGhlIGFsbG9jYXRpb24gZ29lcyBiZWxseS11cCwgdGhlIGNvZGUgd2lsbCBzcGxpdCB0aGUgZm9saW8uXG5cbldhaXQgYSBzZWNvbmQsIGxldCBtZSB6b29tIGluIG9uIHRoYXQgY3JpdGljYWwgY29uZGl0aW9uLi4uIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBjYWxscyBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIG9ubHkgd2hlbiB0aGUgc291cmNlIFBGTiBpcyBtYXJrZWQgZm9yIG1pZ3JhdGlvbiAoYE1JR1JBVEVfUEZOX01JR1JBVEVgKSwgaXQncyBhIGxhcmdlIGZvbGlvIChgZm9saW9fdGVzdF9sYXJnZWApLCBhbmQgKmNydWNpYWxseSosIHRoZSBkZXN0aW5hdGlvbiBQRk4gZG9lcyAqbm90KiBoYXZlIGBNSUdSQVRFX1BGTl9DT01QT1VORGAgc2V0LiBUaGF0J3MgdGhlIGtleS4gSWYgdGhlIGRlc3RpbmF0aW9uIGxhY2tzIGBNSUdSQVRFX1BGTl9DT01QT1VORGAsIGl0IHRlbGxzIHVzIHRoZSBkZXN0aW5hdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIFRIUCwgb3IgYWxsb2NhdGlvbiBmYWlsdXJlLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaW4gYHRlc3RfaG1tLmNgLCBhcmUgd2Ugc2V0dGluZyBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIG9uIHRoZSBkZXN0aW5hdGlvbiB3aGVuIG1pZ3JhdGluZz8gVGhhdCdzIHRoZSBsaW5jaHBpbi4gSWYgd2UgKmRvbid0KiwgdGhlbiB0aGUgc3BsaXR0aW5nIGxvZ2ljIGlzIGd1YXJhbnRlZWQgdG8gYmUgZXhlcmNpc2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6NDIuNzk1NTM5NjQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwOTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNSUdSQVRFX1BGTl9DT01QT1VORFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xODg9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfZXZpY3RfY2h1bmsoc3RydWN0IGRtaXJyb3JfY2h1bmsgKmNodW5rKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjE0LVxcdFxcdHNwYWdlID0gQkFDS0lOR19QQUdFKHNwYWdlKTtcXG5saWIvdGVzdF9obW0uYzoyMTU6XFx0XFx0aWYgKHNyY19wZm5zW2ldIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpIHtcXG5saWIvdGVzdF9obW0uYy0yMTYtXFx0XFx0XFx0ZHBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvX2FsbG9jKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjI4LVxcdFxcdGlmIChvcmRlcilcXG5saWIvdGVzdF9obW0uYzoyMjk6XFx0XFx0XFx0ZHN0X3BmbnNbaV0gfD0gTUlHUkFURV9QRk5fQ09NUE9VTkQ7XFxubGliL3Rlc3RfaG1tLmMtMjMwLVxcdFxcdGZvbGlvX2NvcHkocGFnZV9mb2xpbyhkcGFnZSksIHBhZ2VfZm9saW8oc3BhZ2UpKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTczOT1zdGF0aWMgdm9pZCBkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHkoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtNzQ5LVxcdFxcdHN0cnVjdCBwYWdlICpycGFnZTtcXG5saWIvdGVzdF9obW0uYzo3NTA6XFx0XFx0Ym9vbCBpc19sYXJnZSA9ICpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORDtcXG5saWIvdGVzdF9obW0uYy03NTEtXFx0XFx0aW50IHdyaXRlID0gKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9XUklURSkgPyBNSUdSQVRFX1BGTl9XUklURSA6IDA7XFxuLS1cXG5saWIvdGVzdF9obW0uYy04MjUtXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8oZHBhZ2UpO1xcbmxpYi90ZXN0X2htbS5jOjgyNjpcXHRcXHRcXHQqZHN0IHw9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTgyNy1cXG4tLVxcbmxpYi90ZXN0X2htbS5jPTg5ND1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTkyMC1cXG5saWIvdGVzdF9obW0uYzo5MjE6XFx0XFx0aWYgKCpkc3QgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcXG5saWIvdGVzdF9obW0uYy05MjItXFx0XFx0XFx0bnIgPSBmb2xpb19ucl9wYWdlcyhwYWdlX2ZvbGlvKGRwYWdlKSk7XFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMDA0PXN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMzItXFx0XFx0aWYgKG9yZGVyKVxcbmxpYi90ZXN0X2htbS5jOjEwMzM6XFx0XFx0XFx0KmRzdCA9IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTEwMzQtXFx0XFx0aWYgKCpzcmMgXFx1MDAyNiBNSUdSQVRFX1BGTl9XUklURSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMzgtXFx0XFx0XFx0ZG1pcnJvci1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQztcXG5saWIvdGVzdF9obW0uYzoxMDM5OlxcdFxcdFxcdCpkc3QgXFx1MDAyNj0gfk1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jLTEwNDAtXFx0XFx0XFx0ZHBhZ2UgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo0Mi44NDI4NTczNzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjI1NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgQ29kZSBpbiBtbS9taWdyYXRlX2RldmljZS5jKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgY2FuIGJlIHRyaWdnZXJlZCwgYW5kIGB0ZXN0X2htbS5jYCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHJvdXRlLiBJdCBkZWZpbml0ZWx5ICpzdXBwb3J0cyogYE1JR1JBVEVfUEZOX0NPTVBPVU5EYCwgYW5kIHRoZXJlJ3MgZXZlbiBhIGZsYWcsIGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgLCB0aGF0ICpjbGVhcnMqIGl0IGFuZCBzZXRzIGBkcGFnZSA9IE5VTExgLiBBY3R1YWxseSwgd2FpdCBhIHNlY29uZC4uLiBpZiBgZHBhZ2VgIGlzIE5VTEwsIHRoZSBtaWdyYXRpb24gZmFpbHMgb3V0cmlnaHQuXG5cblRoZSBrZXkgaXMsIGlmIGB0ZXN0X2htbWAgYWxsb2NhdGVzIGFuICpvcmRlci0wKiBwYWdlIGluc3RlYWQgb2YgYSBUSFAsIGl0IHdvbid0IHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgIGluIHRoZSBmaXJzdCBwbGFjZSEgTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBJICpmb3JjZSogYHRlc3RfaG1tYCB0byBhbGxvY2F0ZSBvcmRlci0wIHBhZ2VzIHdoZW4gaXQgbm9ybWFsbHkgdHJpZXMgZm9yIGEgVEhQP1xuXG5Mb29raW5nIGF0IGBkbWlycm9yX21pZ3JhdGVfYWxsb2NfYW5kX2NvcHlgLCBpdCB1c2VzIGBkbWlycm9yX2Rldm1lbV9hbGxvY19wYWdlYC4gSXQgY2hlY2tzIGBpc19sYXJnZSA9ICpzcmMgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EYC4gSWYgYGlzX2xhcmdlYCAobWVhbmluZyB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSBsYXJnZSBwYWdlKSB0aGUgY29kZSB0cmllcyBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCB0cnVlKWAuIElmIHRoYXQgZmFpbHMsIGl0ICpmYWxscyBiYWNrKiB0byBhbiBvcmRlci0wIGFsbG9jYXRpb24gd2l0aCBgZG1pcnJvcl9kZXZtZW1fYWxsb2NfcGFnZShkbWlycm9yLCBmYWxzZSlgIGFuZCBzZXRzIGBpc19sYXJnZWAgdG8gZmFsc2UuIEJpbmdvISBJZiB0aGUgXCJ0cnVlXCIgYWxsb2NhdGlvbiBmYWlscywgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIVxuXG5UaGF0IGZhbGxiYWNrIHBhdGggbWVhbnMgdGhhdCBpdCAqd29uJ3QqIHNldCBgTUlHUkFURV9QRk5fQ09NUE9VTkRgLiBUaGlzIHdpbGwgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZSBmYWxsYmFjayBwYXRoIGluIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgbWVhbnMgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBnZXRzIGNhbGxlZC4gU28geWVzLCB0aGUgY29kZSBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgaXMgKnJlYWNoYWJsZSogdGhyb3VnaCBgdGVzdF9obW1gIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBcInRydWVcIiBhbGxvY2F0aW9uIGZhaWx1cmUuXG5cbk5vdywgd2hhdCBhYm91dCBgZHJtX3BhZ2VtYXAuY2A/IEl0IGludHJvZHVjZXMgZmF1bHQgaW5qZWN0aW9uLCBgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvYCwgYW5kIG1vZGlmaWVzIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlc2AgYW5kIGBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm5gLiBCdXQgaGVyZSdzIHRoZSBjYXRjaDogYGRybV9wYWdlbWFwLmNgIGlzIG9ubHkgdXNlZCBieSB0aGUgYHhlYCBkcml2ZXIuIEFuZCBgeGVgIGlzbid0IGZ1enplZCBpbiB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwOyBpdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIGxpa2VseSAqbm90KiByZWFjaGFibGUuIFdhaXQsIGxldCBtZSBqdXN0IHBhdXNlLi4uIGlzIGBkcm1fcGFnZW1hcC5jYCAqZXhjbHVzaXZlbHkqIHVzZWQgYnkgYHhlYD8gSXMgaXQgdXNlZCBieSAqYW55KiBvdGhlciBkcml2ZXI/IEkgdGhvdWdodCBJIGNoZWNrZWQgZWFybGllciBhbmQgZGV0ZXJtaW5lZCBpdCB3YXNuJ3QgYnV0IGxldCdzIGRvdWJsZS1jaGVjayB0aGUgdXNhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1MS4wOTkxMTYwOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzNzYyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRybV9wYWdlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNzQ0IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTExPWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMjpcXHRkcm1fcGFnZW1hcC5vXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTM6XFx0ZHJtX3BhZ2VtYXBfdXRpbC5vXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fZ3B1c3ZtLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxOTojaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0yMC0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wcmludC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNzgtICpcXHRcXHRpZiAoZHJpdmVyX21pZ3JhdGlvbl9wb2xpY3kocmFuZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxNzk6ICpcXHRcXHRcXHRlcnIgPSBkcm1fcGFnZW1hcF9wb3B1bGF0ZV9tbShkcml2ZXJfY2hvb3NlX2RybV9wYWdlbWFwKCksXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xODAtICpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBncHV2YV9zdGFydCwgZ3B1dmFfZW5kLCBncHVzdm0tXFx1MDAzZW1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYz04ODU9ZHJtX2dwdXN2bV9yYW5nZV9jaHVua19zaXplKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTkzMC1cXHRcXHQgKiByYW5nZXMuIFdoZW4gbWlncmF0aW5nIHRoZSBTVk0gcmFuZ2VzLCBzb21lIHByb2Nlc3NlcyBmYWlsIGluXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzo5MzE6XFx0XFx0ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0gd2l0aCAnbWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzJ1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtOTMyLVxcdFxcdCAqIGFuZCB0aGVuIHVwb24gZHJtX2dwdXN2bV9yYW5nZV9nZXRfcGFnZXMgZGV2aWNlIHBhZ2VzIGZyb21cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM9MTEzMz1zdGF0aWMgdm9pZCBfX2RybV9ncHVzdm1fdW5tYXBfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTM3OlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSBzdm1fcGFnZXMtXFx1MDAzZWRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTEzOC1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBncHVzdm0tXFx1MDAzZWRybS1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xMTYzLVxcdFxcdGZvciAoaSA9IDAsIGogPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBqKyspIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjExNjQ6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKmFkZHIgPSBcXHUwMDI2c3ZtX3BhZ2VzLVxcdTAwM2VkbWFfYWRkcltqXTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExNjUtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODctXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYzoxMTg4OlxcdFxcdGRybV9wYWdlbWFwX3B1dChzdm1fcGFnZXMtXFx1MDAzZWRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTExODktXFx0XFx0c3ZtX3BhZ2VzLVxcdTAwM2VkcGFnZW1hcCA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jPTE0MDg9aW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jLTE0MzItXFx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTQzMzpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTQzNC1cXHRzdHJ1Y3QgZHJtX2dwdXN2bV9wYWdlc19mbGFncyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTUyMC1cXHRcXHQgICAgaXNfZGV2aWNlX2NvaGVyZW50X3BhZ2UocGFnZSkpIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE1MjE6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqX196ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUyMjpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTIzLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM2LVxcdFxcdFxcdFxcdHBhZ2VtYXAgPSBwYWdlX3BnbWFwKHBhZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTUzNzpcXHRcXHRcXHRcXHRkcGFnZW1hcCA9IGRybV9wYWdlbWFwX3BhZ2VfdG9fZHBhZ2VtYXAocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTM4LVxcdFxcdFxcdFxcdGlmIChkcm1fV0FSTl9PTihncHVzdm0tXFx1MDAzZWRybSwgIWRwYWdlbWFwKSkge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTUzLVxcdFxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NDpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9nZXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmM6MTU1NTpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wdXQoc3ZtX3BhZ2VzLVxcdTAwM2VkcGFnZW1hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNTU2LVxcdFxcdFxcdFxcdHN2bV9wYWdlcy1cXHUwMDNlZHBhZ2VtYXAgPSBkcGFnZW1hcDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMtMTYwNy1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jOjE2MDg6XFx0XFx0XFx0c3ZtX3BhZ2VzLVxcdTAwM2VkbWFfYWRkcltqXSA9IGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYy0xNjA5LVxcdFxcdFxcdFxcdChhZGRyLCBEUk1fSU5URVJDT05ORUNUX1NZU1RFTSwgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMS0jaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9kcnYuaFxcdTAwM2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMjojaW5jbHVkZSBcXHUwMDNjZHJtL2RybV9wYWdlbWFwLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcGFnZW1hcF91dGlsLmhcXHUwMDNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2RybS9kcm1fcHJpbnQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTE4PXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobWlncmF0ZV90b19yYW1fZmF1bHRfaW5qZWN0KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIxLSAqIEZvcmNlIGEgaGlnaGVyLW9yZGVyIGRlc3RpbmF0aW9uIGZvbGlvIGFsbG9jYXRpb24gdG8gZmFpbCBpblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIyOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfcmFtX3BmbigpLCBleGVyY2lzaW5nIHRoZSBvcmRlci0wIGZhbGxiYWNrXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMtICogKGFuZCwgaW4gdHVybiwgdGhlIFRIUCBzcGxpdCBwYXRoIGluIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXMoKSkgd2l0aG91dFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjUtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjY6c3RhdGljIGJvb2wgZHJtX3BhZ2VtYXBfZmF1bHRfaW5qZWN0X2ZvbGlvKHZvaWQpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjcte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzAtI2Vsc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMTpzdGF0aWMgYm9vbCBkcm1fcGFnZW1hcF9mYXVsdF9pbmplY3RfZm9saW8odm9pZClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMi17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03Ni0gKiAtIERldmljZSBNZW1vcnkgQWxsb2NhdGlvbnM6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Nzc6ICogICAgICBFbWJlZGRlZCBzdHJ1Y3R1cmUgY29udGFpbmluZyBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHRoZSBkcm1fcGFnZW1hcCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc4LSAqICAgICAgbWlncmF0ZSB0byAvIGZyb20gZGV2aWNlIG1lbW9yeS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjg2OiAqIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgLSBHUFUgU1ZNIHpvbmUgZGV2aWNlIGRhdGFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04Ny0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtODktICogQGRldm1lbV9hbGxvY2F0aW9uOiBkZXZpY2UgbWVtb3J5IGFsbG9jYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MDogKiBAZHBhZ2VtYXA6IFJlZmNvdW50ZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBzdHJ1Y3QgZHJtX3BhZ2VtYXAuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTEtICpcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk5OnN0cnVjdCBkcm1fcGFnZW1hcF96ZGQge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwMC1cXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMDE6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb247XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTAyOlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXA7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTAzLX07XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDUtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA2OiAqIGRybV9wYWdlbWFwX3pkZF9hbGxvYygpIC0gQWxsb2NhdGUgYSB6ZGQgc3RydWN0dXJlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzogKiBAZHBhZ2VtYXA6IFBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgc3RydWN0IGRybV9wYWdlbWFwLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNDpzdGF0aWMgc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1OmRybV9wYWdlbWFwX3pkZF9hbGxvYyhzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNi17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMjQtXFx0emRkLVxcdTAwM2VkZXZtZW1fYWxsb2NhdGlvbiA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTI1OlxcdHpkZC1cXHUwMDNlZHBhZ2VtYXAgPSBkcm1fcGFnZW1hcF9nZXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzMC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzE6ICogZHJtX3BhZ2VtYXBfemRkX2dldCgpIC0gR2V0IGEgcmVmZXJlbmNlIHRvIGEgemRkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMzItICogQHpkZDogUG9pbnRlciB0byB0aGUgemRkIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzNy0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMzg6c3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKmRybV9wYWdlbWFwX3pkZF9nZXQoc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEzOS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDQtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTQ1OiAqIGRybV9wYWdlbWFwX3pkZF9kZXN0cm95KCkgLSBEZXN0cm95IGEgemRkIHN0cnVjdHVyZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNDYtICogQHJlZjogUG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGNvdW50IHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE0OS0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNTA6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3koc3RydWN0IGtyZWYgKnJlZilcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNTEte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE1MjpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkICp6ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE1MzpcXHRcXHRjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfemRkLCByZWZjb3VudCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTU0OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSA9IHpkZC1cXHUwMDNlZGV2bWVtX2FsbG9jYXRpb247XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTU1OlxcdHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAgPSB6ZGQtXFx1MDAzZWRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE1Ni1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2Mi1cXHRrZnJlZSh6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE2MzpcXHRkcm1fcGFnZW1hcF9wdXQoZHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE2NC19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNjYtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTY3OiAqIGRybV9wYWdlbWFwX3pkZF9wdXQoKSAtIFB1dCBhIHpkZCByZWZlcmVuY2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTY4LSAqIEB6ZGQ6IFBvaW50ZXIgdG8gdGhlIHpkZCBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xNzItICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTczOnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX3pkZF9wdXQoc3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3NC17XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTc1OlxcdGtyZWZfcHV0KFxcdTAwMjZ6ZGQtXFx1MDAzZXJlZmNvdW50LCBkcm1fcGFnZW1hcF96ZGRfZGVzdHJveSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTc2LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE3OC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxNzk6ICogZHJtX3BhZ2VtYXBfbWlncmF0aW9uX3VubG9ja19wdXRfZm9saW8oKSAtIFB1dCBhIG1pZ3JhdGlvbiBmb2xpb1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4MC0gKiBAZm9saW86IFBvaW50ZXIgdG8gdGhlIGZvbGlvIHRvIHB1dFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTgzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE4NDpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTE4NS17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTAtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTkxOiAqIGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKCkgLSBQdXQgbWlncmF0aW9uIHBhZ2VzXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTkyLSAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlc1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTk2LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjE5NzpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9taWdyYXRpb25fdW5sb2NrX3B1dF9wYWdlcyh1bnNpZ25lZCBsb25nIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xOTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4pXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTMtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjE0OlxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X2ZvbGlvKGZvbGlvKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMTUtXFx0XFx0bWlncmF0ZV9wZm5baV0gPSAwO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjIyLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIyMzogKiBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2UoKSAtIEdldCBhIHJlZmVyZW5jZSB0byBhIGRldmljZSBtZW1vcnkgcGFnZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIyNC0gKiBAcGFnZTogUG9pbnRlciB0byB0aGUgcGFnZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMwLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjIzMTpzdGF0aWMgdm9pZCBkcm1fcGFnZW1hcF9nZXRfZGV2bWVtX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjMyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMzM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTIzNC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzYtXFx0XFx0XFx0ICAgICAgIG9yZGVyKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyMzc6XFx0Zm9saW9fc2V0X3pvbmVfZGV2aWNlX2RhdGEocGFnZV9mb2xpbyhwYWdlKSwgZHJtX3BhZ2VtYXBfemRkX2dldCh6ZGQpKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjQwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI0MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcygpIC0gTWFwIGRldmljZSBwcml2YXRlIG1pZ3JhdGlvblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0Mi0gKiBwYWdlcyBmb3IgR1BVIFNWTSBtaWdyYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNDMtICogQGRldjogVGhlIGRldmljZSBwZXJmb3JtaW5nIHRoZSBtaWdyYXRpb24uXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjQ0OiAqIEBsb2NhbF9kcGFnZW1hcDogVGhlIGRybV9wYWdlbWFwIGxvY2FsIHRvIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI0NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSB0byBzdG9yZSBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXMuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0yNTg9c3RhdGljIGludFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI1OTpkcm1fcGFnZW1hcF9taWdyYXRlX21hcF9kZXZpY2VfcHJpdmF0ZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MjYwOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRybV9wYWdlbWFwICpsb2NhbF9kcGFnZW1hcCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNjE6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Mi1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjY0LVxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI2NTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9taWdyYXRlX2RldGFpbHMgKm1kZXRhaWxzKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI2Ni17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0yNzAtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtaWdyYXRlX3Bmbl90b19wYWdlKG1pZ3JhdGVfcGZuW2ldKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoyNzE6XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwX3pkZCAqemRkO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI3MjpcXHRcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI3MzpcXHRcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBhZGRyO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTI3NC1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjgzLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjI4NDpcXHRcXHR6ZGQgPSBkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEocGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMjg1LVxcdFxcdGRwYWdlbWFwID0gemRkLVxcdTAwM2VkcGFnZW1hcDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTMxNi0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozMTc6ICogc3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgLSBEUk0gcGFnZW1hcCBJT1ZBIHN0YXRlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzE4LSAqIEBkbWFfc3RhdGU6IERNQSBJT1ZBIHN0YXRlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzIzLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjMyNDpzdHJ1Y3QgZHJtX3BhZ2VtYXBfaW92YV9zdGF0ZSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzI1LVxcdHN0cnVjdCBkbWFfaW92YV9zdGF0ZSBkbWFfc3RhdGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMjktLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MzMwOiAqIGRybV9wYWdlbWFwX21pZ3JhdGVfbWFwX3N5c3RlbV9wYWdlcygpIC0gTWFwIHN5c3RlbSBvciBkZXZpY2UgY29oZXJlbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zMzEtICogbWlncmF0aW9uIHBhZ2VzIGZvciBHUFUgU1ZNIG1pZ3JhdGlvblxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MzQ2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDc6ZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzozNDg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM0OS1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm1pZ3JhdGVfcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzUxLVxcdFxcdFxcdFxcdCAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjM1MjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0zNTMte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMzkzLVxcdFxcdHBhZ2VtYXBfYWRkcltpXSA9XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6Mzk0OlxcdFxcdFxcdGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlKGRtYV9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTM5NS1cXHRcXHRcXHRcXHRcXHRcXHREUk1fSU5URVJDT05ORUNUX1NZU1RFTSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQwOC0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MDk6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9zcmNfcGFnZXMoKSAtIFBvcHVsYXRlIHRoZSBzb3VyY2UgcGFnZSBhcnJheVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQxMC0gKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJjZSBwYWdlcyB0byBwb3B1bGF0ZVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDE4LSAqIHRoZSBjb3B5IGNhbGxiYWNrIGRlcml2aW5nIHRoZSByZXN0IG9mIHRoZSBmb2xpbyBmcm9tIHRoZSBvcmRlciByZWNvcmRlZCBpblxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQxOTogKiB0aGUgY29ycmVzcG9uZGluZyBkcm1fcGFnZW1hcF9hZGRyLiBUaGF0IGRvZXMgbm90IHdvcmsgd2hlcmVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjA6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKCkgaGFkIHRvIGRlbW90ZSBhIGhpZ2hlci1vcmRlciBzb3VyY2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0MjE6ICogZm9saW8gdG8gb3JkZXItMCBkZXN0aW5hdGlvbiBmb2xpb3M6IHRoZSBkcm1fcGFnZW1hcF9hZGRyIGVudHJpZXMgYXJlIHRoZW5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjItICogcGVyLXBhZ2UsIGFuZCB0aGUgY29weSBjYWxsYmFjayBuZWVkcyBhIHNvdXJjZSBwYWdlIGZvciBlYWNoIG9mIHRoZW0uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00MjgtICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDI5OnN0YXRpYyB2b2lkIGRybV9wYWdlbWFwX21pZ3JhdGVfcG9wdWxhdGVfc3JjX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDMwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNyY19tcGZuLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDYwLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQ2MTogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3VubWFwX3BhZ2VzKCkgLSBVbm1hcCBwYWdlcyBwcmV2aW91c2x5IG1hcHBlZCBmb3IgR1BVIFNWTSBtaWdyYXRpb25cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NjItICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHBhZ2VzIHdlcmUgbWFwcGVkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDYzLSAqIEBtaWdyYXRlX3BmbjogQXJyYXkgb2YgbWlncmF0ZSBwZm5zIHNldCB1cCBmb3IgdGhlIG1hcHBlZCBwYWdlcy4gVXNlZCB0b1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjQ2NDogKiBkZXRlcm1pbmUgdGhlIGRybV9wYWdlbWFwIG9mIGEgcGVlciBkZXZpY2UgcHJpdmF0ZSBwYWdlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ2NS0gKiBAcGFnZW1hcF9hZGRyOiBBcnJheSBvZiBETUEgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBtYXBwZWQgcGFnZXNcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ3NC0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0NzU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfbWlncmF0ZV91bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDc2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTQ3Ny1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyAqbWlncmF0ZV9wZm4sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00NzktXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy00ODEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDk1LVxcdFxcdGlmIChpc196b25lX2RldmljZV9wYWdlKHBhZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NDk2OlxcdFxcdFxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IGRybV9wYWdlbWFwX3BhZ2Vfem9uZV9kZXZpY2VfZGF0YShwYWdlKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo0OTc6XFx0XFx0XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IHpkZC1cXHUwMDNlZHBhZ2VtYXA7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNDk4LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MTc6ZHJtX3BhZ2VtYXBfbWlncmF0ZV9yZW1vdGVfdG9fbG9jYWwoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZSAqcmVtb3RlX2RldmljZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MTk6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqcmVtb3RlX2RwYWdlbWFwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyMC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBsb2NhbF9wZm5zW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTIxLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZSAqcmVtb3RlX3BhZ2VzW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTIyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjMtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyNDpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1MjU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9taWdyYXRlX2RldGFpbHMgKm1kZXRhaWxzKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTUyNi1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01Mjcte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUyODpcXHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfZGV2aWNlX3ByaXZhdGVfcGFnZXMocmVtb3RlX2RldmljZSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJlbW90ZV9kcGFnZW1hcCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0MS1vdXQ6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTQyOlxcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMocmVtb3RlX2RldmljZSwgcGFnZW1hcF9hZGRyLCBsb2NhbF9wZm5zLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0My1cXHRcXHRcXHRcXHRcXHRucGFnZXMsIERNQV9GUk9NX0RFVklDRSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01NDc9c3RhdGljIGludFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU0ODpkcm1fcGFnZW1hcF9taWdyYXRlX3N5c190b19kZXYoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU0OS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzeXNfcGZuc1tdLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2UgKmxvY2FsX3BhZ2VzW10sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTUxOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTItXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU1MzpcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKm9wcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1NTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkcm1fcGFnZW1hcF9pb3ZhX3N0YXRlICpzdGF0ZSlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NTUte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU1NjpcXHRpbnQgZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9tYXBfc3lzdGVtX3BhZ2VzKGRldm1lbS1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU1Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcGFnZW1hcF9hZGRyLCBzeXNfcGZucyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU2Ni1vdXQ6XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTY3OlxcdGRybV9wYWdlbWFwX21pZ3JhdGVfdW5tYXBfcGFnZXMoZGV2bWVtLVxcdTAwM2VkZXYsIHBhZ2VtYXBfYWRkciwgc3lzX3BmbnMsIG5wYWdlcyxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NjgtXFx0XFx0XFx0XFx0XFx0RE1BX1RPX0RFVklDRSwgc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTc2LSAqIEBkZXZpY2U6IG1pZ3JhdGluZyBkZXZpY2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTc3OiAqIEBkcGFnZW1hcDogUG9pbnRlciB0byBzdHJ1Y3QgZHJtX3BhZ2VtYXAgdXNlZCBieSB0aGUgbWlncmF0aW5nIGRldmljZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01NzgtICogQG9wczogVGhlIGNvcHkgb3BzIHRvIGJlIHVzZWQgZm9yIHRoZSBtaWdyYXRpbmcgZGV2aWNlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTgwPXN0cnVjdCBtaWdyYXRlX3JhbmdlX2xvYyB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODItXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4MzpcXHRzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NDpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4NS19O1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4Ni1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODc6c3RhdGljIGludCBkcm1fcGFnZW1hcF9taWdyYXRlX3JhbmdlKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODgtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHNyY19wZm5zW10sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqcGFnZXNbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1OTE6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciBwYWdlbWFwX2FkZHJbXSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWlncmF0ZV9yYW5nZV9sb2MgKmxhc3QsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTkzLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG1pZ3JhdGVfcmFuZ2VfbG9jICpjdXIsXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTk0OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX21pZ3JhdGVfZGV0YWlscyAqbWRldGFpbHMpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTk1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1OTY6XFx0c3RydWN0IGRybV9wYWdlbWFwX2lvdmFfc3RhdGUgc3RhdGUgPSB7fTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01OTctXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MDgtXFx0aWYgKGxhc3QtXFx1MDAzZWRwYWdlbWFwKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYwOTpcXHRcXHRyZXQgPSBkcm1fcGFnZW1hcF9taWdyYXRlX3JlbW90ZV90b19sb2NhbChkZXZtZW0sXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjEwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGFzdC1cXHUwMDNlZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjE4LVxcdGVsc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2MTk6XFx0XFx0cmV0ID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9zeXNfdG9fZGV2KGRldm1lbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2c3JjX3BmbnNbbGFzdC1cXHUwMDNlc3RhcnRdLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjMxLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjYzMjogKiBkcm1fcGFnZW1hcF9jcGFnZXMoKSAtIENvdW50IGNvbGxlY3RlZCBwYWdlc1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTYzMy0gKiBAbWlncmF0ZV9wZm46IEFycmF5IG9mIG1pZ3JhdGVfcGZuIGVudHJpZXMgdG8gYWNjb3VudFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQxLSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjY0MjpzdGF0aWMgaW50IGRybV9wYWdlbWFwX2NwYWdlcyh1bnNpZ25lZCBsb25nICptaWdyYXRlX3BmbiwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNjQzLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTY2Ni0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2Njc6ICogZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oKSAtIE1pZ3JhdGUgYSBzdHJ1Y3QgbW1fc3RydWN0IHJhbmdlIHRvIGRldmljZSBtZW1vcnlcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02NjgtICogQGRldm1lbV9hbGxvY2F0aW9uOiBUaGUgZGV2aWNlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIG1pZ3JhdGUgdG8uXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02ODktICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NjkwOmludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTItXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTM6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfbWlncmF0ZV9kZXRhaWxzICptZGV0YWlscylcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTQte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjY5NTpcXHRjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyAqb3BzID0gZGV2bWVtX2FsbG9jYXRpb24tXFx1MDAzZW9wcztcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo2OTY6XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGRldm1lbV9hbGxvY2F0aW9uLVxcdTAwM2VkcGFnZW1hcDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy02OTctXFx0c3RydWN0IGRldl9wYWdlbWFwICpwYWdlbWFwID0gZHBhZ2VtYXAtXFx1MDAzZXBhZ2VtYXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03MDgtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzA5OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnpkZCA9IE5VTEw7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzEwLVxcdHN0cnVjdCBwYWdlICoqcGFnZXM7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzExOlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHI7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzEyLVxcdHZvaWQgKmJ1ZjtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc0NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo3NDY6XFx0emRkID0gZHJtX3BhZ2VtYXBfemRkX2FsbG9jKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy03NDctXFx0aWYgKCF6ZGQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTc2OC1cXHRpZiAobWlncmF0ZS5jcGFnZXMgIT0gbnBhZ2VzIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NzY5OlxcdCAgICBkcm1fcGFnZW1hcF9jcGFnZXMobWlncmF0ZS5zcmMsIG5wYWdlcykgIT0gbnBhZ2VzKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNzcwLVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04MTktXFx0XFx0aWYgKHNyY19wYWdlIFxcdTAwMjZcXHUwMDI2IGlzX2RldmljZV9wcml2YXRlX3BhZ2Uoc3JjX3BhZ2UpKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODIwOlxcdFxcdFxcdHN0cnVjdCBkcm1fcGFnZW1hcF96ZGQgKnNyY196ZGQgPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjgyMTpcXHRcXHRcXHRcXHRkcm1fcGFnZW1hcF9wYWdlX3pvbmVfZGV2aWNlX2RhdGEoc3JjX3BhZ2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTgyMi1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1My1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTQ6XFx0XFx0ZHJtX3BhZ2VtYXBfZ2V0X2Rldm1lbV9wYWdlKHBhZ2UsIG9yZGVyLCB6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1NS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTY6XFx0XFx0LyogSWYgd2Ugc3dpdGNoZWQgdGhlIG1pZ3JhdGluZyBkcm1fcGFnZW1hcCwgbWlncmF0ZSBwcmV2aW91cyBwYWdlcyBub3cgKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo4NTc6XFx0XFx0ZXJyID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV9yYW5nZShkZXZtZW1fYWxsb2NhdGlvbiwgbWlncmF0ZS5zcmMsIG1pZ3JhdGUuZHN0LFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg1OC1cXHRcXHRcXHRcXHRcXHRcXHRwYWdlcywgcGFnZW1hcF9hZGRyLCBcXHUwMDI2bGFzdCwgXFx1MDAyNmN1cixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg3MC1cXHRjdXIub3BzID0gTlVMTDsgLyogRm9yY2UgbWlncmF0aW9uICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODcxOlxcdGVyciA9IGRybV9wYWdlbWFwX21pZ3JhdGVfcmFuZ2UoZGV2bWVtX2FsbG9jYXRpb24sIG1pZ3JhdGUuc3JjLCBtaWdyYXRlLmRzdCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy04NzItXFx0XFx0XFx0XFx0XFx0cGFnZXMsIHBhZ2VtYXBfYWRkciwgXFx1MDAyNmxhc3QsIFxcdTAwMjZjdXIsIG1kZXRhaWxzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg4Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6ODg3OlxcdFxcdGRybV9wYWdlbWFwX21pZ3JhdGlvbl91bmxvY2tfcHV0X3BhZ2VzKG5wYWdlcywgbWlncmF0ZS5kc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTg4OC1cXHRcXHRmb3IgKGkgPSBucGFnZXM7IGkgXFx1MDAzYyBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7ICsraSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxMC1lcnJfZnJlZTpcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5MTE6XFx0ZHJtX3BhZ2VtYXBfemRkX3B1dCh6ZGQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxMi1cXHRrdmZyZWUoYnVmKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkxOC19XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTE5OkVYUE9SVF9TWU1CT0xfR1BMKGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjAtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtOTIxLS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjkyMjogKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3JhbV9wZm4oKSAtIFBvcHVsYXRlIFJBTSBQRk5zIGZvciBhIFZNIGFyZWFcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MjMtICogQHZhczogUG9pbnRlciB0byB0aGUgVk0gYXJlYSBzdHJ1Y3R1cmUsIGNhbiBiZSBOVUxMXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05MzctICovXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6OTM4OnN0YXRpYyBpbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV9wb3B1bGF0ZV9yYW1fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTkzOS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqZmF1bHRfcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2MS1cXHRcXHRpZiAoZmF1bHRfcGFnZSkge1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MjpcXHRcXHRcXHRpZiAoZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKHNyY19wYWdlKSAhPVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk2MzpcXHRcXHRcXHQgICAgZHJtX3BhZ2VtYXBfcGFnZV96b25lX2RldmljZV9kYXRhKGZhdWx0X3BhZ2UpKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk2NC1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NzQtXFx0XFx0ICogbWlncmF0ZV9kZXZpY2VfcGZucygpLiBCb3RoIHRoZSBvcmRlci0wIGZhbGxiYWNrIGJlbG93IGFuZFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjk3NTpcXHRcXHQgKiBkcm1fcGFnZW1hcF9taWdyYXRlX3BvcHVsYXRlX3NyY19wYWdlcygpIHJlbHkgb24gdGhhdCwgYXNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy05NzYtXFx0XFx0ICogdGhleSBpbmRleCB0aGUgZm9saW8gZnJvbSBAaS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo5ODU6XFx0XFx0aWYgKG9yZGVyIFxcdTAwMjZcXHUwMDI2IGRybV9wYWdlbWFwX2ZhdWx0X2luamVjdF9mb2xpbygpKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTk4Ni1cXHRcXHRcXHRmb2xpbyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDcwLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzE6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3MjpzdGF0aWMgTExJU1RfSEVBRChkcm1fcGFnZW1hcF91bmhvbGRfbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3MzpzdGF0aWMgREVDTEFSRV9XT1JLKGRybV9wYWdlbWFwX3dvcmssIGRybV9wYWdlbWFwX2Rldl91bmhvbGRfd29yayk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3NC1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc1LS8qKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwNzY6ICogc3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIC0gU3RydWN0IHRvIGFpZCBpbiBkcm1fZGV2aWNlIHJlbGVhc2UuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA3NzogKiBAbGluazogTGluayBpbnRvIGRybV9wYWdlbWFwX3VuaG9sZF9saXN0IGZvciBkZWZlcnJlZCByZWZlcmVuY2UgcmVsZWFzZXMuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA3OC0gKiBAZHJtOiBkcm0gZGV2aWNlIHRvIHB1dC5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDc5LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTA4MDogKiBXaGVuIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIHJlbGVhc2VkLCB3ZSBhbHNvIG5lZWQgdG8gcmVsZWFzZSB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgxLSAqIHJlZmVyZW5jZSBpdCBob2xkcyBvbiB0aGUgZHJtIGRldmljZS4gSG93ZXZlciwgdHlwaWNhbGx5IHRoYXQgbmVlZHNcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDgyLSAqIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBmcm9tIGEgc3lzdGVtLXdpZGUgd29ya3F1ZXVlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODM6ICogRWFjaCB0aW1lIGEgc3RydWN0IGRybV9wYWdlbWFwIGlzIGluaXRpYWxpemVkXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4NC0gKiAob3IgcmUtaW5pdGlhbGl6ZWQgaWYgY2FjaGVkKSB0aGVyZWZvcmUgYWxsb2NhdGUgYSBzZXBhcmF0ZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODU6ICogZHJtX3BhZ2VtYXBfZGV2X2hvbGQgaXRlbSwgZnJvbSB3aGljaCB3ZSBwdXQgdGhlIGRybSBkZXZpY2UgYW5kXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA4Ni0gKiBhc3NvY2lhdGVkIG1vZHVsZS5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg3LSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwODg6c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIHtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDg5LVxcdHN0cnVjdCBsbGlzdF9ub2RlIGxpbms7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDkyLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTM6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTEwOTQte1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTU6XFx0c3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHR5cGVvZigqZHBhZ2VtYXApLCByZWYpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjEwOTY6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCA9IGRwYWdlbWFwLVxcdTAwM2VkZXZfaG9sZDtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMDk3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTA5OS1cXHQgKiBXZSBrbm93IHRoZSBwYWdlbWFwIHByb3ZpZGVyIGlzIGFsaXZlIGF0IHRoaXMgcG9pbnQsIHNpbmNlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwMDpcXHQgKiB0aGUgc3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMDEtXFx0ICogcGFnZW1hcCBwcm92aWRlciBkcm1fZGV2aWNlIGFuZCBpdHMgbW9kdWxlLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEwMy1cXHRkcGFnZW1hcC1cXHUwMDNlZGV2X2hvbGQgPSBOVUxMO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMDQ6XFx0ZHJtX3BhZ2VtYXBfc2hyaW5rZXJfYWRkKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTA1OlxcdGxsaXN0X2FkZChcXHUwMDI2ZGV2X2hvbGQtXFx1MDAzZWxpbmssIFxcdTAwMjZkcm1fcGFnZW1hcF91bmhvbGRfbGlzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEwNjpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZkcm1fcGFnZW1hcF93b3JrKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA3LVxcdC8qXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTA5LVxcdCAqIHBhZ2VfZnJlZSgpLCB0aGUgY2FsbGVyIGlzIGhvbGRpbmcgYSByZWZlcmVuY2Ugb24gdGhlIGRldl9wYWdlbWFwLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTA6XFx0ICogb3IgaWYgY2FsbGVkIGZyb20gZHJtX3BhZ2VtYXBfcHV0KCksIHRoZSBkaXJlY3QgY2FsbGVyIGlzIHN0aWxsIGFsaXZlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMTEtXFx0ICogVGhpcyBlbnN1cmVzIHdlIGNhbid0IHJhY2Ugd2l0aCBUSElTIG1vZHVsZSB1bmxvYWQuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTU6c3RhdGljIHZvaWQgZHJtX3BhZ2VtYXBfZGV2X3VuaG9sZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTE2LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTE3OlxcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2ZHJtX3BhZ2VtYXBfdW5ob2xkX2xpc3QpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMTg6XFx0c3RydWN0IGRybV9wYWdlbWFwX2Rldl9ob2xkICpkZXZfaG9sZCwgKm5leHQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTExOS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVxcdC8qXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMTpcXHQgKiBEZWZlcnJlZCByZWxlYXNlIG9mIGRybV9wYWdlbWFwIHByb3ZpZGVyIGRldmljZSBhbmQgbW9kdWxlLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMjItXFx0ICogVEhJUyBtb2R1bGUgaXMga2VwdCBhbGl2ZSBkdXJpbmcgdGhlIHJlbGVhc2UgYnkgdGhlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTEyMzpcXHQgKiBmbHVzaF93b3JrKCkgaW4gdGhlIGRybV9wYWdlbWFwX2V4aXQoKSBmdW5jdGlvbi5cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTI0LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEzNS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM2OnN0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2X2hvbGQgKlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMzc6ZHJtX3BhZ2VtYXBfZGV2X2hvbGQoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTM4LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTM5OlxcdHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZfaG9sZCAqZGV2X2hvbGQ7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE0MC1cXHRzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZHBhZ2VtYXAtXFx1MDAzZWRybTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNTQtLyoqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1NTogKiBkcm1fcGFnZW1hcF9yZWluaXQoKSAtIFJlaW5pdGlhbGl6ZSBhIGRybV9wYWdlbWFwXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1NjogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byByZWluaXRpYWxpemVcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU3LSAqXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE1ODogKiBSZWluaXRpYWxpemUgYSBkcm1fcGFnZW1hcCwgZm9yIHdoaWNoIGRybV9wYWdlbWFwX3JlbGVhc2VcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTU5LSAqIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLiBUaGlzIGludGVyZmFjZSBpcyBpbnRlbmRlZCBmb3IgdGhlXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2MDogKiBzaXR1YXRpb24gd2hlcmUgdGhlIGRyaXZlciBjYWNoZXMgYSBkZXN0cm95ZWQgZHJtX3BhZ2VtYXAuXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2MS0gKlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2My0gKi9cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY0OmludCBkcm1fcGFnZW1hcF9yZWluaXQoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcClcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY1LXtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY2OlxcdGRwYWdlbWFwLVxcdTAwM2VkZXZfaG9sZCA9IGRybV9wYWdlbWFwX2Rldl9ob2xkKGRwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY3LVxcdGlmIChJU19FUlIoZHBhZ2VtYXAtXFx1MDAzZWRldl9ob2xkKSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzItfVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNzM6RVhQT1JUX1NZTUJPTChkcm1fcGFnZW1hcF9yZWluaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzQtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE3NS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTc2OiAqIGRybV9wYWdlbWFwX2luaXQoKSAtIEluaXRpYWxpemUgYSBwcmUtYWxsb2NhdGVkIGRybV9wYWdlbWFwXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE3NzogKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCB0byBpbml0aWFsaXplLlxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNzgtICogQHBhZ2VtYXA6IFRoZSBhc3NvY2lhdGVkIGRldl9wYWdlbWFwIHByb3ZpZGluZyB0aGUgZGV2aWNlXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjUxLjQ0Mjg4NTAxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5ODA2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkcm1fcGFnZW1hcC5jYCoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgZHJtX3BhZ2VtYXAuY2AgYW5kIGl0cyByb2xlLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYHhlYCBkcml2ZXIgdXRpbGl6ZXMgaXQsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBkcm1fZ3B1c3ZtYC4gQnV0IHNvbWV0aGluZydzIG5pZ2dsaW5nIGF0IG1lLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgb25seSBkcml2ZXIgaW52b2x2ZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGBub3V2ZWF1YCBkcml2ZXIgZGlyZWN0b3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIG9yIGZvcmdvdHRlbiBhIG51YW5jZWQgaW50ZXJhY3Rpb24uIEl0J3MgYmVzdCB0byBiZSBzeXN0ZW1hdGljLCBhbmQgZG91YmxlLWNoZWNrLCBhbmQgbm90IGxldCBhc3N1bXB0aW9ucyBsZWFkIG1lIGFzdHJheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1NS44NDI2OTUyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzk0NDgwMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM3OjU2LjExNjY0ODA2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwNDI4MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEdyYXBoaWNzIERyaXZlciBPcHRpb25zKipcblxuQWxyaWdodCwgSSdtIGhpdHRpbmcgYSB3YWxsIHdpdGggYG5vdXZlYXVgLiBOb3RoaW5nJ3MgbWF0Y2hpbmcgdXAgdGhlcmUsIHdoaWNoIGlzIGEgYml0IG9mIGEgaGVhZC1zY3JhdGNoZXIgZ2l2ZW4gdGhlIGV4cGVjdGVkIGhhcmR3YXJlLiBPa2F5LCBsZXQncyBwaXZvdC4gSWYgYG5vdXZlYXVgIGlzbid0IGNvb3BlcmF0aW5nLCB0aGVuIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGBhbWRncHVgLiBJdCdzIGEga2V5IGRyaXZlciB0byBjaGVjayB0byBzZWUgaWYgaXQgc3VwcG9ydHMgdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlIGhhcmR3YXJlIGlzIHN1cHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAyMTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozNzo1OS4xNzcwNzg4MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mzk0OTA3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJtX3BhZ2VtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL2FtZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzc6NTkuNDQxMDM0ODA4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjQ4MjQzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFRhcmdldCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbml0aWFsbHkgdGhvdWdodCB0aGUgY2hhbmdlcyBpbiBgZHJtX3BhZ2VtYXAuY2Agd2VyZSBkZWFkIGNvZGUsIHNpbmNlIHRoZSBgeGVgIGRyaXZlciBpc24ndCBwYXJ0IG9mIHN0YW5kYXJkIFN5emthbGxlciBmdXp6aW5nLiBJdCBuZWVkcyBzcGVjaWZpYyBJbnRlbCBYZSBoYXJkd2FyZSwgd2hpY2ggaXNuJ3QgdGhlIFN5emthbGxlciBkZWZhdWx0LiBCdXQgd2FpdCwgdGhvc2UgY2hhbmdlcyBpbiBgZHJtX3BhZ2VtYXAuY2AgYXJlICpkZWZpbml0ZWx5KiB1bnJlYWNoYWJsZS4gQnV0IEkgc2VlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBhbmQgSSBrbm93IGB0ZXN0X2htbS5jYCBpcyBmdXp6ZWQsIHNvICp0aGF0KiBjb2RlIGlzIHJlYWNoYWJsZS5cblxuUmlnaHQsIGB0ZXN0X2htbS5jYCB1c2VzIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYW5kIGBtaWdyYXRlX3ZtYV9wYWdlc2AsIGFuZCBJJ20gcHJldHR5IHN1cmUgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBjYWxscyBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFNvIHRoZSBjb3JlIE1NIGNoYW5nZXMsIGxpa2UgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYCBhbmQgYF9fbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhcmUgKmRlZmluaXRlbHkqIGhpdCB3aGVuIGB0ZXN0X2htbWAgbWlncmF0ZXMgVEhQcy4gSSBjYW4gdHJ1c3QgdGhvc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiBleGVjdXRlZCBhbmQgdGVzdGVkLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJ1bmRvd24gb2YgdGhlIGZ1bmN0aW9ucyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdGhhdCB3ZXJlIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlOlxuKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfb25lYFxuKiAgIGBtaWdyYXRlX3ZtYV9zcGxpdF9wbWRfbWFwcGluZ3NgXG4qICAgYG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvYFxuKiAgIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYFxuKiAgIGBtaWdyYXRlX2RldmljZV9yYW5nZWBcbiogICBgbWlncmF0ZV9kZXZpY2VfcGZuc2BcblxuT2theSwgdGhlIGxhc3QgdHdvLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgIGFuZCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AgYXJlIGV4cG9ydGVkLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGB0ZXN0X2htbWAgYWN0dWFsbHkgKnVzZXMqIHRoZW0gZGlyZWN0bHkuIFRoYXQgd291bGQgYmUgdXNlZnVsLiBMZXQgbWUgc2NhbiBgdGVzdF9obW0uY2AgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjA2LjAwNTg2MzgzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNDY2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV9kZXZpY2VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTE4OD1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9ldmljdF9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9jaHVuayAqY2h1bmspXFxuLS1cXG5saWIvdGVzdF9obW0uYy0yMDAtXFxubGliL3Rlc3RfaG1tLmM6MjAxOlxcdG1pZ3JhdGVfZGV2aWNlX3JhbmdlKHNyY19wZm5zLCBzdGFydF9wZm4sIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjAyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucGFnZXM7IGkrKykge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMjMxLVxcdH1cXG5saWIvdGVzdF9obW0uYzoyMzI6XFx0bWlncmF0ZV9kZXZpY2VfcGFnZXMoc3JjX3BmbnMsIGRzdF9wZm5zLCBucGFnZXMpO1xcbmxpYi90ZXN0X2htbS5jOjIzMzpcXHRtaWdyYXRlX2RldmljZV9maW5hbGl6ZShzcmNfcGZucywgZHN0X3BmbnMsIG5wYWdlcyk7XFxubGliL3Rlc3RfaG1tLmMtMjM0LVxcdGt2ZnJlZShzcmNfcGZucyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjA2LjA1NDAyMTIwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQzMjgyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbWlncmF0ZV9kZXZpY2VgIENvZGUgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHRlc3RfaG1tLmNgIGluZGVlZCBjYWxscyBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX2ZpbmFsaXplYC4gVGhhdCBtZWFucyB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGF0IHRlc3QuIEV4Y2VsbGVudC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlICprZXkqIGZ1bmN0aW9ucy4gTGV0J3MgbGlzdCB0aG9zZSBpbml0aWFsbHk6IGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2AsIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gQnV0IHdhaXQuLi4gY2hlY2tpbmcgdGhlIGNvZGUgYWdhaW4gSSBzZWUgdGhhdCBgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW9gIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgYXJlIHN0YXRpYywgc28gdGhleSBhcmVuJ3QgZGlyZWN0bHkgZXhwb3J0ZWQuXG5cblRoZXJlZm9yZSwgdGhlIGFjdHVhbGx5ICpleHBvcnRlZCogZnVuY3Rpb25zIGFyZSBgbWlncmF0ZV92bWFfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgLiAgT2theSwgc28gdGhvc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGxpc3QgYXMgbXkgRm9jdXNTeW1ib2xzLiBIYW5nIG9uLCB0aG91Z2gg4oCTIGBtaWdyYXRlX3ZtYV9wYWdlc2AgKml0c2VsZiogZG9lc24ndCBoYXZlIGNoYW5nZXM7IGl0IGNhbGxzIGBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYW5kIHRoYXQgaXMgc3RhdGljLiAgU28gSSBvbmx5IG5lZWQgdG8gbGlzdCBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BmbnNgIGFzIGJlaW5nIG9mIGludGVyZXN0LlxuXG5GaW5hbGx5LCBsZXQncyBjb25zaWRlciB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBgQ09ORklHX1RFU1RfSE1NYCBpcyBvYnZpb3VzbHkgbmVlZGVkIHRvIGVuYWJsZSBgdGVzdF9obW1gLiAgSSBhbHNvIHJlY2FsbCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBiZWluZyByZXF1aXJlZCBieSBgbWlncmF0ZV9kZXZpY2UuY2AuIE5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgaW4gYG1tL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0MjgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MTIuMDk3MzA3Nzg3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjU5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI2Ni1cXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjY4LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MTIuMjg5NzM5NTk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODMzNDUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYFRFU1RfSE1NYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBURVNUX0hNTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgbGliL0tjb25maWcuZGVidWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBhbnkgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGZvciBhIGRlYnVnLXJlbGF0ZWQgb3B0aW9uIGxpa2UgdGhpcy4gQnkgZXhhbWluaW5nIHRoYXQgZmlsZSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgYFRFU1RfSE1NYCBhY3R1YWxseSAqZG9lcyosIGhvdyBpdCdzIHVzZWQsIHdoYXQgb3RoZXIgb3B0aW9ucyBvciBmZWF0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCdzIGVuYWJsZWQuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgY29kZSB0aGF0J3MgdXNpbmcgaXQuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBjb25maWd1cmF0aW9uLXJlbGF0ZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIyMzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoxNS44NzMwODc0NDJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ1NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBURVNUX0hNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzQ2PWNvbmZpZyBURVNUX01FTUlOSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNTMtXFxubGliL0tjb25maWcuZGVidWc6MzM1NDpjb25maWcgVEVTVF9ITU1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzU1LVxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjE1LjkyMTEzNzE5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU0ODg4Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBURVNUX0hNTSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcsIFwiT2theSwgYFRFU1RfSE1NYCAtIHRoYXQncyBhIGtleSBtb2R1bGUsIG9idmlvdXNseS4gQmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IHJ1bm5pbmcgaXQsIHR3ZWFraW5nIGl0LCBvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBhIHRob3JvdWdoIGRlcGVuZGVuY3kgY2hlY2suIE5vIHBvaW50IGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZSB0cm91Ymxlc2hvb3RpbmcgdW5leHBlY3RlZCByZXN1bHRzIGlmIEknbSBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbC5cIlxuXG5JJ20gdGhpbmtpbmcsIFwiSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcywgbW9kdWxlcywgYW5kIGV4dGVybmFsIHJlc291cmNlcyBhcmUgcHJlc2VudCwgY29ycmVjdGx5IHZlcnNpb25lZCwgYW5kIGFjY2Vzc2libGUuIElzIHRoZXJlIGEgZGVmaW5lZCBidWlsZCBwcm9jZXNzIG9yIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBJIG5lZWQgdG8gcmVmZXIgdG8/IFdoYXQgYWJvdXQgZGF0YSBmaWxlcz8gRG9lcyBpdCByZWx5IG9uIGFueSBzaGFyZWQgbGlicmFyaWVzIG9yIGN1c3RvbSBDKysgY29kZSB0aGF0J3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgaW4gdGhlIG1vZHVsZSdzIG1hbmlmZXN0P1wiIFxuXG5Fc3NlbnRpYWxseSwgXCJJJ20gbm90IGdvaW5nIHRvIHByb2NlZWQgYmVmb3JlIEkgaGF2ZSBhICpzb2xpZCogdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBURVNUX0hNTWAgcmVsaWVzIHVwb24uIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBUaGVyZSdzIHByb2JhYmx5IGEgZGVwZW5kZW5jaWVzIGZpbGUgdG8gY2hlY2sgb3IgYSBsaXN0IG9mIGltcG9ydHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUuXCIgRnJvbSB0aGVyZSwgSSB3aWxsIGxpa2VseSBmb3JtdWxhdGUgYSBwbGFuIHRvIHJ1biB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjU1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjE5Ljg3NjAyNzYwNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwMzEzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzM0Nj1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzUzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzNTQ6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzM1NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoxOS45MjYwNjQ5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkyNTUxNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIERlYnVnIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYFRFU1RfSE1NYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIGV4YW1pbmluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwb3NzaWJseSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGRlYnVnIG9wdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGBURVNUX0hNTWAgaW5mbHVlbmNlcyB0aGUgYnVpbGQgcHJvY2Vzcywgd2hhdCBmZWF0dXJlcyBpdCBlbmFibGVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZWN0aW9uIHRob3JvdWdobHkgdG8gY29uZmlkZW50bHkgY29uZmlndXJlIGFuZCB0cm91Ymxlc2hvb3QgYW55IEhNTSByZWxhdGVkIGlzc3VlcyB0aGF0IG1heSBhcmlzZSBpbiBteSB3b3JrLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlICd3aHknIGJlaGluZCB0aGUgJ3doYXQnIGluIHRoaXMgZGVidWcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI5NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoyMy42MTg2MjA1NDVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNTA6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzM1MTpcXHRcXG4zMzUyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzUzOlxcdFxcbjMzNTQ6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzM1NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzNTY6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzNTc6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzNTg6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzU5OlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzYwOlxcdFxcdGhlbHBcXG4zMzYxOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzM2MjpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzYzOlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzNjQ6XFx0XFxuMzM2NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzM2NjpcXHRcXG4zMzY3OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG4zMzY4OlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IGZyZWVpbmcgcGFnZXNcXFwiXFxuMzM2OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjIzLjYxOTA1MDA1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjEzOTYzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgaGFzIGRlcGVuZGVuY2llcywgc3BlY2lmaWNhbGx5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhyZWUgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHksIHNvIEknbGwgaW5jbHVkZSBgVEVTVF9ITU1gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYERFVklDRV9QUklWQVRFYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEJ1dCBoYW5nIG9uLi4uIEkgcmVtZW1iZXIgYFRFU1RfSE1NYCBpcyBhIHRyaXN0YXRlIGNvbmZpZyBvcHRpb24sIHdoaWNoIG1lYW5zIGl0ICpjb3VsZCogYmUgYnVpbHQgYXMgYSBtb2R1bGUuIEhvd2V2ZXIsIFN5emthbGxlciB1c3VhbGx5IHdvcmtzIGJlc3Qgd2hlbiBvcHRpb25zIGFyZSBlaXRoZXIgYnVpbHQtaW4gb3IgbG9hZGVkIGFzIGEgbW9kdWxlLiBTbywgaWYgYFRFU1RfSE1NYCBpcyBidWlsdCBhcyBhIG1vZHVsZSwgU3l6a2FsbGVyICpzaG91bGQqIGxvYWQgaXQgYXMgbG9uZyBhcyB0aGUgbW9kdWxlIGlzIHByZXNlbnQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXJvdW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIEhtbSwgSSdkIGJldHRlciBjb25maXJtIHRoYXQgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIHdoZW4gYERFVklDRV9QUklWQVRFYCBpcyBlbmFibGVkLCBzaW5jZSB0aGF0J3MgYSBrZXkgZGVwZW5kZW5jeS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODoyOC4yMzMwMTg1MzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjYzNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfZGV2aWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MjguMjc5Mjg3NjU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjkxNDQ5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAuLi4gdGhhdCdzIHRoZSBrZXkgdG8gY29tcGlsaW5nIGBtaWdyYXRlX2RldmljZS5jYC4gTWFrZXMgc2Vuc2UsIHRoZSBmaWxlIG5hbWUgaXMgcHJldHR5IGV4cGxpY2l0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBmZWF0dXJlcywgb3IgZGVwZW5kZW5jaWVzICplbmFibGUqIHRoaXMgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHRvIHNlZSB3aGF0IHB1bGxzIGl0IGluLiBXaGF0J3MgdXBzdHJlYW0gdGhhdCBtYWtlcyB0aGlzIHBvc3NpYmxlPyBMZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBHb3R0YSBkaWcgYSBsaXR0bGUgZGVlcGVyIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozMS41NDg0MzQ4OTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTQ0Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MzEuNTkzMzg1NjQxWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzMxODcwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRldmljZSBNaWdyYXRpb24gTG9naWMgRmxvdyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYERFVklDRV9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBicmVhayB0aGF0IGRvd24uIEl0J3MgY2xlYXJseSBhIGNvbWJpbmF0aW9uOiBpdCAqbXVzdCogaW52b2x2ZSBhIGBNSUdSQVRJT05gIHByb2Nlc3MgYW5kIGl0J3Mgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYSBgWk9ORV9ERVZJQ0VgLiBGaW5lLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNYWtlcyBzZW5zZSB0byBiZSBleHBsaWNpdCBhYm91dCB0aGUgc2NvcGUuXG5cbk5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgZXhhY3RseSB3aGF0IGRlZmluZXMgYSBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbXBvbmVudCBpbiBkZXRhaWwgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERFVklDRV9NSUdSQVRJT05gLiBXaGF0IGRvZXMgdGhhdCB6b25lIHJlcHJlc2VudD8gV2hhdCBhcmUgdGhlIGtleSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHdpdGhpbiB0aGF0IHpvbmU/IFRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQyOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozNS4zNjY1NzU3NThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODY3MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMjM6Mzg6MzUuNDQwNDQ3MjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NTU2NjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRG91YmxlLUNoZWNraW5nIHRoZSBgREVWSUNFX1BSSVZBVEVgIFZhcmlhYmxlKipcblxuUmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoYXQgYERFVklDRV9QUklWQVRFYCB2YXJpYWJsZS4gSXQncyBiZWVuIG5hZ2dpbmcgYXQgbWUuIFdlJ3ZlIGdvdCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGJ1dCB3aXRoIG91ciBsZXZlbCBvZiBjb21wbGV4aXR5LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IHdlJ3JlIHN0aWxsIGhhbmRsaW5nIGFsbCB0aGUgaW1wbGljYXRpb25zIGNvcnJlY3RseS4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IGBERVZJQ0VfUFJJVkFURWAgaW50ZXJhY3RzIHdpdGggdGhlIHNlY3VyaXR5IGNvbnRleHQgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBhcyB3ZWxsIGFzIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBkZXZpY2VzLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVyYWN0aW9ucyB0aGVyZSBhcmUgc3RpbGwgYXMgYW50aWNpcGF0ZWQgYW5kIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMsIHBhcnRpY3VsYXJseSBhcm91bmQgcHJpdmlsZWdlIGVzY2FsYXRpb24gb3IgZGF0YSBsZWFrYWdlLiBHaXZlbiB0aGUgc2Vuc2l0aXZpdHkgb2YgdGhlIGRhdGEgdGhhdCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggaXQsIEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4gd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGxhc3QgcmV2aXNpb24gdG8gdGhlIGZpcm13YXJlLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgY29kZSBzZWdtZW50cyBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHNwb3QtY2hlY2sgd2l0aCB0aGUgZGVidWdnZXIgaXMgaW4gb3JkZXIuIEl0J3MgYWJvdXQgbWFpbnRhaW5pbmcgdGhhdCBjcml0aWNhbCBsZXZlbCBvZiByaWdvciwgbm90IGp1c3QgYXNzdW1pbmcgaXQncyBzb2xpZCBiZWNhdXNlIGl0ICpzaG91bGQqIGJlLiBJdCdzIG15IGd1dCB0ZWxsaW5nIG1lIHRvIG1ha2Ugc3VyZSwgaXQganVzdCBuZXZlciBodXJ0cyB0byBiZSBleHRyYSBjYXV0aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozOS44MDYwMTgwOTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjYwOlxcdGNvbmZpZyBITU1fTUlSUk9SXFxuMTI2MTpcXHRcXHRib29sXFxuMTI2MjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRjb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuMTI2NTpcXHRcXHRib29sXFxuMTI2NjpcXHRcXG4xMjY3OlxcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbjEyNjg6XFx0XFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcbjEyNjk6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbjEyNzA6XFx0XFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbjEyNzE6XFx0XFxuMTI3MjpcXHRcXHRoZWxwXFxuMTI3MzpcXHRcXHQgIEFsbG93cyBjcmVhdGlvbiBvZiBzdHJ1Y3QgcGFnZXMgdG8gcmVwcmVzZW50IHVuYWRkcmVzc2FibGUgZGV2aWNlXFxuMTI3NDpcXHRcXHQgIG1lbW9yeTsgaS5lLiwgbWVtb3J5IHRoYXQgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gdGhlIGRldmljZSAob3JcXG4xMjc1OlxcdFxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbjEyNzY6XFx0XFxuMTI3NzpcXHRjb25maWcgVk1BUF9QRk5cXG4xMjc4OlxcdFxcdGJvb2xcXG4xMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQyMzozODozOS44MDYxMTcxNjVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk2OTQ3NjgzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRGV2aWNlIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UndmUgZ290IGRlcGVuZGVuY2llcy4gYERFVklDRV9QUklWQVRFYCByZWxpZXMgb24gYFpPTkVfREVWSUNFYC4gSWYgYFRFU1RfSE1NYCBpcyBlbmFibGVkLCB3ZSdyZSBhbHNvIHB1bGxpbmcgaW4gYERFVklDRV9QUklWQVRFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlcmVmb3JlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgSSBzaG91bGQgYmUgdXNpbmcgZm9yIHRoaXMgbXVzdCBpbmNsdWRlIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgTUlHUkFUSU9OYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmNgIGFuZCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoZSBgZHJtX3BhZ2VtYXAuY2AgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgZHJtX2dwdXN2bWAsIHdoaWNoIHRoZSBgeGVgIGRyaXZlciB1dGlsaXplcy4gU2luY2Ugd2UncmUgbm90IGZ1enppbmcgdGhlIGB4ZWAgZHJpdmVyLCB0aGF0J3MgbGlrZWx5IGEgZGVhZCBlbmQgZm9yIG91ciBwdXJwb3Nlcy4gSG93ZXZlciwgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFyZSB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCBzcGVjaWZpY2FsbHkgdGhlIGFkZGl0aW9ucyBmb3IgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCwgYG1pZ3JhdGVfZGV2aWNlX3JhbmdlYCwgYW5kIGBtaWdyYXRlX2RldmljZV9wZm5zYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBgdGVzdF9obW0uY2AgbW9kdWxlLCB3aGljaCBpcyBhY3RpdmVseSBmdXp6ZWQgYnkgU3l6a2FsbGVyLiBUaGVzZSBjaGFuZ2VzIGZvY3VzIG9uIGhhbmRsaW5nIFRIUCBzcGxpdHRpbmcgZHVyaW5nIGRldmljZSBtaWdyYXRpb24gd2hlbiB0aGUgZGVzdGluYXRpb24gZG9lc24ndCBzdXBwb3J0IHRoZW0gb3IgYWxsb2NhdGlvbiBmYWlscy4gRnVuY3Rpb25hbGx5IHRoYXQncyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgLCBgbWlncmF0ZV9kZXZpY2VfcmFuZ2VgLCBgbWlncmF0ZV9kZXZpY2VfcGZuc2AsIGFuZCBgbWlncmF0ZV92bWFfcGFnZXNgLCBzaW5jZSBgX19taWdyYXRlX2RldmljZV9wYWdlc2AgaXMgY2FsbGVkIGZyb20gdGhlcmUgYXMgd2VsbC4gV2FpdCwgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBpcyBleHBvcnRlZCBhbmQgdXNlZCBieSBgdGVzdF9obW0uY2Agc3BlY2lmaWNhbGx5IGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIHdoZXJlYXMgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYCBpcyB1c2VkIGJ5IGBkbWlycm9yX2RldmljZV9ldmljdF9jaHVua2AuIFNvLCBhbGwgb2YgdGhlbSBhcmUgcmVhY2hhYmxlLlxuXG5RdWljayBzYW5pdHkgY2hlY2s6IGlzIGBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpb2Agc3RhdGljPyBZZXMsIGl0IGlzLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdDogYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoZSBgZHJtX3BhZ2VtYXAuY2AgY29kZSBtaWdodCBiZSByZWFjaGFibGUgdmlhIGFub3RoZXIgcm91dGUuIE9rYXksIGBkcm1fcGFnZW1hcC5jYCBoYXMgYGRybV9wYWdlbWFwX21vZHVsZV9pbml0YCB3aGljaCByZWdpc3RlcnMgYSBkZWJ1Z2ZzIGZpbGUuIEFoLCBJIHNlZTogYGRybV9wYWdlbWFwLmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgd2l0aCBgQ09ORklHX1pPTkVfREVWSUNFYCBlbmFibGVkIGFuZCBgZHJtX2dwdXN2bV9oZWxwZXJgIHNlbGVjdGVkLCB3aGljaCBpbiB0dXJuIGlzIHNlbGVjdGVkIGJ5IGBDT05GSUdfRFJNX0dQVVNWTWAgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYENPTkZJR19EUk1fWEVfR1BVU1ZNYC4gU28gaWYgYENPTkZJR19EUk1fWEVfR1BVU1ZNYCBpc24ndCBlbmFibGVkLCB0aGVuIGBkcm1fcGFnZW1hcC5jYCB3b24ndCBiZSBjb21waWxlZC4gQ291bGQgYENPTkZJR19EUk1fWEVgIGJlIGVuYWJsZWQgaW4gU3l6a2FsbGVyPyBVc3VhbGx5IGl0IGVuYWJsZXMgYWxsIGRyaXZlcnMsIHNvIHByb2JhYmx5LiBJZiBpdCBpcyBlbmFibGVkLCBgZHJtX3BhZ2VtYXAuY2AgKndvdWxkKiBjb21waWxlLiBCdXQgZXZlbiB0aGVuLCB0aG9zZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgYnkgdGhlIGB4ZWAgZHJpdmVyLiBTaW5jZSB3ZSdyZSB1bmxpa2VseSB0byBoYXZlIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlLCB0aGF0IGRyaXZlciB3b24ndCBwcm9iZSwgYW5kIHRob3NlIGZ1bmN0aW9ucyB3b3VsZG4ndCBiZSBjYWxsZWQuIFNvLCB0aGUgYGRybV9wYWdlbWFwLmNgIGNoYW5nZXMgYXJlIHVucmVhY2hhYmxlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggYHRlc3RfaG1tLmNgLlxuXG5UbyBzdW1tYXJpemU6IFRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIHRvIGhhbmRsZSBUSFAgc3BsaXR0aW5nIGR1cmluZyBkZXZpY2UgbWlncmF0aW9uLiBJdCBhbHNvIHRvdWNoZXMgYGRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jYCBmb3IgZmF1bHQgaW5qZWN0aW9uIHRlc3RpbmcsIHRob3VnaCB0aGF0IHBhcnQgaXMgdW5yZWFjaGFibGUgZm9yIHVzLiBUaGUgY29yZSBNTSBjaGFuZ2VzIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGB0ZXN0X2htbWAgcHNldWRvLWRldmljZSBkcml2ZXIsIGZ1enplZCBieSBzeXprYWxsZXIuIFRoZSBkcml2ZXIgY2FuIG1hcCBUSFBzIGFuZCBtaWdyYXRlIHRoZW0gdG8gZGV2aWNlIG1lbW9yeSwgd2hpY2ggdHJpZ2dlcnMgYG1pZ3JhdGVfdm1hX3BhZ2VzYCBhbmQgYG1pZ3JhdGVfZGV2aWNlX3BhZ2VzYC5cblxuU28gdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2AgYXJlIHdoYXQgSSBuZWVkOlxuLSBgVEVTVF9ITU1gXG4tIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWBcbi0gYERFVklDRV9QUklWQVRFYFxuLSBgWk9ORV9ERVZJQ0VgXG4tIGBNSUdSQVRJT05gXG5cbk15IG1haW4gRm9jdXNTeW1ib2xzIGFyZTpcbi0gYG1pZ3JhdGVfdm1hX3BhZ2VzYFxuLSBgbWlncmF0ZV9kZXZpY2VfcGFnZXNgXG4tIGBtaWdyYXRlX2RldmljZV9yYW5nZWBcbi0gYG1pZ3JhdGVfZGV2aWNlX3BmbnNgXG5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxNzQsIk91dHB1dFRva2VucyI6MzA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDIzOjM4OjU5LjUwMDg5MDE4OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjc4MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWlncmF0ZV92bWFfcGFnZXNcIixcbiAgICBcIm1pZ3JhdGVfZGV2aWNlX3BhZ2VzXCIsXG4gICAgXCJtaWdyYXRlX2RldmljZV9yYW5nZVwiLFxuICAgIFwibWlncmF0ZV9kZXZpY2VfcGZuc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTU0gZGV2aWNlIG1pZ3JhdGlvbiBsb2dpYyBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gc3VwcG9ydCBzcGxpdHRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQcykgd2hlbiBtaWdyYXRpbmcgdG8gZGV2aWNlIG1lbW9yeSBpZiB0aGUgZGVzdGluYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUSFBzIG9yIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBJdCBhbHNvIGFkZHMgZmF1bHQgaW5qZWN0aW9uIGluIGBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuY2AgdG8gdGVzdCB0aGlzIGZhbGxiYWNrLiBXaGlsZSB0aGUgRFJNIHBhZ2VtYXAgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIEludGVsIFhlIGRyaXZlciAod2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGlzIG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMpLCB0aGUgY29yZSBNTSBjaGFuZ2VzIGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHRoZSBgdGVzdF9obW1gIHBzZXVkby1kZXZpY2UgZHJpdmVyLiBTeXprYWxsZXIgYWN0aXZlbHkgZnV6emVzIGB0ZXN0X2htbWAsIHdoaWNoIGNhbiBtYXAgVEhQcyBhbmQgbWlncmF0ZSB0aGVtIHRvIGRldmljZSBtZW1vcnksIHRyaWdnZXJpbmcgdGhlIG1vZGlmaWVkIGBtaWdyYXRlX3ZtYV9wYWdlc2AgYW5kIGBtaWdyYXRlX2RldmljZV9wYWdlc2AgcGF0aHMuIFRoZSBgdGVzdF9obW1gIGRyaXZlciBldmVuIGhhcyBhIHNwZWNpZmljIGZsYWcgKGBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0NgKSB0byBzaW11bGF0ZSBhbGxvY2F0aW9uIGZhaWx1cmVzLCB3aGljaCB3aWxsIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgVEhQIHNwbGl0dGluZyBmYWxsYmFjayBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4hv5[1] Phase: Succeeded StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 2026-08-05 23:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 2026-08-05 23:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[2] Phase: Running StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 2026-08-05 23:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 23:39:10 +0000 UTC FinishedAt: 2026-08-05 23:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt4hv5/series-workflowt4hv5-convert-artifact-1158433729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Running StartedAt: 2026-08-05 23:39:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Running StartedAt: 2026-08-05 23:39:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*5bd69d80-f53f-4bbe-8237-63fd97117170,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-workflowt4hv5/series-workflowt4hv5-convert-artifact-1158433729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt4hv5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["migrate_vma_pages","migrate_device_pages","migrate_device_range","migrate_device_pfns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","TRANSPARENT_HUGEPAGE","DEVICE_PRIVATE","ZONE_DEVICE","MIGRATION"],"series_id":"2e7ea268-282a-4703-bca9-9196f95dd88d","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Running StartedAt: 2026-08-05 23:39:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*5bd69d80-f53f-4bbe-8237-63fd97117170,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-workflowt4hv5/series-workflowt4hv5-convert-artifact-1158433729/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,}