Name: series-workflowt2mk6 Phase: Succeeded StartedAt: 2026-07-31 08:30:51 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[0] Phase: Succeeded StartedAt: 2026-07-31 08:30:51 +0000 UTC FinishedAt: 2026-07-31 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 08:30:51 +0000 UTC FinishedAt: 2026-07-31 08:36:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "98cdbede-dc32-42a0-8b11-707715055a8f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gadgetfs_evict_inode", "ep_release", "dev_release", "gadget_dev_open", "ep_open", "dev_config", "ep_ioctl", "ep_read_iter", "ep_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYWRnZXRmc19ldmljdF9pbm9kZSYjMzQ7LAogICAgJiMzNDtlcF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Rldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2dhZGdldF9kZXZfb3BlbiYjMzQ7LAogICAgJiMzNDtlcF9vcGVuJiMzNDssCiAgICAmIzM0O2Rldl9jb25maWcmIzM0OywKICAgICYjMzQ7ZXBfaW9jdGwmIzM0OywKICAgICYjMzQ7ZXBfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O2VwX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIFVTQiBnYWRnZXRmcyBkcml2ZXIgYnkgbW92aW5nIHRoZSBgcHV0X2VwYCBjYWxsIGZyb20gYGRlc3Ryb3lfZXBfZmlsZXNgIHRvIGEgbmV3IGBnYWRnZXRmc19ldmljdF9pbm9kZWAgY2FsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGRyaXZlciAoZ2FkZ2V0ZnMgY2FuIGJlIHRlc3RlZCB2aWEgZHVtbXlfaGNkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTE2NmQxZWNhYTQzM2ZhNjhhZjNhZGU2MTg0ZDAyYjczYmE3N2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5hMDMwNjI5ODZiZjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xNTc5LDggJiM0MzsxNTc5LDYgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4gXHRcdC8qIGJyZWFrIGxpbmsgdG8gZGNhY2hlICovXG4gXHRcdHNpbXBsZV9yZW1vdmVfYnlfbmFtZShkZXYtXHUwMDNlc2ItXHUwMDNlc19yb290LCBlcC1cdTAwM2VuYW1lLCBOVUxMKTtcbiBcbi1cdFx0cHV0X2VwIChlcCk7XG4tXG4gXHRcdHNwaW5fbG9ja19pcnEgKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuQEAgLTE5OTYsNiAmIzQzOzE5OTQsNyBAQCBzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxuIFxuIFx0ZGVudHJ5ID0gc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKHNiLVx1MDAzZXNfcm9vdCwgbmFtZSk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkZW50cnkpO1xuIFx0fVxuQEAgLTIwMDYsOSAmIzQzOzIwMDUsMTggQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4mIzQzO1x0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuJiM0MztcdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG4mIzQzO1x0XHRwdXRfZXAoaW5vZGUtXHUwMDNlaV9wcml2YXRlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7XG4gXHQuc3RhdGZzID1cdHNpbXBsZV9zdGF0ZnMsXG4gXHQuZHJvcF9pbm9kZSA9XHRpbm9kZV9qdXN0X2Ryb3AsXG4mIzQzO1x0LmV2aWN0X2lub2RlID1cdGdhZGdldGZzX2V2aWN0X2lub2RlLFxuIH07XG4gXG4gc3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDExNjZkMWVjYWE0MzNmYTY4YWYzYWRlNjE4NGQwMmI3M2JhNzdjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCmluZGV4IGQ4N2E4YWI1MTUxMDcuLmEwMzA2Mjk4NmJmMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKQEAgLTE1NzksOCAmIzQzOzE1NzksNiBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKIAkJLyogYnJlYWsgbGluayB0byBkY2FjaGUgKi8KIAkJc2ltcGxlX3JlbW92ZV9ieV9uYW1lKGRldi0mZ3Q7c2ItJmd0O3Nfcm9vdCwgZXAtJmd0O25hbWUsIE5VTEwpOwogCi0JCXB1dF9lcCAoZXApOwotCiAJCXNwaW5fbG9ja19pcnEgKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxICgmYW1wO2Rldi0mZ3Q7bG9jayk7CkBAIC0xOTk2LDYgJiM0MzsxOTk0LDcgQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSwKIAogCWRlbnRyeSA9IHNpbXBsZV9zdGFydF9jcmVhdGluZyhzYi0mZ3Q7c19yb290LCBuYW1lKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKJiM0MzsJCWlub2RlLSZndDtpX3ByaXZhdGUgPSBOVUxMOwogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIAl9CkBAIC0yMDA2LDkgJiM0MzsyMDA1LDE4IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoJmFtcDtpbm9kZS0mZ3Q7aV9kYXRhKTsKJiM0MzsJY2xlYXJfaW5vZGUoaW5vZGUpOwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfcHJpdmF0ZSAmYW1wOyZhbXA7IGlub2RlLSZndDtpX2ZvcCA9PSAmYW1wO2VwX2lvX29wZXJhdGlvbnMpCiYjNDM7CQlwdXRfZXAoaW5vZGUtJmd0O2lfcHJpdmF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0gewogCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlID0JaW5vZGVfanVzdF9kcm9wLAomIzQzOwkuZXZpY3RfaW5vZGUgPQlnYWRnZXRmc19ldmljdF9pbm9kZSwKIH07CiAKIHN0YXRpYyBpbnQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0ZnMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgbG93LWxldmVsIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBlbmRwb2ludCAoYGVwYCkgb2JqZWN0IGhhbmRsaW5nIHdpdGhpbiB0aGUgZ2FkZ2V0ZnMgZnJhbWV3b3JrLgoKRmlyc3QsIGl0IGxvb2tzIGxpa2UgYHB1dF9lcChlcClgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGVzdHJveV9lcF9maWxlcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IFRoYXQgZnVuY3Rpb24mIzM5O3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNsZWFuIHVwIHJlc291cmNlcywgc28gcmVtb3ZpbmcgYSBgcHV0X2VwKClgIGNhbGwgdGhlcmUgaW1wbGllcyB0aGUgcmVzcG9uc2liaWxpdHkgaXMgc2hpZnRpbmcgZWxzZXdoZXJlIG9yIGl0JiMzOTtzIHBvdGVudGlhbGx5IHJlZHVuZGFudC4gRm9sbG93aW5nIHRoYXQgdGhyZWFkLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgaW5vZGUtJmd0O2lfcHJpdmF0ZSA9IE5VTEw7YCBpbiBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoKWAgdW5kZXIgYSBzcGVjaWZpYyBmYWlsdXJlIGNvbmRpdGlvbiBpbiBgc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKClgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBudWxsIG91dCB0aGF0IHBvaW50ZXIgdG8gcHJldmVudCBkYW5nbGluZyByZWZlcmVuY2VzIGlmIHRoZSBmaWxlIGNyZWF0aW9uIGZhaWxzLgoKVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYWRkaXRpb24sIHRob3VnaCwgaXMgYGdhZGdldGZzX2V2aWN0X2lub2RlKClgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIHNvbGUgcHVycG9zZSBpcyB0byBjYWxsIGBwdXRfZXAoaW5vZGUtJmd0O2lfcHJpdmF0ZSlgIGlmIGBpbm9kZS0mZ3Q7aV9wcml2YXRlYCBpcyBub3QgbnVsbCBhbmQgdGhlIGlub2RlJiMzOTtzIGZpbGUgb3BlcmF0aW9ucyBhcmUgcmVsYXRlZCB0byBhbiBlbmRwb2ludC4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGZpeC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW1wbGVtZW50aW5nIGRlbGF5ZWQgcmVzb3VyY2UgcmVsZWFzZSBkdXJpbmcgaW5vZGUgZXZpY3Rpb24sIHdoaWNoIGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIGZyZWVpbmcgZW5kcG9pbnQgcmVzb3VyY2VzIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lIHdoZW4gdGhlIGZpbGUgaXMgbm8gbG9uZ2VyIGluIHVzZS4gRmluYWxseSwgdGhleSYjMzk7dmUgcmVnaXN0ZXJlZCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGFzIHRoZSBgLmV2aWN0X2lub2RlYCBvcGVyYXRpb24gaW4gYGdhZGdldF9mc19vcGVyYXRpb25zYC4gVGhpcyB0aWVzIGl0IGFsbCB0b2dldGhlciwgZW5zdXJpbmcgdGhhdCBvdXIgbmV3IGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIGlub2RlIGlzIGJlaW5nIGV2aWN0ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIGlub2RlIGNhY2hlLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgb3IgYSBtZW1vcnkgbGVhay91c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHRpZWQgdG8gaG93IGBlcGAgb2JqZWN0cyBhcmUgbWFuYWdlZCBpbiBnYWRnZXRmcy4gU2luY2UgZ2FkZ2V0ZnMgY2FuIGJlIGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIHNjZW5hcmlvcywgZXZlbiB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGEgYGR1bW15X2hjZGAsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdpdmUgbW9yZSBhdHRlbnRpb24gdG8uIEkmIzM5O2Qgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyByZWxhdGVkIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGlzIGlzIHNvbWV0aGluZyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9ucy4gQW5kLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emluZyBtYXRlcmlhbC4gV2UgbmVlZCB0byB0aHJvdyBzb21lIGNyYWZ0ZWQgcGF5bG9hZHMgYXQgdGhpcyB0byBtYWtlIHN1cmUgdGhlIGVuZHBvaW50IHJlc291cmNlcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTIwNj1jb25maWcgVVNCX0dBREdFVEZTXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIxNS1cdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjIxNjpcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z2FkZ2V0ZnNcJiMzNDsuXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBHYWRnZXRGUyBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IHBvaW50aW5nIHRvd2FyZHMgYFVTQl9HQURHRVRGU2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzIHRvIHNlZSBleGFjdGx5IGhvdyBgaW5vZGUuY2AgZ2V0cyBjb21waWxlZCB1bmRlciB0aGlzIGNvbmZpZy4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgZmlndXJpbmcgb3V0IHRoZXNlIGxlZ2FjeSBnYWRnZXQgZHJpdmVyIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYW5kIGNvbXBpbGF0aW9uIHNwZWNpZmljcyByZWxhdGVkIHRvIGBpbm9kZS5jYCBoZXJlIGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHRyb3VibGVzaG9vdCBvciBleHRlbmQgYW55dGhpbmcgZ2FkZ2V0LXJlbGF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcdFx0XHQ6PSBnbWlkaS5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlOjE1OmdhZGdldGZzLXlcdFx0XHQ6PSBpbm9kZS5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlLTE2LWdfbWFzc19zdG9yYWdlLXlcdFx0Oj0gbWFzc19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEdhZGdldEZTIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgb2YgdGhlIExpbnV4IGtlcm5lbCBpcyBwcmV0dHkgc29saWQsIHNvIEkmIzM5O20gcXVpY2tseSBwdWxsaW5nIHVwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gWWVzLCAqZ2FkZ2V0ZnMqIOKAkyB0aGUgVVNCIGdhZGdldCBmaWxlc3lzdGVtIOKAkyBpcyBmdW5kYW1lbnRhbGx5IGJ1aWx0IGFyb3VuZCBhbmQgdXRpbGl6ZXMgY29kZSBmcm9tIGBpbm9kZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLCBhZnRlciBhbGwsIHNvIHRoZSBjb3JlIGlub2RlIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBrZXkuCgpOb3csIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIGZvciAqVVNCX0dBREdFVEZTKi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBpdCBoaW5nZXMgb24g4oCTIGFuZCB0aGluayBhYm91dCB3aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGluIGNhc2UgSSBuZWVkIHRvIG1vZGlmeSB0aGF0LiBNaWdodCBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaG9va3MgaW50byB0aGUgbGFyZ2VyIFVTQiBnYWRnZXQgZHJpdmVyIGZyYW1ld29yay4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUgZm9yIGFueSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0dBREdFVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIGxlZ2FjeSBVU0IgZ2FkZ2V0IGRyaXZlcnMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDIwNiBvZiB0aGUgZmlsZS4gVGhhdCBhcmVhIHByb2JhYmx5IGRlZmluZXMgYSBrZXkgc2VjdGlvbiBvciBvcHRpb24gdGhhdCYjMzk7cyByZWxldmFudCB0byB3aGF0IEkgbmVlZCB0byBhY2NvbXBsaXNoLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGxpa2VseSBiZSBkZXZpY2UgZHJpdmVycyBjb25maWd1cmVkLCBtYXliZSBmZWF0dXJlcyBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmVhcnRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHQgIG9mIHNldmVyYWwgZXRoZXJuZXQgZnJhbWVzIGludG8gb25lIFVTQiB0cmFuc2ZlciBhbmQgZGlmZmVyZW50XG4gMjAxOlx0XHQgIGFsaWdubWVudCBwb3NzaWJpbGl0aWVzLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjA0Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dfbmNtXCYjMzQ7LlxuIDIwNTpcdFxuIDIwNjpcdGNvbmZpZyBVU0JfR0FER0VURlNcbiAyMDc6XHRcdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxuIDIxMDpcdFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcbiAyMTE6XHRcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJiMzOTt0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cbiAyMTI6XHRcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XG4gMjEzOlx0XHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cbiAyMTQ6XHRcbiAyMTU6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIxNjpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnYWRnZXRmc1wmIzM0Oy5cbiAyMTc6XHRcbiAyMTg6XHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcbiAyMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Z1bmN0aW9uIEZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24sIGFuZCBpbW1lZGlhdGVseSwgbXkgdGhvdWdodCBwcm9jZXNzIGp1bXBzIHRvIGl0cyBwYXJlbnQg4oCTIGBVU0JfR0FER0VUYC4gVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wsIHRoZSBrZXlzdG9uZSBvZiB0aGUgd2hvbGUgc3lzdGVtLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGVyZSBhcmUgYSByYWZ0IG9mIG90aGVyIGZlYXR1cmVzIHRoYXQgaGluZ2Ugb24gYFVTQl9HQURHRVRgIGJlaW5nIGVuYWJsZWQsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgYWxsIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGFzc2VzcyB3aGF0IG9wdGlvbnMgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIChvciB1bmF2YWlsYWJsZSkgYXMgYSByZXN1bHQgb2YgbWFraW5nIGNoYW5nZXMgdG8gYFVTQl9HQURHRVRgLiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG5vdyB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxNzptZW51Y29uZmlnIFVTQl9HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEdhZGdldCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDc9aWYgVVNCX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTAtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo2Mzpjb25maWcgVVNCX0dBREdFVF9WRVJCT1NFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgTWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo5OTpjb25maWcgVVNCX0dBREdFVF9WQlVTX0RSQVdcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cdGludCBcJiMzNDtNYXhpbXVtIFZCVVMgUG93ZXIgdXNhZ2UgKDItNTAwIG1BKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTcuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0gaXMgZW5hYmxlZCBhbmQgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBVU0IgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgZ2V0IG1hZGUgYWJvdXQgd2hhdCBmZWF0dXJlcyB3ZSB3YW50IHRvIGV4cG9zZSB0byB1c2Vyc3BhY2UgYXMgYSBVU0IgZGV2aWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRyYWNlIG91dCB0byByZWxldmFudCBjb2RlIGFuZCBvdGhlciBrY29uZmlnIG9wdGlvbnMgYXMgbmVlZGVkLCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgaGlnaC1sZXZlbCBtYXAgb2YgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgVVNCIGdhZGdldCBzZXR1cDoKCioqTXkgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBnYWRnZXQgbW9kZSBpbXBsZW1lbnRhdGlvbiBhcmUgY2xlYXJseSBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgLiBUaG9zZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2Nrcywgbm8gcXVlc3Rpb24uIE5vdywgdG8gbWFrZSB0aGlzIHdvcmssIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGEgaG9zdCBjb250cm9sbGVyIGRyaXZlciAoSENEKSB0aGF0LCBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCAqYmVoYXZlcyogbGlrZSBhIFVTQiBnYWRnZXQsIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBuZWVkIHRvIGJlIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBuZWVkIHRvIHNpbXVsYXRlIGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIGVuYWJsZWQgb3IgaW5jbHVkZWQgc29tZWhvdy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIG1ha2luZyB0aGlzIHJ1biBzbW9vdGhseSBpbiB0aGUgYWJzZW5jZSBvZiBhIHJlYWwgZGV2aWNlLCByaWdodD8gR29vZC4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0RVTU1ZX0hDRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc9NDIyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NkbnMyL0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnOjQyODpjb25maWcgVVNCX0RVTU1ZX0hDRFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyOS1cdHRyaXN0YXRlIFwmIzM0O0R1bW15IEhDRCAoREVWRUxPUE1FTlQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVVNCX0RVTU1ZX0hDRGAgUGF0Y2ggZm9yIEdhZGdldGZzIFRlc3RpbmcqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBgVVNCX0RVTU1ZX0hDRGAgZm9yIHRlc3RpbmcgZ2FkZ2V0ZnMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCYjMzk7cyBhIHNvbGlkIGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gb24gdGhlIGNvcmUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGRlc3Ryb3lfZXBfZmlsZXNgLCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLCBhbmQgYSBuZXcgYWRkaXRpb24sIGBnYWRnZXRmc19ldmljdF9pbm9kZWAuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIHRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG0sIHRoYXQgY291bGQgbGltaXQgdGhlIHNjb3BlIG9mIHRoZWlyIGltcGFjdCwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZXNlIHN0YXRpYyBvbmVzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBleHRlbnQgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBkZXN0cm95X2VwX2ZpbGVzYCBmaXJzdC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyBiZWluZyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rlc3Ryb3lfZXBfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEzMzM9Z2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE1NTMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU1NDpzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNTU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU5MT1zdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYzMi1cdERCRyAoZGV2LCBcJiMzNDslcyBlbm9tZW1cXG5cJiMzNDssIF9fZnVuY19fKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjMzOlx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjM0LVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2Mzg9Z2FkZ2V0ZnNfdW5iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjUyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2NTM6XHRkZXN0cm95X2VwX2ZpbGVzIChkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NTQtXHRnYWRnZXQtXHUwMDNlZXAwLVx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgZ2FkZ2V0ZnNgIG1vZHVsZSBoYXMgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbnRlcmFjdGluZyB3aXRoIGl0cyBmaWxlIHN5c3RlbSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGdhZGdldGZzX3VuYmluZGAgaXMgY2FsbGluZyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgZmlsZXMgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgdW5tb3VudGVkLiBNYWtlcyBzZW5zZS4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgICphbHNvKiBjYWxscyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBwYXR0ZXJuLCBhbmQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEl0IG1lYW5zIHRoaXMgYGRlc3Ryb3lfZXBfZmlsZXNgIGlzIHByb2JhYmx5IGRvaW5nIHNvbWUgdmVyeSBjb3JlIHJlc291cmNlIGNsZWFudXAsIGFuZCBpcyBjYWxsZWQgaW4gYXQgbGVhc3QgdHdvIGNvbnRleHRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgYGFjdGl2YXRlX2VwX2ZpbGVzYCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBvdmVybGFwIG9yIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIG90aGVyIGlzc3VlcyB3aXRoaW4gdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgZW5kcG9pbnQgZmlsZXMuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmlsZXMgYXJlICpjcmVhdGVkKiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgd2hhdCBgZGVzdHJveV9lcF9maWxlc2AgaXMgYWN0dWFsbHkgZG9pbmcuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBwcm92aWRlcyB0aGUgZXNzZW50aWFsIGNvbnRleHQgZm9yIHdoYXQgbmVlZHMgdG8gYmUgZGVzdHJveWVkLiBJdCBtaWdodCBpbnZvbHZlIGFsbG9jYXRpb24sIHdoaWNoIGhhcyB0byBiZSBkZWFsbG9jYXRlZC4gSXQgY291bGQgYWxzbyBpbnZvbHZlZCBtZXRhZGF0YSwgd2hpY2ggd291bGQgYmUgaW1wb3J0YW50IHRvIGNsZWFyIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19jcmVhdGVfZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU1ND1zdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNTg4OnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4OS1cdFx0dm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTctXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxODpcdFx0ZXJyID0gZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKGRldi1cdTAwM2VzYiwgZGF0YS1cdTAwM2VuYW1lLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTktXHRcdFx0XHRkYXRhLCBcdTAwMjZlcF9pb19vcGVyYXRpb25zKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTk2Mz1nYWRnZXRmc19tYWtlX2lub2RlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTgzLSAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5ODQ6c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTg1LVx0XHR2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2Ni1cdGRldi1cdTAwM2VzYiA9IHNiO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjc6XHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBDYWxscyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAgaXMgY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaXMgbGlrZWx5IGJlaW5nIGluaXRpYWxpemVkLiBUaGVuLCBJIGFsc28gc2VlIHRoYXQgYGFjdGl2YXRlX2VwX2ZpbGVzYCBpcyAqYWxzbyogY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBwb2ludCBvZiBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWN0aXZhdGVfZXBfZmlsZXNgIGlzIGRvaW5nIGFuZCB3aHkgaXQgbmVlZHMgdG8gY3JlYXRlIGZpbGVzLCBhcyBJIHN1c3BlY3QgdGhlc2UgZmlsZXMgYXJlIHJlbGF0ZWQgdG8gZW5kcG9pbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBhY3RpdmF0ZV9lcF9maWxlc2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBhbHNvIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0aXZhdGVfZXBfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1ODg9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNTkxOnN0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE1OTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY2PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjg5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2OTA6XHRpZiAoYWN0aXZhdGVfZXBfZmlsZXMgKGRldikgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY5MS1cdFx0Z290byBlbm9tZW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdhZGdldEZTIEJpbmRpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgYW5kIHRyYWNpbmcgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSXQgc2VlbXMgYGdhZGdldGZzX2JpbmRgIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gdGhlbiBjYWxscyBgYWN0aXZhdGVfZXBfZmlsZXNgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIE5vdywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbW9kdWxlJiMzOTtzIHB1YmxpYyBpbnRlcmZhY2UsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRob3NlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGdhZGdldGZzX2JpbmRgLCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgYW5kIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gSXQmIzM5O3MgYSBxdWljayBleGVyY2lzZSB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgb3IgYXJlIGluZGVlZCBtZWFudCB0byBiZSBleHBvc2VkLiBLbm93aW5nIHRoZWlyIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hldGhlciBhbnkgb3V0c2lkZSBjb21wb25lbnRzIGNhbiBob29rIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY0PXN0YXRpYyBzdHJ1Y3QgZGV2X2RhdGFcdFx0KnRoZV9kZXZpY2U7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2NS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjY2OnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NjctXHRcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ0PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDUtXHQuZnVuY3Rpb25cdD0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc0NjpcdC5iaW5kXHRcdD0gZ2FkZ2V0ZnNfYmluZCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzQ3LVx0LnVuYmluZFx0XHQ9IGdhZGdldGZzX3VuYmluZCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc5OT1kZXZfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODczLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4NzQ6XHQvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODc1LVx0c3Bpbl91bmxvY2tfaXJxIChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEdhZGdldEZTIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnYWRnZXRmc2AgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBnYWRnZXRmc19iaW5kYCBmdW5jdGlvbi4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBSaWdodCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB0aGlzLiBJdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gTm93LCBnaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqYmVmb3JlKiBgZ2FkZ2V0ZnNfYmluZGAgaXMgY2FsbGVkLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYGdhZGdldGZzX2ZpbGxfc3VwZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gc2V0dXAgdHlwaWNhbGx5IGhhcHBlbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFzIGl0IHNob3VsZCBob2xkIHRoZSBrZXkgdGhhdCBsZWFkcyB0byB0aGUgY2FsbHMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgYGJpbmRgIHN0YXRpYyBmdW5jdGlvbiBJIGp1c3QgaWRlbnRpZmllZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjb25uZWN0aW9uIGlzIG1hZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAyMj1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAyMzpnYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyNC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwOTE9c3RhdGljIGludCBnYWRnZXRmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5Mi17XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA5MzpcdHJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGdhZGdldGZzX2ZpbGxfc3VwZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIEdhZGdldEZTIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBHYWRnZXRGUyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBmaWxlc3lzdGVtIGlzIGluaXRpYWxpemVkLiBJIHNlZSB0aGF0IGBnYWRnZXRmc19maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNhbWUgd2l0aCBgZ2FkZ2V0ZnNfZ2V0X3RyZWVgLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGEgcmV2aWV3IG9mIGBnYWRnZXRmc19pbml0YCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBnZXR0aW5nIHRoaXMgZmlsZXN5c3RlbSB1cCBhbmQgcnVubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBnYWRnZXRmc19jb250ZXh0X29wcyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5OS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTAwOnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTAxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEyMj1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEyNC1cdC5uYW1lXHRcdD0gc2hvcnRuYW1lLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMjU6XHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMjYtXHQua2lsbF9zYlx0PSBnYWRnZXRmc19raWxsX3NiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTI4PU1PRFVMRV9BTElBU19GUyhcJiMzNDtnYWRnZXRmc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEzMjpzdGF0aWMgaW50IF9faW5pdCBnYWRnZXRmc19pbml0ICh2b2lkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQxLX1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTQyOm1vZHVsZV9pbml0IChnYWRnZXRmc19pbml0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgR2FkZ2V0RlMgRmlsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBmaWxlIG9wZXJhdGlvbnMgZm9yIGdhZGdldGZzLiBSaWdodCwgdGhlIGtleSBhcmVhcyB0byBsb29rIGF0IGFyZSBkZWZpbml0ZWx5IGBlcF9pb19vcGVyYXRpb25zYCBhbmQgYGVwMF9vcGVyYXRpb25zYC4gVGhlc2UgYXJlIHRoZSBuYXR1cmFsIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgVVNCIGhhcmR3YXJlLCBhbmQgdGhlIGJ1bGsgb2YgdGhlIHByb2Nlc3Npbmcgd2lsbCBoYXBwZW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIG1vdmVkLCBob3cgcmVxdWVzdHMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGRldmljZSBlbXVsYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlc2Ugc3BlY2lmaWMgb3BlcmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIGEgc29saWQgZ3Jhc3Agb2YgZ2FkZ2V0ZnMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfaW9fb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NjM5PWVwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMS0vKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDMtXHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTgtXHRcdGVyciA9IGdhZGdldGZzX2NyZWF0ZV9maWxlIChkZXYtXHUwMDNlc2IsIGRhdGEtXHUwMDNlbmFtZSxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjE5Olx0XHRcdFx0ZGF0YSwgXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYyMC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAwOD1zdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDExLVx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTI6XHRpZiAoaW5vZGUtXHUwMDNlaV9wcml2YXRlIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX2ZvcCA9PSBcdTAwMjZlcF9pb19vcGVyYXRpb25zKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTMtXHRcdHB1dF9lcChpbm9kZS1cdTAwM2VpX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGVwMF9vcGVyYXRpb25zYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZXAwX29wZXJhdGlvbnNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlIGJhc2UuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgZXNzZW50aWFsIG9wZXJhdGlvbnMgZm9yIGVwaXNvZGUgemVybywgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0cyByb2xlIGFuZCBzdHJ1Y3R1cmUgYmVmb3JlIGdldHRpbmcgZGVlcCBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdXAgdG8gc3BlZWQgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBiZWdpbiBkZWJ1Z2dpbmcgYW55dGhpbmcgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXAwX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5MTI9Z2FkZ2V0X2Rldl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkyOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMwLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2Ni1cdGRldi1cdTAwM2VzYiA9IHNiO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjc6XHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZXBfaW9fb3BlcmF0aW9uc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGVwX2lvX29wZXJhdGlvbnNgIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nLCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIEkvTywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIGltcHJvdmVtZW50LiBBcmUgd2UgaGFuZGxpbmcgZXJyb3JzIGdyYWNlZnVsbHk/IFdoYXQmIzM5O3MgdGhlIHRocmVhZGluZyBtb2RlbCBoZXJlLCBhbmQgaG93IGlzIGl0IGltcGFjdGluZyBwZXJmb3JtYW5jZT8gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbiAtIGxldCYjMzk7cyBmaW5kIHRoYXQuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LiBLbm93aW5nIHRoZSBjdXJyZW50IHN0cmF0ZWd5IHdpbGwgaGVscCBtZSBkZWNpZGUgb24gY2hhbmdlcyBvciByZWZhY3RvcmluZyBpZiB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgZ2FpbnMgdG8gYmUgaGFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0LyogdXNlZCBhZnRlciBlbmRwb2ludCBjb25maWd1cmF0aW9uICovXG4gNzAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbiA3MDM6XHRcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbiA3MDQ6XHRcbiA3MDU6XHRcdC5vcGVuID1cdFx0ZXBfb3BlbixcbiA3MDY6XHRcdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG4gNzA3Olx0XHQudW5sb2NrZWRfaW9jdGwgPSBlcF9pb2N0bCxcbiA3MDg6XHRcdC5yZWFkX2l0ZXIgPVx0ZXBfcmVhZF9pdGVyLFxuIDcwOTpcdFx0LndyaXRlX2l0ZXIgPVx0ZXBfd3JpdGVfaXRlcixcbiA3MTA6XHR9O1xuIDcxMTpcdFxuIDcxMjpcdC8qIEVORFBPSU5UIElOSVRJQUxJWkFUSU9OXG4gNzEzOlx0ICpcbiA3MTQ6XHQgKiAgICAgZmQgPSBvcGVuIChcJiMzNDsvZGV2L2dhZGdldC8kRU5EUE9JTlRcJiMzNDssIE9fUkRXUilcbiA3MTU6XHQgKiAgICAgc3RhdHVzID0gd3JpdGUgKGZkLCBkZXNjcmlwdG9ycywgc2l6ZW9mIGRlc2NyaXB0b3JzKVxuIDcxNjpcdCAqXG4gNzE3Olx0ICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgY29uZmlndXJpbmdcbiA3MTg6XHQgKiB0aGUgY29udHJvbGxlciB0byBwcm9jZXNzIGJ1bGssIGludGVycnVwdCwgb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzXG4gNzE5Olx0ICogYXQgdGhlIHJpZ2h0IG1heHBhY2tldCBzaXplLCBhbmQgc28gb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgZXBvbGwgRmlsZSBPcGVyYXRpb25zKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb24gZW50cnkgcG9pbnRzIGZvciB0aGUgZXBvbGwgaW1wbGVtZW50YXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGRlZmluZSB0aGUgZXBvbGwmIzM5O3MgYmVoYXZpb3IgYXJlIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcmVhbGx5IG1hdHRlci4gTm93LCBob2xkIG9uLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcuIGBlcF9vcGVuYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyAqc3RpbGwqIHVzZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQmVzdCB0byBjaGVjayB0aGUgYGVwMF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSByZWFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGltcGxlbWVudGVkIGZpbGUgb3BlcmF0aW9ucywgYW5kIEkgZXhwZWN0IGBlcF9vcGVuYCB3aWxsIGJlIGFtb25nIHRoZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGV0YWlscyBhcmUgaGlkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkyNTpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjE5MjY6XHRcdHJldHVybiB2YWx1ZTtcbjE5Mjc6XHR9XG4xOTI4Olx0XG4xOTI5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XG4xOTMwOlx0XG4xOTMxOlx0XHQub3BlbiA9XHRcdGdhZGdldF9kZXZfb3BlbixcbjE5MzI6XHRcdC5yZWFkID1cdFx0ZXAwX3JlYWQsXG4xOTMzOlx0XHQud3JpdGUgPVx0ZGV2X2NvbmZpZyxcbjE5MzQ6XHRcdC5mYXN5bmMgPVx0ZXAwX2Zhc3luYyxcbjE5MzU6XHRcdC5wb2xsID1cdFx0ZXAwX3BvbGwsXG4xOTM2Olx0XHQudW5sb2NrZWRfaW9jdGwgPSBnYWRnZXRfZGV2X2lvY3RsLFxuMTkzNzpcdFx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG4xOTM4Olx0fTtcbjE5Mzk6XHRcbjE5NDA6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTk0MTpcdFxuMTk0MjpcdC8qIEZJTEVTWVNURU0gQU5EIFNVUEVSQkxPQ0sgT1BFUkFUSU9OU1xuMTk0MzpcdCAqXG4xOTQ0Olx0ICogTW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0gY3JlYXRlcyBhIGNvbnRyb2xsZXIgZmlsZSwgdXNlZCBmaXJzdCBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBGdW5jdGlvbnMgaW4gdGhlIFVTQiBHYWRnZXQgRHJpdmVyIENvbnRleHQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb3JlIGZ1bmN0aW9uczogYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIsIHRoZSBvbmVzIHRoYXQgaGFuZGxlIHRoZSBkZXZpY2Ugc2V0dXAsIGVuZHBvaW50IGNvbW11bmljYXRpb24sIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYXN5bmNocm9ub3VzIEkvTywgcG9sbGluZywgSU9DVEwgaGFuZGxpbmcsIGFuZCBkZXZpY2UgcmVsZWFzZSByZXNwZWN0aXZlbHkuIFRoZSBzdGFuZGFyZCBvcGVyYXRpb25zLCB0aGUgYnVpbGRpbmcgYmxvY2tzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBhZGRlZCBieSB0aGlzIHBhdGNoIHdlJiMzOTtyZSByZXZpZXdpbmcuIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhlcmUsIHNvIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGZpbGUgc3lzdGVtIGFuZCBkZXZpY2Ugbm9kZSBtYW5hZ2VtZW50LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhZGdldGZzX2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTg0PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDctXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAwODpzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnYWRnZXRfZnNfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxOC1cdC5kcm9wX2lub2RlID1cdGlub2RlX2p1c3RfZHJvcCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDE5Olx0LmV2aWN0X2lub2RlID1cdGdhZGdldGZzX2V2aWN0X2lub2RlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMjAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCdWcgRml4IGluIEdhZGdldEZTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgZml4aW5nIHNvbWV0aGluZyBpbiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGFuZCBgZGVzdHJveV9lcF9maWxlc2AuIFRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBmcmVlaW5nIGBlcGAgb2JqZWN0cywgd2hpY2ggaXMgYSBjb21tb24gYXJlYSBmb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycy4gU2luY2UgSSYjMzk7bSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIGBnYWRnZXRmc2Agc3Vic3lzdGVtLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBhZGRyZXNzZXMuCgpUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLCB3aGljaCB0aGUgcGF0Y2ggYWRkZWQsIGFuZCB0aGUgbW9kaWZpZWQgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBhbmQgYGRlc3Ryb3lfZXBfZmlsZXNgLiBXYWl0IGEgbWludXRlLi4uIHRoZXNlIGFyZSBhbGwgZGVjbGFyZWQgc3RhdGljLiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhleeKAmXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSBnZW5lcmFsIHN5c3RlbSwgdGhleSBhcmUgaW50ZXJuYWwgaGVscGVycy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBjb25zaWRlciB0aGUgZW50cnkgcG9pbnRzIHRoYXQgKmNhbGwqIHRoZXNlIGZ1bmN0aW9ucy4gIFRoYXTigJlsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBXZSBoYXZlIGBnYWRnZXRmc19maWxsX3N1cGVyYCBjYWxsaW5nIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb3VudGVkLiBUaGVuIHdlIGhhdmUgYGFjdGl2YXRlX2VwX2ZpbGVzYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgZ2FkZ2V0ZnNfYmluZGAuIE9uIHRoZSB1bmJpbmQgc2lkZSwgYGRlc3Ryb3lfZXBfZmlsZXNgIGlzIGNhbGxlZCBieSBgZ2FkZ2V0ZnNfdW5iaW5kYC4gQW5kIHRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgYGdhZGdldGZzX2tpbGxfc2JgIGlzIGludm9sdmVkIGhlcmUsIHdoaWNoIEkgbmVlZCB0byBjaGVjay4gIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgcG90ZW50aWFsbHkgaW52b2x2ZWQ6IGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBhbmQgYGdhZGdldF9kZXZfb3BlbmAsIHdoaWNoIGNvdWxkIGFsc28gaW5kaXJlY3RseSB0cmlnZ2VyIG9yIGJlIGltcGFjdGVkIGJ5IHRoaXMgYnVnLgoKUmlnaHQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZmlyc3QuIEl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19raWxsX3NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTA2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEwNzpnYWRnZXRmc19raWxsX3NiIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTIyPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI1LVx0LmluaXRfZnNfY29udGV4dCA9IGdhZGdldGZzX2luaXRfZnNfY29udGV4dCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTI2Olx0LmtpbGxfc2JcdD0gZ2FkZ2V0ZnNfa2lsbF9zYixcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTU1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1bm1vdW50aW5nIGFuZCBjbGVhbmluZyB1cCBhIGdhZGdldGZzIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncy4gSXMgaXQgYSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgYSBgdW1vdW50YCBjYWxsLCBvciB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBldmVudD8gV2hhdCByZXNvdXJjZXMgZG9lcyBpdCBuZWVkIHRvIHJlbGVhc2U/IE1lbW9yeSwgZmlsZSBkZXNjcmlwdG9ycywgcGVyaGFwcz8gTW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gRGVhZGxvY2tzPyBEYXRhIGNvcnJ1cHRpb24/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgbXV0ZXhlcyBvciBsb2NrcyBiZWluZyBoZWxkIGFuZCBlbnN1cmUgdGhleSYjMzk7cmUgcmVsZWFzZWQgaW4gYSBzYWZlIGFuZCBwcmVkaWN0YWJsZSBvcmRlci4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIHRvby4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3IgcmVzb3VyY2UgbGVha3MsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvICYjMzk7c3VjY2VlZCYjMzk7PyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBpcyBrZXkgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gZGlzYXBwZWFycywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IGRvZXMuIEkgd2FudCB0byByZWFkIHRoZSBjb2RlIHdpdGggYSBjcml0aWNhbCBleWUsIGxvb2tpbmcgZm9yIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGlmIHRoZSBnYWRnZXQgZmlsZXN5c3RlbSBpcyBjcml0aWNhbCBmb3Igc29tZSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTA2Olx0c3RhdGljIHZvaWRcbjIxMDc6XHRnYWRnZXRmc19raWxsX3NiIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMjEwODpcdHtcbjIxMDk6XHRcdG11dGV4X2xvY2soXHUwMDI2c2JfbXV0ZXgpO1xuMjExMDpcdFx0a2lsbF9hbm9uX3N1cGVyIChzYik7XG4yMTExOlx0XHRpZiAodGhlX2RldmljZSkge1xuMjExMjpcdFx0XHRwdXRfZGV2ICh0aGVfZGV2aWNlKTtcbjIxMTM6XHRcdFx0dGhlX2RldmljZSA9IE5VTEw7XG4yMTE0Olx0XHR9XG4yMTE1Olx0XHRrZnJlZShDSElQKTtcbjIxMTY6XHRcdENISVAgPSBOVUxMO1xuMjExNzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiX211dGV4KTtcbjIxMTg6XHR9XG4yMTE5Olx0XG4yMTIwOlx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbjIxMjE6XHRcbjIxMjI6XHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcbjIxMjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjEyNDpcdFx0Lm5hbWVcdFx0PSBzaG9ydG5hbWUsXG4yMTI1Olx0XHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhlIHJlbGV2YW50IHRlY2huaWNhbCBkb21haW4gYW5kIGNvbnRleHQuCgoqKkNoZWNraW5nIGBwdXRfZGV2YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyBgcHV0X2RldmAuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRldmljZSBtYW5hZ2VtZW50IG9yIHNvbWUgZm9ybSBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGludGVyZmFjZS4gSXQgc3VnZ2VzdHMgYW4gYWN0aW9uLCBsaWtlbHkgYSBjb21tYW5kLCBmdW5jdGlvbiwgb3IgbWV0aG9kIGNhbGwsIHRoYXQmIzM5O3MgY2VudHJhbCB0byB3aGF0ZXZlciB0YXNrIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nICp3aXRoKiB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJcyBpdCBiZWhhdmluZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyB3b3JraW5nIGFzIGl0IHNob3VsZCwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU4PXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjM6c3RhdGljIHZvaWQgcHV0X2RldiAoc3RydWN0IGRldl9kYXRhICpkYXRhKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxNz1zdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMjAtXHRcdHJldHVybjtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMjE6XHRwdXRfZGV2IChkYXRhLVx1MDAzZWRldik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjIyLVx0LyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTE9ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTIxNC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMjE1Olx0cHV0X2RldiAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjE2LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjgtZW5vbWVtMTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjI5Olx0cHV0X2RldiAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMwLVx0a2ZyZWUgKGRhdGEpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2MC1cdERCRyAoZGV2LCBcJiMzNDslcyBkb25lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY2MTpcdHB1dF9kZXYgKGRldik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2Mi19XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA2OTpcdFx0cHV0X2RldihkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNzAtXHRcdGdvdG8gRW5vbWVtO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTA3PWdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTEtXHRpZiAodGhlX2RldmljZSkge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMTI6XHRcdHB1dF9kZXYgKHRoZV9kZXZpY2UpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTMtXHRcdHRoZV9kZXZpY2UgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIGBwdXRfZXBgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBwdXRfZXBgLiYjMzQ7IEkmIzM5O20gbm90IGdvaW5nIHRvIGdldCBib2dnZWQgZG93biBpbiBwcmVsaW1pbmFyaWVzOyBJIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBtaW5kIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5LiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcywgb3IgZmFpbHMgdG8gaGFuZGxlPyBBcmUgdGhlcmUgcmVjZW50IGNoYW5nZXMsIGNvbW1pdHMsIG9yIGJ1ZyByZXBvcnRzIGFzc29jaWF0ZWQgd2l0aCBgcHV0X2VwYCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IuIERvZXMgaXQgYWRoZXJlIHRvIHRoZSBBUEkgc3BlY3Mgb3IgaXMgdGhlcmUgc29tZSBkZXZpYXRpb24/IElzIGl0IHVzZWQgaW4gdGhlIGNvZGUgcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlcj8gSW4gZXNzZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIGFuc3dlciB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBjb25kaXRpb24uIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGNyaXRpY2FsIGNoZWNrcG9pbnQgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXRfZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMj1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2VwIChzdHJ1Y3QgZXBfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjE2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxNzpzdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxOC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MT1lcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM5Ny1cdG11dGV4X3VubG9jayhcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjM5ODpcdHB1dF9lcCAoZGF0YSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMzk5LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTQ4OD1zdGF0aWMgdm9pZCBlcF9haW9fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjMtXHRzcGluX3VubG9jayhcdTAwMjZlcGRhdGEtXHUwMDNlZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjUyNDpcdHB1dF9lcChlcGRhdGEpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTUyNS19XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTUyNz1zdGF0aWMgc3NpemVfdCBlcF9haW8oc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzQtXHRrZnJlZShwcml2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo1NzU6XHRwdXRfZXAoZXBkYXRhKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzYtXHRyZXR1cm4gdmFsdWU7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMDg9c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxMi1cdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxMzpcdFx0cHV0X2VwKGlub2RlLVx1MDAzZWlfcHJpdmF0ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRW5kcG9pbnQgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgbmFzdHkgYnVnOiBgcHV0X2VwYCBiZWluZyBjYWxsZWQgYXQgdGhlIHdyb25nIHRpbWUg4oCTIHNwZWNpZmljYWxseSwgaW5zaWRlIGBkZXN0cm95X2VwX2ZpbGVzYCBpbnN0ZWFkIG9mIGR1cmluZyBpbm9kZSBldmljdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmVjaXBlIGZvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIHRoZSBpbm9kZSBzdGlja3MgYXJvdW5kLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBob3cgdGhpcyBpcyBoYW5kbGVkLCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBlbmRwb2ludCBhbmQgbWFraW5nIHN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IG1hbmFnZWQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgc3VzcGVjdHMgYXJlIGBlcF9yZWxlYXNlYCwgYGVwX2Fpb2AsIGBlcF9haW9fY29tcGxldGVgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGRldl9yZWxlYXNlYCwgYGVwX29wZW5gLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYGVwX3dyaXRlX2l0ZXJgLCBgZXAwX3JlYWRgLCBgZGV2X2NvbmZpZ2AsIGBlcDBfZmFzeW5jYCwgYGVwMF9wb2xsYCwgYW5kIGBnYWRnZXRfZGV2X2lvY3RsYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzeXN0ZW0sIG5vdCBqdXN0IGludGVybmFsIGhlbHBlcnMuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIG5vdGUgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEJ1dC4uLiBhbGwgZmlsZSBvcGVyYXRpb25zIGFyZSBzdGF0aWMgaW4gdGhpcyBmaWxlLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHN0aWxsIGVudHJ5IHBvaW50cyB0aGF0IGdldCB0aGVpciBhZGRyZXNzZXMgdGFrZW4sIGFuZCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZC4gU28sIGFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIGxpa2VseSBub3QgaW5saW5lZCBhbmQgdGh1cyB3ZSBjYW4gc3RpbGwgc2VlIHRoZW0uIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdHJ1ZSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgaXQgY2hhbmdlcyB0aGUgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxPU1PRFVMRV9MSUNFTlNFIChcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjgzOnN0YXRpYyBpbnQgZXBfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtODQtXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9pb19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NzA1Olx0Lm9wZW4gPVx0XHRlcF9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwNi1cdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6ODE4OmVwX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy04MTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZXM6IEEgU3RyYXRlZ2ljIEFwcHJvYWNoKioKCk9rYXksIHNvIHRoZSBhZGRyZXNzZXMgYXJlIHRha2VuLCBtZWFuaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGJlaW5nIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWFrZXMgdGhlbSBkaXN0aW5jdCB0YXJnZXRzLiBMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgZmlsZSBvcGVyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuLi4gKkRlZXAgYnJlYXRoKi4uLiBoZXJlIHRoZXkgYXJlOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGVwX2lvY3RsYCwgYGVwX3JlYWRfaXRlcmAsIGBlcF93cml0ZV9pdGVyYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBSaWdodCwgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0LgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayB0aGVzZSB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBzdGFydCBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvdWdoOyBsZXQmIzM5O3MgcGljayBhIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWJzZXQgZm9yIHRoZSBpbml0aWFsIHRlc3RzLiBJJiMzOTttIHRoaW5raW5nLi4uIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGRldl9yZWxlYXNlYCwgYW5kIGBkZXZfY29uZmlnYCBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIG9uZXMgdG8gc3RhcnQgd2l0aC4KCkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBlcF9yZWxlYXNlYCBmb3IgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MD1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MzgxOmVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0zODIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz03MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA1LVx0Lm9wZW4gPVx0XHRlcF9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNjpcdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA3LVx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkNoZWNraW5nIHRoZSBSZWxlYXNlIFBpcGVsaW5lKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdldCBzdHJhaWdodCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRldl9yZWxlYXNlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcHVycG9zZS4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBwZWVrIGF0IHRoZSBwaXBlbGluZSB0byBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsb29rcyBhcyBleHBlY3RlZCBiZWZvcmUgSSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MD1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5MTpkZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM2LVx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTM3Olx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgZmVhdHVyZSBkZXBsb3ltZW50LCBpdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZC4gTXkgaW5zdGluY3QgaGVyZSBpcyB0byBiZWdpbiBieSBleGFtaW5pbmcgdGhlIGBkZXZfY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBBcmUgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBpbiBwbGFjZT8gSGF2ZSBJIGFkZHJlc3NlZCBwb3RlbnRpYWwgY29uZmxpY3RzPyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gdW5leHBlY3RlZCBvdXRjb21lIGZ1cnRoZXIgZG93biB0aGUgbGluZT8gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYSBtaXNjb25maWd1cmVkIGVudmlyb25tZW50IGNhbiB3YXN0ZSBob3VycyBjaGFzaW5nIHBoYW50b21zLiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBlcnJvciBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgc2V0dGluZ3MsIGRlcGVuZGVuY2llcywgYW5kIGNvbm5lY3Rpb25zIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQgd2l0aGluIHRoZSBkZXZlbG9wbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHVwZnJvbnQgY2hlY2sgd2lsbCBzYXZlIG1lIGEgd29ybGQgb2YgcG90ZW50aWFsIGhlYWRhY2hlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNTUtICpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo1NjogKiAtIEZpcnN0LCBkZXZfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gL2Rldi9nYWRnZXQvJENISVAgaXMgY29uZmlndXJlZFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3LSAqICAgKGJ5IHdyaXRpbmcgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgaXRcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc5OD1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3OTk6ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODAwLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMi1cdC5yZWFkID1cdFx0ZXAwX3JlYWQsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMzpcdC53cml0ZSA9XHRkZXZfY29uZmlnLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzQtXHQuZmFzeW5jID1cdGVwMF9mYXN5bmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogR2FkZ2V0IERldmljZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gemVybyBpbiBvbiBgZ2FkZ2V0X2Rldl9vcGVuYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgaW1tZWRpYXRlbHkgY29uY2VybmVkIHdpdGggdGhlIGRldmljZSYjMzk7cyBvcGVuIG9wZXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCYjMzk7cyBhIHBlcmZlY3RseSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgKm9wZW4qIHJvdXRpbmUgaXMgb2Z0ZW4gdGhlIGdhdGV3YXkgZm9yIGFsbCBzb3J0cyBvZiBzdWJzZXF1ZW50IGludGVyYWN0aW9uLCBzbyBjaGVja2luZyBpdCBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgaG93IGEgZGV2aWNlIGhhbmRsZXMgYW4gb3BlbiBjYWxsIGhlbHBzIHRvIGRpYWdub3NlIHRoZSB3YXkgdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXJyb3JzIGFyZSBoYW5kbGVkLCBhbmQgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCBmb3IgdXNlLiBLbm93aW5nIHRoaXMgYWxzbyBzZXRzIHRoZSBzdGFnZSBmb3IgY2hlY2tpbmcgaG93IHRoZSBkZXZpY2UgaXMgaGFuZGxlZCBmb3Igc3Vic2VxdWVudCByZWFkIGFuZCB3cml0ZSBjYWxscy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZSB3aGVuIHRyb3VibGVzaG9vdGluZywgZGVidWdnaW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBhIGdhZGdldCBkZXZpY2UmIzM5O3MgYmVoYXZpb3IuIFRoZSBgZ2FkZ2V0X2Rldl9vcGVuYCBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIHNldHVwIHBoYXNlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiAqaG93KiB0aGF0IGhhcHBlbnMgYXJlIHZhc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0X2Rldl9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTExPXN0YXRpYyBpbnRcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTEyOmdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MTMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzAtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMTpcdC5vcGVuID1cdFx0Z2FkZ2V0X2Rldl9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzItXHQucmVhZCA9XHRcdGVwMF9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBlcF9pb2N0bGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IGBlcF9pb2N0bGAuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgcGxhbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MT1lcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo0MDI6c3RhdGljIGxvbmcgZXBfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMy17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9pb19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDYtXHQucmVsZWFzZSA9XHRlcF9yZWxlYXNlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNzpcdC51bmxvY2tlZF9pb2N0bCA9IGVwX2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwOC1cdC5yZWFkX2l0ZXIgPVx0ZXBfcmVhZF9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmV2aXNpdGluZyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGdhZGdldGZzX2V2aWN0X2lub2RlYC4gSSBuZWVkIHRvIHJldmlldyBpdHMgbG9naWMgYWdhaW4sIHBhcnRpY3VsYXJseSBpbiBsaWdodCBvZiBbaW5zZXJ0IHJlbGV2YW50IGNvbnRleHQgaGVyZSwgZS5nLiwgdGhlIHJlY2VudCBpc3N1ZSB3aXRoIHBlcnNpc3RlbnQgc3RvcmFnZSwgYSBuZXcgZmVhdHVyZSB3ZSYjMzk7cmUgaW1wbGVtZW50aW5nLCBvciBhIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYm90dGxlbmVja10uIEkgd2FudCB0byBlbnN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgaW5vZGUgZXZpY3Rpb24gY29ycmVjdGx5IHVuZGVyIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3MgcGF0dGVybnMgd2UmIzM5O3ZlIGRpc2N1c3NlZC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlcXVlbmNpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBkb3VibGUtY2hlY2tpbmcgdGhlIGxvY2tzIGl0IHV0aWxpemVzLCBhbmQgY29uZmlybWluZyB0aGF0IHRoZSBjbGVhbnVwIG9mIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBgZ2FkZ2V0ZnNg4oCZcyBpbm9kZSBtYW5hZ2VtZW50IOKAkyB0aGUgc2hhcmVkIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHF1aWNrbHkgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYW55IHJlbGF0ZWQgVkZTIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIHJlbWVtYmVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmFsIFZGUyBpbm9kZSBsaWZlY3ljbGUgYW5kIGZpbGUgc3lzdGVtIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5ODQ9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwNy1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDA4OnN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwOS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDE4LVx0LmRyb3BfaW5vZGUgPVx0aW5vZGVfanVzdF9kcm9wLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTk6XHQuZXZpY3RfaW5vZGUgPVx0Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBsYXkgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGhlcmU6IGBnYWRnZXRmc19ldmljdF9pbm9kZWAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYW5kIGBkZXZfY29uZmlnYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbnMgc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zIGFzIGV4cGVjdGVkLgoKRmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBVU0JfR0FER0VURlNgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAgYXJlIGFsbCBwcm9wZXJseSBzZXQuCgpSaWdodCwgYFVTQl9HQURHRVRGU2AsIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gU28gaXQmIzM5O3MgcHJvYmFibHkgb2xkZXIgY29kZS4gTm93LCBpcyBgVVNCX0dBREdFVGAgbWFuZGF0b3J5PyBPZiBjb3Vyc2UsIGl0IGlzIOKAkyBpdOKAmXMgdGhlIG1haW4gbWVudWNvbmZpZyBvcHRpb24gZm9yIHRoZSBlbnRpcmUgZ2FkZ2V0IHN1YnN5c3RlbS4gQW5kIGBVU0JfRFVNTVlfSENEYD8gWWVzLCBJIG5lZWQgdGhhdCBvbmUgZm9yIHRlc3RpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBFc3NlbnRpYWwgZm9yIG91ciBkZXZlbG9wbWVudCB3b3JrIQoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgRmlsZSBTeXN0ZW0gS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHJldmlzaXQgdGhlIGBLY29uZmlnYCBmb3IgYFVTQl9HQURHRVRGU2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgeW91IG1pZ2h0IGZvY3VzIG9uLCBlLmcuLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZ2FkZ2V0IGRyaXZlcnMsIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMsIGFueSByZWNlbnQgY2hhbmdlcywgb3IgcG90ZW50aWFsIHBvcnRhYmlsaXR5IGlzc3Vlc10uIEkgd2FudCB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJiMzOTtzIFVTQiBzdGFjayBvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIFVTQiBkcml2ZXJzIEkmIzM5O20gd29ya2luZyB3aXRoLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgY3VycmVudCBzdGF0ZSBjb21wbGV0ZWx5IGFuZCBlbnN1cmUgdGhpcyBvcHRpb24gaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGRlc2lnbiByZXF1aXJlbWVudHMgYW5kIGZ1dHVyZSBleHBhbnNpb24gcG9zc2liaWxpdGllcy4gVGhlcmUgbWlnaHQgYWxzbyBiZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZpbGUgc3lzdGVtIGFuZCB0aGUgcG93ZXItbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgYWxzbyByZXF1aXJlcyBhIHF1aWNrIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNjpcdGNvbmZpZyBVU0JfR0FER0VURlNcbiAyMDc6XHRcdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxuIDIxMDpcdFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcbiAyMTE6XHRcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJiMzOTt0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cbiAyMTI6XHRcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XG4gMjEzOlx0XHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cbiAyMTQ6XHRcbiAyMTU6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIxNjpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnYWRnZXRmc1wmIzM0Oy5cbiAyMTc6XHRcbiAyMTg6XHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcbiAyMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Z1bmN0aW9uIEZpbGVzeXN0ZW1cJiMzNDtcbiAyMjA6XHRcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG4gMjIxOlx0XHRzZWxlY3QgVVNCX0ZfRlNcbiAyMjI6XHRcdHNlbGVjdCBVU0JfRlVOQ1RJT05GU19HRU5FUklDIGlmICEoVVNCX0ZVTkNUSU9ORlNfRVRIIHx8IFVTQl9GVU5DVElPTkZTX1JORElTKVxuIDIyMzpcdFx0aGVscFxuIDIyNDpcdFx0ICBUaGUgRnVuY3Rpb24gRmlsZXN5c3RlbSAoRnVuY3Rpb25GUykgbGV0cyBvbmUgY3JlYXRlIFVTQlxuIDIyNTpcdFx0ICBjb21wb3NpdGUgZnVuY3Rpb25zIGluIHVzZXIgc3BhY2UgaW4gdGhlIHNhbWUgd2F5IEdhZGdldEZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIERlcGVuZGVuY3kgd2l0aGluIFVTQiBHYWRnZXQgQ29kZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgSSBzZWUgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2UsIGF0IGxlYXN0IG5vdCBpbiBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkuIEJ1dCBJIG5vdGljZSBpdCYjMzk7cyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7SG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiYjMzQ7IFRoYXQgbmVzdGVkIGBpZmAgc3RhdGVtZW50IGlzIGVmZmVjdGl2ZWx5IGNyZWF0aW5nIGEgKmNvbmRpdGlvbmFsKiBkZXBlbmRlbmN5LiBJdCBtZWFucyB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWN0aW9uIG9ubHkgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgdGhlIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIG5vdCBhIGRpcmVjdCwgZXhwbGljaXQgYGRlcGVuZHMgb25gIHN0YXRlbWVudCwgYnV0IGl0JiMzOTtzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgaXMgZGVwZW5kZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBjb25maWd1cmVkLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIFVTQl9HQURHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLY29uZmlnIFNvdXJjZSoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZSBhY3R1YWxseSBnZXRzIHB1bGxlZCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEl0JiMzOTtzIG5vdCBqdXN0IHNpdHRpbmcgdGhlcmUsIG9ycGhhbmVkOyBpdCAqaGFzKiB0byBiZSBzb3VyY2VkIGZyb20gc29tZXdoZXJlIGhpZ2hlciB1cCBpbiB0aGUgY29uZmlndXJhdGlvbiB0cmVlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGluY2x1c2lvbiBwYXRoIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsb2dpYyBmb3IgdGhlIGxlZ2FjeSBVU0IgZ2FkZ2V0IGRyaXZlci4gTGV0IG1lIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBLY29uZmlnIGZpbGVzIGFuZCBNYWtlZmlsZXMsIG1heWJlIHVzZSBzb21lIGdyZXAtZnUsIHRvIHNlZSBob3cgdGhpcyB0aGluZyBnZXRzIGxpbmtlZCBpbnRvIHRoZSBicm9hZGVyIFVTQiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgaXMgY3JpdGljYWwgZm9yIGNvcnJlY3RseSBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY3VzdG9taXppbmcgdGhlIGdhZGdldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlIGh1bnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDk1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo1MDk6c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFVTQiBHYWRnZXQgS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MDkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNvcmUgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZC4gSSYjMzk7bSBndWVzc2luZyB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaXMgaW4gdGhhdCBnZW5lcmFsIGFyZWEsIGFuZCBpdCYjMzk7bGwgc2VydmUgYXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZXRhaWxlZCwgd2hpY2ggY291bGQgYmUgaGVscGZ1bC4gSSYjMzk7bGwgcHJvYmFibHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gTGluZSA1MDkuLi4gcmlnaHQsIHRoYXQgc2hvdWxkIGdldCB0aGUgaW52ZXN0aWdhdGlvbiBtb3ZpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0ICB0aGUgZGV2aWNlIGZpbGUgdG8gZ2V0IG9yIHNldCBwcmludGVyIHN0YXR1cy5cbiA0OTE6XHRcbiA0OTI6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfcHJpbnRlci5yc3RcbiA0OTM6XHRcdCAgd2hpY2ggaW5jbHVkZXMgc2FtcGxlIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlIGZpbGUuXG4gNDk0Olx0XG4gNDk1Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtVU0IgR2FkZ2V0IFRhcmdldCBGYWJyaWNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkVcbiA0OTg6XHRcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXG4gNDk5Olx0XHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuIDUwMDpcdFx0c2VsZWN0IFVTQl9GX1RDTVxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIGZhYnJpYyBpcyBhIFVTQiBnYWRnZXQgY29tcG9uZW50LiBUd28gVVNCIHByb3RvY29scyBhcmVcbiA1MDM6XHRcdCAgc3VwcG9ydGVkIHRoYXQgaXMgQkJCIG9yIEJPVCAoQnVsayBPbmx5IFRyYW5zcG9ydCkgYW5kIFVBU1xuIDUwNDpcdFx0ICAoVVNCIEF0dGFjaGVkIFNDU0kpLiBCT1QgaXMgYWR2ZXJ0aXNlZCBvbiBhbHRlcm5hdGl2ZVxuIDUwNTpcdFx0ICBpbnRlcmZhY2UgMCAocHJpbWFyeSkgYW5kIFVBUyBpcyBvbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgMS5cbiA1MDY6XHRcdCAgQm90aCBwcm90b2NvbHMgY2FuIHdvcmsgb24gVVNCMi4wIGFuZCBVU0IzLjAuXG4gNTA3Olx0XHQgIFVBUyB1dGlsaXplcyB0aGUgVVNCIDMuMCBmZWF0dXJlIGNhbGxlZCBzdHJlYW1zIHN1cHBvcnQuXG4gNTA4Olx0XG4gNTA5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wmIzM0O1xuIDUxMDpcdFxuIDUxMTpcdGVuZGlmICMgVVNCX0dBREdFVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY2NQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIGFuZCBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gbG9va2luZyBhdCBpcyBjb250aW5nZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgYnV0IHRvIGVtdWxhdGUgdGhlIGdhZGdldCBjb250cm9sbGVyLCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEFuZCwgdG8gYmUgY29tcGxldGUsIGBVU0JfR0FER0VURlNgIG5lZWRzIHRvIGJlIGRlZmluZWQgdG9vLgoKU28sIHRvIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IEkgaGF2ZTogYFVTQl9HQURHRVRgLCBgVVNCX0dBREdFVEZTYCwgYW5kIGBVU0JfRFVNTVlfSENEYC4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRoYXQgc2VlbSBwcm9taXNpbmc6IGBnYWRnZXRmc19ldmljdF9pbm9kZWAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYGRldl9jb25maWdgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4KCkhtbSwgbm93LCBhYm91dCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLi4uIGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgZ2FkZ2V0X2ZzX29wZXJhdGlvbnNgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIG15IGZvY3VzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBidWcgZml4IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBpdC4gSSB3YW50IHRvIGtlZXAgaXQuCgpJJiMzOTttIHNraXBwaW5nIGBkZXN0cm95X2VwX2ZpbGVzYCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYyBhbmQgaXRzIGFkZHJlc3MgaXNuJiMzOTt0IHRha2VuLiBJdCYjMzk7cyBjYWxsZWQgYnkgYGdhZGdldGZzX3VuYmluZGAgYW5kIGBhY3RpdmF0ZV9lcF9maWxlc2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGxpa2VseSB0byBiZSBpbmxpbmVkLiBJIHdpbGwgc2tpcCBpdCBmb3Igbm93LgoKSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNraXAgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBmb3IgdGhlIHNhbWUgcmVhc29uLiBJdCYjMzk7cyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzbiYjMzk7dCB0YWtlbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYWN0aXZhdGVfZXBfZmlsZXNgIGFuZCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAuIEFnYWluLCBwcm9iYWJseSBpbmxpbmVkLgoKTm93LCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIG5vdCBnZXR0aW5nIGlubGluZWQuIEkmIzM5O2xsIGNoZWNrIGVhY2ggc3ltYm9sOiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBBc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZXJlZm9yZSBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gR29vZCEgYGVwX3JlbGVhc2VgLiBBbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAtIGRlZmluaXRlbHkgbm90IGlubGluZWQuIGBkZXZfcmVsZWFzZWAuIFNhbWUgc3Rvcnk6IGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudC4gYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYGRldl9jb25maWdgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gQWxsIG9mIHRoZW0uIFRoZXkgYXJlIGFsbCBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggbWVhbnMgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4KCk9rYXksIHRoYXQmIzM5O3MgaXQuIEkgaGF2ZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NDkuMzY0Mzk1ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4MDU3MTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgICBcImVwX3JlbGVhc2VcIixcbiAgICBcImRldl9yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgICBcImVwX29wZW5cIixcbiAgICBcImRldl9jb25maWdcIixcbiAgICBcImVwX2lvY3RsXCIsXG4gICAgXCJlcF9yZWFkX2l0ZXJcIixcbiAgICBcImVwX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUgVVNCIGdhZGdldGZzIGRyaXZlciBieSBtb3ZpbmcgdGhlIGBwdXRfZXBgIGNhbGwgZnJvbSBgZGVzdHJveV9lcF9maWxlc2AgdG8gYSBuZXcgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBjYWxsYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIChnYWRnZXRmcyBjYW4gYmUgdGVzdGVkIHZpYSBkdW1teV9oY2QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NDkuMzY0NDAyNzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc3MDk1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTE2NmQxZWNhYTQzM2ZhNjhhZjNhZGU2MTg0ZDAyYjczYmE3N2M4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmEwMzA2Mjk4NmJmMzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuQEAgLTE1NzksOCArMTU3OSw2IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxcbiBcXHRcXHQvKiBicmVhayBsaW5rIHRvIGRjYWNoZSAqL1xcbiBcXHRcXHRzaW1wbGVfcmVtb3ZlX2J5X25hbWUoZGV2LVxcdTAwM2VzYi1cXHUwMDNlc19yb290LCBlcC1cXHUwMDNlbmFtZSwgTlVMTCk7XFxuIFxcbi1cXHRcXHRwdXRfZXAgKGVwKTtcXG4tXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEgKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycSAoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuQEAgLTE5OTYsNiArMTk5NCw3IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuIFxcbiBcXHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcoc2ItXFx1MDAzZXNfcm9vdCwgbmFtZSk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9wcml2YXRlID0gTlVMTDtcXG4gXFx0XFx0aXB1dChpbm9kZSk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRlbnRyeSk7XFxuIFxcdH1cXG5AQCAtMjAwNiw5ICsyMDA1LDE4IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4rXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbitcXHRpZiAoaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9mb3AgPT0gXFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXFxuK1xcdFxcdHB1dF9lcChpbm9kZS1cXHUwMDNlaV9wcml2YXRlKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xcbiBcXHQuc3RhdGZzID1cXHRzaW1wbGVfc3RhdGZzLFxcbiBcXHQuZHJvcF9pbm9kZSA9XFx0aW5vZGVfanVzdF9kcm9wLFxcbitcXHQuZXZpY3RfaW5vZGUgPVxcdGdhZGdldGZzX2V2aWN0X2lub2RlLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo0OS44NjMwOTI5MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODgzMDcwMDUxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgICBcImVwX3JlbGVhc2VcIixcbiAgICBcImRldl9yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgICBcImVwX29wZW5cIixcbiAgICBcImRldl9jb25maWdcIixcbiAgICBcImVwX2lvY3RsXCIsXG4gICAgXCJlcF9yZWFkX2l0ZXJcIixcbiAgICBcImVwX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUgVVNCIGdhZGdldGZzIGRyaXZlciBieSBtb3ZpbmcgdGhlIGBwdXRfZXBgIGNhbGwgZnJvbSBgZGVzdHJveV9lcF9maWxlc2AgdG8gYSBuZXcgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBjYWxsYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIChnYWRnZXRmcyBjYW4gYmUgdGVzdGVkIHZpYSBkdW1teV9oY2QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDExNjZkMWVjYWE0MzNmYTY4YWYzYWRlNjE4NGQwMmI3M2JhNzdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5hMDMwNjI5ODZiZjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xNTc5LDggKzE1NzksNiBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbiBcdFx0LyogYnJlYWsgbGluayB0byBkY2FjaGUgKi9cbiBcdFx0c2ltcGxlX3JlbW92ZV9ieV9uYW1lKGRldi1cdTAwM2VzYi1cdTAwM2VzX3Jvb3QsIGVwLVx1MDAzZW5hbWUsIE5VTEwpO1xuIFxuLVx0XHRwdXRfZXAgKGVwKTtcbi1cbiBcdFx0c3Bpbl9sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxIChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG5AQCAtMTk5Niw2ICsxOTk0LDcgQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbiBcbiBcdGRlbnRyeSA9IHNpbXBsZV9zdGFydF9jcmVhdGluZyhzYi1cdTAwM2VzX3Jvb3QsIG5hbWUpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkZW50cnkpO1xuIFx0fVxuQEAgLTIwMDYsOSArMjAwNSwxOCBAQCBzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbitcdGNsZWFyX2lub2RlKGlub2RlKTtcbitcdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG4rXHRcdHB1dF9lcChpbm9kZS1cdTAwM2VpX3ByaXZhdGUpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7XG4gXHQuc3RhdGZzID1cdHNpbXBsZV9zdGF0ZnMsXG4gXHQuZHJvcF9pbm9kZSA9XHRpbm9kZV9qdXN0X2Ryb3AsXG4rXHQuZXZpY3RfaW5vZGUgPVx0Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo0OS44NjMwOTUwNTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM0NDA3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXRmcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxvdy1sZXZlbCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhcm91bmQgZW5kcG9pbnQgKGBlcGApIG9iamVjdCBoYW5kbGluZyB3aXRoaW4gdGhlIGdhZGdldGZzIGZyYW1ld29yay5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYHB1dF9lcChlcClgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGVzdHJveV9lcF9maWxlcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IFRoYXQgZnVuY3Rpb24ncyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gY2xlYW4gdXAgcmVzb3VyY2VzLCBzbyByZW1vdmluZyBhIGBwdXRfZXAoKWAgY2FsbCB0aGVyZSBpbXBsaWVzIHRoZSByZXNwb25zaWJpbGl0eSBpcyBzaGlmdGluZyBlbHNld2hlcmUgb3IgaXQncyBwb3RlbnRpYWxseSByZWR1bmRhbnQuIEZvbGxvd2luZyB0aGF0IHRocmVhZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7YCBpbiBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoKWAgdW5kZXIgYSBzcGVjaWZpYyBmYWlsdXJlIGNvbmRpdGlvbiBpbiBgc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKClgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQncyBjcnVjaWFsIHRvIG51bGwgb3V0IHRoYXQgcG9pbnRlciB0byBwcmV2ZW50IGRhbmdsaW5nIHJlZmVyZW5jZXMgaWYgdGhlIGZpbGUgY3JlYXRpb24gZmFpbHMuXG5cblRoZSBtb3N0IHNpZ25pZmljYW50IGFkZGl0aW9uLCB0aG91Z2gsIGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZSgpYC4gVGhpcyBmdW5jdGlvbidzIHNvbGUgcHVycG9zZSBpcyB0byBjYWxsIGBwdXRfZXAoaW5vZGUtXHUwMDNlaV9wcml2YXRlKWAgaWYgYGlub2RlLVx1MDAzZWlfcHJpdmF0ZWAgaXMgbm90IG51bGwgYW5kIHRoZSBpbm9kZSdzIGZpbGUgb3BlcmF0aW9ucyBhcmUgcmVsYXRlZCB0byBhbiBlbmRwb2ludC4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGZpeC4gSXQncyBlc3NlbnRpYWxseSBpbXBsZW1lbnRpbmcgZGVsYXllZCByZXNvdXJjZSByZWxlYXNlIGR1cmluZyBpbm9kZSBldmljdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgY3JpdGljYWwgdG8gZnJlZWluZyBlbmRwb2ludCByZXNvdXJjZXMgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgd2hlbiB0aGUgZmlsZSBpcyBubyBsb25nZXIgaW4gdXNlLiBGaW5hbGx5LCB0aGV5J3ZlIHJlZ2lzdGVyZWQgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBhcyB0aGUgYC5ldmljdF9pbm9kZWAgb3BlcmF0aW9uIGluIGBnYWRnZXRfZnNfb3BlcmF0aW9uc2AuIFRoaXMgdGllcyBpdCBhbGwgdG9nZXRoZXIsIGVuc3VyaW5nIHRoYXQgb3VyIG5ldyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIHRoZSBpbm9kZSBpcyBiZWluZyBldmljdGVkIGZyb20gdGhlIGtlcm5lbCdzIGlub2RlIGNhY2hlLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBvciBhIG1lbW9yeSBsZWFrL3VzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgdGllZCB0byBob3cgYGVwYCBvYmplY3RzIGFyZSBtYW5hZ2VkIGluIGdhZGdldGZzLiBTaW5jZSBnYWRnZXRmcyBjYW4gYmUgYWNjZXNzZWQgaW4gdmlydHVhbGl6ZWQgc2NlbmFyaW9zLCBldmVuIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYSBgZHVtbXlfaGNkYCwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBnaXZlIG1vcmUgYXR0ZW50aW9uIHRvLiBJJ2Qgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyByZWxhdGVkIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGlzIGlzIHNvbWV0aGluZyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9ucy4gQW5kLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emluZyBtYXRlcmlhbC4gV2UgbmVlZCB0byB0aHJvdyBzb21lIGNyYWZ0ZWQgcGF5bG9hZHMgYXQgdGhpcyB0byBtYWtlIHN1cmUgdGhlIGVuZHBvaW50IHJlc291cmNlcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo1NS41OTc1MDU1MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMzAxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjA2PWNvbmZpZyBVU0JfR0FER0VURlNcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMTUtXFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMTY6XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ2FkZ2V0ZnNcXFwiLlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMyOjU1LjkxMDgxMzg0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDUxNDAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEdhZGdldEZTIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBwb2ludGluZyB0b3dhcmRzIGBVU0JfR0FER0VURlNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkaWcgaW50byB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgZXhhY3RseSBob3cgYGlub2RlLmNgIGdldHMgY29tcGlsZWQgdW5kZXIgdGhpcyBjb25maWcuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZWAuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgZmlndXJpbmcgb3V0IHRoZXNlIGxlZ2FjeSBnYWRnZXQgZHJpdmVyIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYW5kIGNvbXBpbGF0aW9uIHNwZWNpZmljcyByZWxhdGVkIHRvIGBpbm9kZS5jYCBoZXJlIGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHRyb3VibGVzaG9vdCBvciBleHRlbmQgYW55dGhpbmcgZ2FkZ2V0LXJlbGF0ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NTkuMjU1OTU2NzQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc5NTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcXHRcXHRcXHQ6PSBnbWlkaS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XFx0XFx0XFx0Oj0gaW5vZGUub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGUtMTYtZ19tYXNzX3N0b3JhZ2UteVxcdFxcdDo9IG1hc3Nfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMyOjU5LjM4Mjc1ODMxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQ2NDU0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIEdhZGdldEZTIEFzc2Vzc21lbnQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBMaW51eCBrZXJuZWwgaXMgcHJldHR5IHNvbGlkLCBzbyBJJ20gcXVpY2tseSBwdWxsaW5nIHVwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gWWVzLCAqZ2FkZ2V0ZnMqIOKAkyB0aGUgVVNCIGdhZGdldCBmaWxlc3lzdGVtIOKAkyBpcyBmdW5kYW1lbnRhbGx5IGJ1aWx0IGFyb3VuZCBhbmQgdXRpbGl6ZXMgY29kZSBmcm9tIGBpbm9kZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGZpbGVzeXN0ZW0sIGFmdGVyIGFsbCwgc28gdGhlIGNvcmUgaW5vZGUgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleS5cblxuTm93LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBmb3IgKlVTQl9HQURHRVRGUyouIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBpdCBoaW5nZXMgb24g4oCTIGFuZCB0aGluayBhYm91dCB3aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGluIGNhc2UgSSBuZWVkIHRvIG1vZGlmeSB0aGF0LiBNaWdodCBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaG9va3MgaW50byB0aGUgbGFyZ2VyIFVTQiBnYWRnZXQgZHJpdmVyIGZyYW1ld29yay4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUgZm9yIGFueSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjAyLjc3NzQwNjY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4OTQ5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowMi45MzczMDczMTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxMTM3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgbGVnYWN5IFVTQiBnYWRnZXQgZHJpdmVycywgc28gdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMDYgb2YgdGhlIGZpbGUuIFRoYXQgYXJlYSBwcm9iYWJseSBkZWZpbmVzIGEga2V5IHNlY3Rpb24gb3Igb3B0aW9uIHRoYXQncyByZWxldmFudCB0byB3aGF0IEkgbmVlZCB0byBhY2NvbXBsaXNoLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGxpa2VseSBiZSBkZXZpY2UgZHJpdmVycyBjb25maWd1cmVkLCBtYXliZSBmZWF0dXJlcyBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHVuZWFydGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowNi41MDg0NDkwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjA2LjUwODY3MDgwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYxNjgzNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiwgYW5kIGltbWVkaWF0ZWx5LCBteSB0aG91Z2h0IHByb2Nlc3MganVtcHMgdG8gaXRzIHBhcmVudCDigJMgYFVTQl9HQURHRVRgLiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCwgdGhlIGtleXN0b25lIG9mIHRoZSB3aG9sZSBzeXN0ZW0uIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlIGEgcmFmdCBvZiBvdGhlciBmZWF0dXJlcyB0aGF0IGhpbmdlIG9uIGBVU0JfR0FER0VUYCBiZWluZyBlbmFibGVkLCBhbmQgdGhvc2UgYXJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgYWxsIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGFzc2VzcyB3aGF0IG9wdGlvbnMgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIChvciB1bmF2YWlsYWJsZSkgYXMgYSByZXN1bHQgb2YgbWFraW5nIGNoYW5nZXMgdG8gYFVTQl9HQURHRVRgLiBJJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgbm93IHRvIGF2b2lkIGFueSBuYXN0eSBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MDkuMzcwMzU3MzM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2NDEzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTc6bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlVTQiBHYWRnZXQgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ3PWlmIFVTQl9HQURHRVRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00OC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NjM6Y29uZmlnIFVTQl9HQURHRVRfVkVSQk9TRVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIE1lc3NhZ2VzIChERVZFTE9QTUVOVClcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy03Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo3Nzpjb25maWcgVVNCX0dBREdFVF9ERUJVR19GSUxFU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmaWxlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy04OS1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6OTk6Y29uZmlnIFVTQl9HQURHRVRfVkJVU19EUkFXXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTAwLVxcdGludCBcXFwiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSlcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTE2OmNvbmZpZyBVU0JfR0FER0VUX1NUT1JBR0VfTlVNX0JVRkZFUlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXFx0aW50IFxcXCJOdW1iZXIgb2Ygc3RvcmFnZSBwaXBlbGluZSBidWZmZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowOS40NzQwMDQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTczNDE4NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAxNy4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlIFVTQiBnYWRnZXQgc3Vic3lzdGVtIGlzIGVuYWJsZWQgYW5kIHN0cnVjdHVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgVVNCIGFyY2hpdGVjdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIGdldCBtYWRlIGFib3V0IHdoYXQgZmVhdHVyZXMgd2Ugd2FudCB0byBleHBvc2UgdG8gdXNlcnNwYWNlIGFzIGEgVVNCIGRldmljZS4gRnJvbSBoZXJlLCBJIGNhbiB0cmFjZSBvdXQgdG8gcmVsZXZhbnQgY29kZSBhbmQgb3RoZXIga2NvbmZpZyBvcHRpb25zIGFzIG5lZWRlZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIGhpZ2gtbGV2ZWwgbWFwIG9mIHRoZSBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoxMi40NDc0MjgxNzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcXG4gICA0OlxcdCMgICAgKGEpIGEgcGVyaXBoZXJhbCBjb250cm9sbGVyLCBhbmRcXG4gICA1OlxcdCMgICAgKGIpIHRoZSBnYWRnZXQgZHJpdmVyIHVzaW5nIGl0LlxcbiAgIDY6XFx0I1xcbiAgIDc6XFx0IyBOT1RFOiAgR2FkZ2V0IHN1cHBvcnQgKiogRE9FUyBOT1QgKiogZGVwZW5kIG9uIGhvc3Qtc2lkZSBDT05GSUdfVVNCICEhXFxuICAgODpcXHQjXFxuICAgOTpcXHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcXFwiQVxcXCIgamFja3MpLlxcbiAgMTA6XFx0IyAgLSBQZXJpcGhlcmFscyAobGlrZSBQREFzKSBuZWVkIENPTkZJR19VU0JfR0FER0VUICh3aXRoIFxcXCJCXFxcIiBqYWNrcykuXFxuICAxMTpcXHQjICAtIFNvbWUgc3lzdGVtcyBoYXZlIGJvdGgga2luZHMgb2YgY29udHJvbGxlcnMuXFxuICAxMjpcXHQjXFxuICAxMzpcXHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcXFwiTWluaS1BQlxcXCIgamFjaywgc3lzdGVtcyB3aXRoXFxuICAxNDpcXHQjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0IFxcXCJVU0IgT24tdGhlLUdvXFxcIiAoQ09ORklHX1VTQl9PVEcpLlxcbiAgMTU6XFx0I1xcbiAgMTY6XFx0XFxuICAxNzpcXHRtZW51Y29uZmlnIFVTQl9HQURHRVRcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgMjA6XFx0XFx0c2VsZWN0IE5MU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICAgVVNCIGlzIGEgaG9zdC9kZXZpY2UgcHJvdG9jb2wsIG9yZ2FuaXplZCB3aXRoIG9uZSBob3N0IChzdWNoIGFzIGFcXG4gIDIzOlxcdFxcdCAgIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLlxcbiAgMjQ6XFx0XFx0ICAgVGhlIFVTQiBoYXJkd2FyZSBpcyBhc3ltbWV0cmljLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gc2V0IHVwOlxcbiAgMjU6XFx0XFx0ICAgeW91IGNhbid0IGNvbm5lY3QgYSBcXFwidG8tdGhlLWhvc3RcXFwiIGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgIExpbnV4IGNhbiBydW4gaW4gdGhlIGhvc3QsIG9yIGluIHRoZSBwZXJpcGhlcmFsLiAgSW4gYm90aCBjYXNlc1xcbiAgMjg6XFx0XFx0ICAgeW91IG5lZWQgYSBsb3cgbGV2ZWwgYnVzIGNvbnRyb2xsZXIgZHJpdmVyLCBhbmQgc29tZSBzb2Z0d2FyZVxcbiAgMjk6XFx0XFx0ICAgdGFsa2luZyB0byBpdC4gIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgYXJlIG9mdGVuIGRpc2NyZXRlIHNpbGljb24sXFxuICAzMDpcXHRcXHQgICBvciBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBDUFUgaW4gYSBtaWNyb2NvbnRyb2xsZXIuICBUaGUgbW9yZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoxMi40NDc1MzQwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MzE4MTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgVVNCIGdhZGdldCBzZXR1cDpcblxuKipNeSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIGtleSBjb25maWdzIGZvciB0aGlzIGdhZGdldCBtb2RlIGltcGxlbWVudGF0aW9uIGFyZSBjbGVhcmx5IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AuIFRob3NlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBubyBxdWVzdGlvbi4gTm93LCB0byBtYWtlIHRoaXMgd29yaywgd2UncmUgZ29pbmcgdG8gbmVlZCBhIGhvc3QgY29udHJvbGxlciBkcml2ZXIgKEhDRCkgdGhhdCwgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgKmJlaGF2ZXMqIGxpa2UgYSBVU0IgZ2FkZ2V0LCBidXQgZG9lc24ndCBhY3R1YWxseSBuZWVkIHRvIGJlIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBuZWVkIHRvIHNpbXVsYXRlIGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIGVuYWJsZWQgb3IgaW5jbHVkZWQgc29tZWhvdy4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgcnVuIHNtb290aGx5IGluIHRoZSBhYnNlbmNlIG9mIGEgcmVhbCBkZXZpY2UsIHJpZ2h0PyBHb29kLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjE4LjAyMDcyMTc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExNjUxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9EVU1NWV9IQ0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZz00MjI9c291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NkbnMyL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI5LVxcdHRyaXN0YXRlIFxcXCJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MTguMTIxODkzMTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODI1NTc5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgVVNCX0RVTU1ZX0hDRGAgUGF0Y2ggZm9yIEdhZGdldGZzIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFib3V0IGludGVncmF0aW5nIGBVU0JfRFVNTVlfSENEYCBmb3IgdGVzdGluZyBnYWRnZXRmcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0J3MgYSBzb2xpZCBhcHByb2FjaC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIG9uIHRoZSBjb3JlIGNoYW5nZXMuIExvb2tzIGxpa2Ugd2UncmUgZm9jdXNpbmcgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGRlc3Ryb3lfZXBfZmlsZXNgLCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLCBhbmQgYSBuZXcgYWRkaXRpb24sIGBnYWRnZXRmc19ldmljdF9pbm9kZWAuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIHRoZXkncmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBIbSwgdGhhdCBjb3VsZCBsaW1pdCB0aGUgc2NvcGUgb2YgdGhlaXIgaW1wYWN0LCBkZXBlbmRpbmcgb24gaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZXNlIHN0YXRpYyBvbmVzLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGV4dGVudCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZGVzdHJveV9lcF9maWxlc2AgZmlyc3QuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjIuNjA0NDUzOTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk0NTQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9lcF9maWxlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEzMzM9Z2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU1My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU1NDpzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU1NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU5MT1zdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMyLVxcdERCRyAoZGV2LCBcXFwiJXMgZW5vbWVtXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2MzM6XFx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYzNC1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjUyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjUzOlxcdGRlc3Ryb3lfZXBfZmlsZXMgKGRldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NTQtXFx0Z2FkZ2V0LVxcdTAwM2VlcDAtXFx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjIuOTkzOTE3MjMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzg3ODgzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgaGFzIGEgZmV3IGtleSBmdW5jdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBpdHMgZmlsZSBzeXN0ZW0gbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnYWRnZXRmc191bmJpbmRgIGlzIGNhbGxpbmcgYGRlc3Ryb3lfZXBfZmlsZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgZmlsZXMgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgdW5tb3VudGVkLiBNYWtlcyBzZW5zZS4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgICphbHNvKiBjYWxscyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQncyBhIGJpdCBvZiBhIHBhdHRlcm4sIGFuZCBhIHBvdGVudGlhbCBhcmVhIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gSXQgbWVhbnMgdGhpcyBgZGVzdHJveV9lcF9maWxlc2AgaXMgcHJvYmFibHkgZG9pbmcgc29tZSB2ZXJ5IGNvcmUgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGlzIGNhbGxlZCBpbiBhdCBsZWFzdCB0d28gY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBhY3RpdmF0ZV9lcF9maWxlc2AgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBvdmVybGFwIG9yIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIG90aGVyIGlzc3VlcyB3aXRoaW4gdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgZW5kcG9pbnQgZmlsZXMuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmaWxlcyBhcmUgKmNyZWF0ZWQqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IGBkZXN0cm95X2VwX2ZpbGVzYCBpcyBhY3R1YWxseSBkb2luZy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGZpbGVzIGFyZSBjcmVhdGVkIHByb3ZpZGVzIHRoZSBlc3NlbnRpYWwgY29udGV4dCBmb3Igd2hhdCBuZWVkcyB0byBiZSBkZXN0cm95ZWQuIEl0IG1pZ2h0IGludm9sdmUgYWxsb2NhdGlvbiwgd2hpY2ggaGFzIHRvIGJlIGRlYWxsb2NhdGVkLiBJdCBjb3VsZCBhbHNvIGludm9sdmVkIG1ldGFkYXRhLCB3aGljaCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gY2xlYXIgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoyNy4zNzI3MDkyNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU0NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19jcmVhdGVfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1NTQ9c3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4Ny1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU4ODpzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNTg5LVxcdFxcdHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxODpcXHRcXHRlcnIgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoZGV2LVxcdTAwM2VzYiwgZGF0YS1cXHUwMDNlbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxOS1cXHRcXHRcXHRcXHRkYXRhLCBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTk2Mz1nYWRnZXRmc19tYWtlX2lub2RlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5ODMtICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5ODQ6c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTk4NS1cXHRcXHR2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjYtXFx0ZGV2LVxcdTAwM2VzYiA9IHNiO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDY3OlxcdHJjID0gZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoc2IsIENISVAsIGRldiwgXFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2OC1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjcuNTkwMjU5MTg1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzI3Mzk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgIENhbGxzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAgaXMgY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHdoZXJlIHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZSBpcyBsaWtlbHkgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZW4sIEkgYWxzbyBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgIGlzICphbHNvKiBjYWxsaW5nIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGEgcG9pbnQgb2YgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFjdGl2YXRlX2VwX2ZpbGVzYCBpcyBkb2luZyBhbmQgd2h5IGl0IG5lZWRzIHRvIGNyZWF0ZSBmaWxlcywgYXMgSSBzdXNwZWN0IHRoZXNlIGZpbGVzIGFyZSByZWxhdGVkIHRvIGVuZHBvaW50cy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBhY3RpdmF0ZV9lcF9maWxlc2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBhbHNvIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjMxLjgyMzAwMTg1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MDQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0aXZhdGVfZXBfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNTg4PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5MC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU5MTpzdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTY2Nj1zdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjg5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjkwOlxcdGlmIChhY3RpdmF0ZV9lcF9maWxlcyAoZGV2KSBcXHUwMDNjIDApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2OTEtXFx0XFx0Z290byBlbm9tZW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjMxLjkwNDkxMjAyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2NTkyNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgQmluZGluZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgYW5kIHRyYWNpbmcgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSXQgc2VlbXMgYGdhZGdldGZzX2JpbmRgIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gdGhlbiBjYWxscyBgYWN0aXZhdGVfZXBfZmlsZXNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gTm93LCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBwdWJsaWMgaW50ZXJmYWNlLCBJJ2xsIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRob3NlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGdhZGdldGZzX2JpbmRgLCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgYW5kIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gSXQncyBhIHF1aWNrIGV4ZXJjaXNlIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBvciBhcmUgaW5kZWVkIG1lYW50IHRvIGJlIGV4cG9zZWQuIEtub3dpbmcgdGhlaXIgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsIGFuZCB3aGV0aGVyIGFueSBvdXRzaWRlIGNvbXBvbmVudHMgY2FuIGhvb2sgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzozNS45NzE1MDgzNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjUyMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY0PXN0YXRpYyBzdHJ1Y3QgZGV2X2RhdGFcXHRcXHQqdGhlX2RldmljZTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2NS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY2NjpzdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2Ny1cXHRcXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ0PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzQ1LVxcdC5mdW5jdGlvblxcdD0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NDY6XFx0LmJpbmRcXHRcXHQ9IGdhZGdldGZzX2JpbmQsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDctXFx0LnVuYmluZFxcdFxcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE3OTk9ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODczLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODc0OlxcdC8qIHRyaWdnZXJzIGdhZGdldGZzX2JpbmQoKTsgdGhlbiB3ZSBjYW4gZW51bWVyYXRlLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODc1LVxcdHNwaW5fdW5sb2NrX2lycSAoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjM2LjA0Nzc2NjMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzExNTQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBHYWRnZXRGUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzYCBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGdhZGdldGZzX2JpbmRgIGZ1bmN0aW9uLiBXYWl0IGEgbWludXRlLi4uIHRoYXQncyBkZWNsYXJlZCBgc3RhdGljYC4gUmlnaHQsIHRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB0aGlzLiBJdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogYGdhZGdldGZzX2JpbmRgIGlzIGNhbGxlZC4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gVGhhdCdzIHdoZXJlIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gc2V0dXAgdHlwaWNhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcyBpdCBzaG91bGQgaG9sZCB0aGUga2V5IHRoYXQgbGVhZHMgdG8gdGhlIGNhbGxzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggdGhlIGBiaW5kYCBzdGF0aWMgZnVuY3Rpb24gSSBqdXN0IGlkZW50aWZpZWQuIExldCdzIHNlZSBob3cgdGhhdCBjb25uZWN0aW9uIGlzIG1hZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjM5LjgxODkyMzQyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4MDg3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjI9c3RhdGljIGludFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDIzOmdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyNC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjA5MT1zdGF0aWMgaW50IGdhZGdldGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5Mi17XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwOTM6XFx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgZ2FkZ2V0ZnNfZmlsbF9zdXBlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzozOS45MTM3Mzc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODkwMzk1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBHYWRnZXRGUyBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIEdhZGdldEZTIGNvZGUsIHNwZWNpZmljYWxseSBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEkgc2VlIHRoYXQgYGdhZGdldGZzX2ZpbGxfc3VwZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LiBTYW1lIHdpdGggYGdhZGdldGZzX2dldF90cmVlYC4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGEgcmV2aWV3IG9mIGBnYWRnZXRmc19pbml0YCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBnZXR0aW5nIHRoaXMgZmlsZXN5c3RlbSB1cCBhbmQgcnVubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjQzLjMwMjc4MDEwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjA4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGdhZGdldGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMDA6c3RhdGljIGludCBnYWRnZXRmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTIyPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMjQtXFx0Lm5hbWVcXHRcXHQ9IHNob3J0bmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEyNTpcXHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI2LVxcdC5raWxsX3NiXFx0PSBnYWRnZXRmc19raWxsX3NiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMjg9TU9EVUxFX0FMSUFTX0ZTKFxcXCJnYWRnZXRmc1xcXCIpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMzI6c3RhdGljIGludCBfX2luaXQgZ2FkZ2V0ZnNfaW5pdCAodm9pZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEzMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjE0MS19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxNDI6bW9kdWxlX2luaXQgKGdhZGdldGZzX2luaXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzo0My40Nzg5OTcwMDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODk1NDY2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgR2FkZ2V0RlMgRmlsZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gZmlsZSBvcGVyYXRpb25zIGZvciBnYWRnZXRmcy4gUmlnaHQsIHRoZSBrZXkgYXJlYXMgdG8gbG9vayBhdCBhcmUgZGVmaW5pdGVseSBgZXBfaW9fb3BlcmF0aW9uc2AgYW5kIGBlcDBfb3BlcmF0aW9uc2AuIFRoZXNlIGFyZSB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIGZpbGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBoYXJkd2FyZSwgYW5kIHRoZSBidWxrIG9mIHRoZSBwcm9jZXNzaW5nIHdpbGwgaGFwcGVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBtb3ZlZCwgaG93IHJlcXVlc3RzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHRoZSBkZXZpY2UgZW11bGF0aW9uIGlzIHN0cnVjdHVyZWQgd2l0aGluIHRoZXNlIHNwZWNpZmljIG9wZXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBhIHNvbGlkIGdyYXNwIG9mIGdhZGdldGZzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTQuMDY4NTQ2NTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMzM2ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfaW9fb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTYzOT1lcF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMS0vKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NzAyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMy1cXHQub3duZXIgPVxcdFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxOC1cXHRcXHRlcnIgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoZGV2LVxcdTAwM2VzYiwgZGF0YS1cXHUwMDNlbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxOTpcXHRcXHRcXHRcXHRkYXRhLCBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjAtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDA4PXN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxMS1cXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTI6XFx0aWYgKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUgXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfZm9wID09IFxcdTAwMjZlcF9pb19vcGVyYXRpb25zKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDEzLVxcdFxcdHB1dF9lcChpbm9kZS1cXHUwMDNlaV9wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTQuMjEzNzg1ODUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjcxMTgzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgZXAwX29wZXJhdGlvbnNgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZXAwX29wZXJhdGlvbnNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlIGJhc2UuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSBlc3NlbnRpYWwgb3BlcmF0aW9ucyBmb3IgZXBpc29kZSB6ZXJvLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJvbGUgYW5kIHN0cnVjdHVyZSBiZWZvcmUgZ2V0dGluZyBkZWVwIGludG8gc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gdXAgdG8gc3BlZWQgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBiZWdpbiBkZWJ1Z2dpbmcgYW55dGhpbmcgaW4gdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTcuNTgwOTA2NzYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk5MjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcDBfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5MTI9Z2FkZ2V0X2Rldl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkyOC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkyOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY2LVxcdGRldi1cXHUwMDNlc2IgPSBzYjtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA2NzpcXHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFxcdTAwMjZlcDBfb3BlcmF0aW9ucyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjgtXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjU3LjY2OTkwNTUzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0MDY5NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBlcF9pb19vcGVyYXRpb25zYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGVwX2lvX29wZXJhdGlvbnNgIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhleSdyZSBkb2luZywgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBJL08sIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIG9wdGltaXphdGlvbiBvciBpbXByb3ZlbWVudC4gQXJlIHdlIGhhbmRsaW5nIGVycm9ycyBncmFjZWZ1bGx5PyBXaGF0J3MgdGhlIHRocmVhZGluZyBtb2RlbCBoZXJlLCBhbmQgaG93IGlzIGl0IGltcGFjdGluZyBwZXJmb3JtYW5jZT8gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGltcGxlbWVudGF0aW9uIC0gbGV0J3MgZmluZCB0aGF0LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyB0aGUgY3VycmVudCBzdHJhdGVneSB3aWxsIGhlbHAgbWUgZGVjaWRlIG9uIGNoYW5nZXMgb3IgcmVmYWN0b3JpbmcgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGdhaW5zIHRvIGJlIGhhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowMS4wMzM5Nzc5MDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFxuIDcwMTpcXHQvKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cXG4gNzAyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuIDcwMzpcXHRcXHQub3duZXIgPVxcdFRISVNfTU9EVUxFLFxcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHQub3BlbiA9XFx0XFx0ZXBfb3BlbixcXG4gNzA2OlxcdFxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbiA3MDc6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXFxuIDcwODpcXHRcXHQucmVhZF9pdGVyID1cXHRlcF9yZWFkX2l0ZXIsXFxuIDcwOTpcXHRcXHQud3JpdGVfaXRlciA9XFx0ZXBfd3JpdGVfaXRlcixcXG4gNzEwOlxcdH07XFxuIDcxMTpcXHRcXG4gNzEyOlxcdC8qIEVORFBPSU5UIElOSVRJQUxJWkFUSU9OXFxuIDcxMzpcXHQgKlxcbiA3MTQ6XFx0ICogICAgIGZkID0gb3BlbiAoXFxcIi9kZXYvZ2FkZ2V0LyRFTkRQT0lOVFxcXCIsIE9fUkRXUilcXG4gNzE1OlxcdCAqICAgICBzdGF0dXMgPSB3cml0ZSAoZmQsIGRlc2NyaXB0b3JzLCBzaXplb2YgZGVzY3JpcHRvcnMpXFxuIDcxNjpcXHQgKlxcbiA3MTc6XFx0ICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgY29uZmlndXJpbmdcXG4gNzE4OlxcdCAqIHRoZSBjb250cm9sbGVyIHRvIHByb2Nlc3MgYnVsaywgaW50ZXJydXB0LCBvciBpc29jaHJvbm91cyB0cmFuc2ZlcnNcXG4gNzE5OlxcdCAqIGF0IHRoZSByaWdodCBtYXhwYWNrZXQgc2l6ZSwgYW5kIHNvIG9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowMS4wMzQxNTAzNTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDM1MTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgZXBvbGwgRmlsZSBPcGVyYXRpb25zKipcblxuUmlnaHQsIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9uIGVudHJ5IHBvaW50cyBmb3IgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBkZWZpbmUgdGhlIGVwb2xsJ3MgYmVoYXZpb3IgYXJlIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcmVhbGx5IG1hdHRlci4gTm93LCBob2xkIG9uLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcuIGBlcF9vcGVuYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzICpzdGlsbCogdXNlZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQmVzdCB0byBjaGVjayB0aGUgYGVwMF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSByZWFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGltcGxlbWVudGVkIGZpbGUgb3BlcmF0aW9ucywgYW5kIEkgZXhwZWN0IGBlcF9vcGVuYCB3aWxsIGJlIGFtb25nIHRoZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGV0YWlscyBhcmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MDQuOTM4NTA0NTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyNTpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTkyNjpcXHRcXHRyZXR1cm4gdmFsdWU7XFxuMTkyNzpcXHR9XFxuMTkyODpcXHRcXG4xOTI5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xcbjE5MzA6XFx0XFxuMTkzMTpcXHRcXHQub3BlbiA9XFx0XFx0Z2FkZ2V0X2Rldl9vcGVuLFxcbjE5MzI6XFx0XFx0LnJlYWQgPVxcdFxcdGVwMF9yZWFkLFxcbjE5MzM6XFx0XFx0LndyaXRlID1cXHRkZXZfY29uZmlnLFxcbjE5MzQ6XFx0XFx0LmZhc3luYyA9XFx0ZXAwX2Zhc3luYyxcXG4xOTM1OlxcdFxcdC5wb2xsID1cXHRcXHRlcDBfcG9sbCxcXG4xOTM2OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXFxuMTkzNzpcXHRcXHQucmVsZWFzZSA9XFx0ZGV2X3JlbGVhc2UsXFxuMTkzODpcXHR9O1xcbjE5Mzk6XFx0XFxuMTk0MDpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjE5NDE6XFx0XFxuMTk0MjpcXHQvKiBGSUxFU1lTVEVNIEFORCBTVVBFUkJMT0NLIE9QRVJBVElPTlNcXG4xOTQzOlxcdCAqXFxuMTk0NDpcXHQgKiBNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBjcmVhdGVzIGEgY29udHJvbGxlciBmaWxlLCB1c2VkIGZpcnN0IGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowNC45Mzg3NzU1MDhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1OTA0MDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb25zIGluIHRoZSBVU0IgR2FkZ2V0IERyaXZlciBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zOiBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwMF9yZWFkYCwgYGRldl9jb25maWdgLCBgZXAwX2Zhc3luY2AsIGBlcDBfcG9sbGAsIGBnYWRnZXRfZGV2X2lvY3RsYCwgYW5kIGBkZXZfcmVsZWFzZWAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciwgdGhlIG9uZXMgdGhhdCBoYW5kbGUgdGhlIGRldmljZSBzZXR1cCwgZW5kcG9pbnQgY29tbXVuaWNhdGlvbiwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhc3luY2hyb25vdXMgSS9PLCBwb2xsaW5nLCBJT0NUTCBoYW5kbGluZywgYW5kIGRldmljZSByZWxlYXNlIHJlc3BlY3RpdmVseS4gVGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMsIHRoZSBidWlsZGluZyBibG9ja3MuXG5cblRoZW4gdGhlcmUncyB0aGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBhZGRlZCBieSB0aGlzIHBhdGNoIHdlJ3JlIHJldmlld2luZy4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aHkgdGhpcyBpcyBoZXJlLCBzbyB0aGF0J3MgdGhlIG9uZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGRldmljZSBub2RlIG1hbmFnZW1lbnQuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MTEuNDk3ODE4NTkzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM5ODM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTg0PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAwODpzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDA5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnYWRnZXRfZnNfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDE4LVxcdC5kcm9wX2lub2RlID1cXHRpbm9kZV9qdXN0X2Ryb3AsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTk6XFx0LmV2aWN0X2lub2RlID1cXHRnYWRnZXRmc19ldmljdF9pbm9kZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDoxMS44NDE4MDg5NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTMyNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gR2FkZ2V0RlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGFsbCBhYm91dCBmaXhpbmcgc29tZXRoaW5nIGluIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgYW5kIGBkZXN0cm95X2VwX2ZpbGVzYC4gVGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGZyZWVpbmcgYGVwYCBvYmplY3RzLCB3aGljaCBpcyBhIGNvbW1vbiBhcmVhIGZvciBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLiBTaW5jZSBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBgZ2FkZ2V0ZnNgIHN1YnN5c3RlbSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IHRoaXMgYWRkcmVzc2VzLlxuXG5UbyBzdGFydCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgd2hpY2ggdGhlIHBhdGNoIGFkZGVkLCBhbmQgdGhlIG1vZGlmaWVkIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgYW5kIGBkZXN0cm95X2VwX2ZpbGVzYC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGVzZSBhcmUgYWxsIGRlY2xhcmVkIHN0YXRpYy4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZXnigJlyZSBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB0aGUgZ2VuZXJhbCBzeXN0ZW0sIHRoZXkgYXJlIGludGVybmFsIGhlbHBlcnMuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAgYSBiaXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRyeSBwb2ludHMgdGhhdCAqY2FsbCogdGhlc2UgZnVuY3Rpb25zLiAgVGhhdOKAmWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuIFdlIGhhdmUgYGdhZGdldGZzX2ZpbGxfc3VwZXJgIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vdW50ZWQuIFRoZW4gd2UgaGF2ZSBgYWN0aXZhdGVfZXBfZmlsZXNgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBnYWRnZXRmc19iaW5kYC4gT24gdGhlIHVuYmluZCBzaWRlLCBgZGVzdHJveV9lcF9maWxlc2AgaXMgY2FsbGVkIGJ5IGBnYWRnZXRmc191bmJpbmRgLiBBbmQgdGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGBnYWRnZXRmc19raWxsX3NiYCBpcyBpbnZvbHZlZCBoZXJlLCB3aGljaCBJIG5lZWQgdG8gY2hlY2suICBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBkZXZpY2UgZmlsZSBvcGVyYXRpb25zIHBvdGVudGlhbGx5IGludm9sdmVkOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYW5kIGBnYWRnZXRfZGV2X29wZW5gLCB3aGljaCBjb3VsZCBhbHNvIGluZGlyZWN0bHkgdHJpZ2dlciBvciBiZSBpbXBhY3RlZCBieSB0aGlzIGJ1Zy5cblxuUmlnaHQsIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIGBnYWRnZXRmc19raWxsX3NiYCBmaXJzdC4gSXQncyBhIHByaW1lIHN1c3BlY3QgZm9yIGNsZWFuaW5nIHVwIHJlc291cmNlcywgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDoxOC41NDcxMzkxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkzNDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19raWxsX3NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEwNj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTA3OmdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMDgte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMjI9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdhZGdldGZzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEyNS1cXHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTI2OlxcdC5raWxsX3NiXFx0PSBnYWRnZXRmc19raWxsX3NiLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjE4LjY3NTA3ODc1OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg1MzQ2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVubW91bnRpbmcgYW5kIGNsZWFuaW5nIHVwIGEgZ2FkZ2V0ZnMgZmlsZXN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzY2hlbWUgb2YgdGhpbmdzLiBJcyBpdCBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBhIGB1bW91bnRgIGNhbGwsIG9yIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGV2ZW50PyBXaGF0IHJlc291cmNlcyBkb2VzIGl0IG5lZWQgdG8gcmVsZWFzZT8gTWVtb3J5LCBmaWxlIGRlc2NyaXB0b3JzLCBwZXJoYXBzPyBNb3JlIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBEZWFkbG9ja3M/IERhdGEgY29ycnVwdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBtdXRleGVzIG9yIGxvY2tzIGJlaW5nIGhlbGQgYW5kIGVuc3VyZSB0aGV5J3JlIHJlbGVhc2VkIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgb3JkZXIuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIHRvby4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3IgcmVzb3VyY2UgbGVha3MsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvICdzdWNjZWVkJz8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgaXMga2V5IGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHBvaW50IHdoZXJlIHRoZSBmaWxlc3lzdGVtIGRpc2FwcGVhcnMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpdCBkb2VzLiBJIHdhbnQgdG8gcmVhZCB0aGUgY29kZSB3aXRoIGEgY3JpdGljYWwgZXllLCBsb29raW5nIGZvciBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBpZiB0aGUgZ2FkZ2V0IGZpbGVzeXN0ZW0gaXMgY3JpdGljYWwgZm9yIHNvbWUgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjIzLjY2MDQyOTcxMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMDY6XFx0c3RhdGljIHZvaWRcXG4yMTA3OlxcdGdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMjEwODpcXHR7XFxuMjEwOTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzYl9tdXRleCk7XFxuMjExMDpcXHRcXHRraWxsX2Fub25fc3VwZXIgKHNiKTtcXG4yMTExOlxcdFxcdGlmICh0aGVfZGV2aWNlKSB7XFxuMjExMjpcXHRcXHRcXHRwdXRfZGV2ICh0aGVfZGV2aWNlKTtcXG4yMTEzOlxcdFxcdFxcdHRoZV9kZXZpY2UgPSBOVUxMO1xcbjIxMTQ6XFx0XFx0fVxcbjIxMTU6XFx0XFx0a2ZyZWUoQ0hJUCk7XFxuMjExNjpcXHRcXHRDSElQID0gTlVMTDtcXG4yMTE3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JfbXV0ZXgpO1xcbjIxMTg6XFx0fVxcbjIxMTk6XFx0XFxuMjEyMDpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcXG4yMTIzOlxcdFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuMjEyNDpcXHRcXHQubmFtZVxcdFxcdD0gc2hvcnRuYW1lLFxcbjIxMjU6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IGdhZGdldGZzX2luaXRfZnNfY29udGV4dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MjMuNjYwNTk0NzYxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc5ODY4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoZSByZWxldmFudCB0ZWNobmljYWwgZG9tYWluIGFuZCBjb250ZXh0LlxuXG4qKkNoZWNraW5nIGBwdXRfZGV2YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGBwdXRfZGV2YC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGRldmljZSBtYW5hZ2VtZW50IG9yIHNvbWUgZm9ybSBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGludGVyZmFjZS4gSXQgc3VnZ2VzdHMgYW4gYWN0aW9uLCBsaWtlbHkgYSBjb21tYW5kLCBmdW5jdGlvbiwgb3IgbWV0aG9kIGNhbGwsIHRoYXQncyBjZW50cmFsIHRvIHdoYXRldmVyIHRhc2sgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nICp3aXRoKiB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJcyBpdCBiZWhhdmluZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyB3b3JraW5nIGFzIGl0IHNob3VsZCwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MjcuMTk4NTg1MjEyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE2NjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXRfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU4PXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjM6c3RhdGljIHZvaWQgcHV0X2RldiAoc3RydWN0IGRldl9kYXRhICpkYXRhKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjQte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxNz1zdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIyMC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIyMTpcXHRwdXRfZGV2IChkYXRhLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMjItXFx0LyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MT1kZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTEyMTQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjEyMTU6XFx0cHV0X2RldiAoZGV2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTIxNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNTkxPXN0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjgtZW5vbWVtMTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYyOTpcXHRwdXRfZGV2IChkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMwLVxcdGtmcmVlIChkYXRhKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjYwLVxcdERCRyAoZGV2LCBcXFwiJXMgZG9uZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjYxOlxcdHB1dF9kZXYgKGRldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NjItfVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjgtXFx0aWYgKHJjKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjk6XFx0XFx0cHV0X2RldihkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDcwLVxcdFxcdGdvdG8gRW5vbWVtO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMDc9Z2FkZ2V0ZnNfa2lsbF9zYiAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTExLVxcdGlmICh0aGVfZGV2aWNlKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMTI6XFx0XFx0cHV0X2RldiAodGhlX2RldmljZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTMtXFx0XFx0dGhlX2RldmljZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjI3LjI3Njc1NjYwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTE5MDExNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgYHB1dF9lcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEknbSB0aGlua2luZyBpcywgXCJMZXQncyBjaGVjayBgcHV0X2VwYC5cIiBJJ20gbm90IGdvaW5nIHRvIGdldCBib2dnZWQgZG93biBpbiBwcmVsaW1pbmFyaWVzOyBJIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBtaW5kIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5LiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQncyB0aGUgaW1wbGVtZW50YXRpb24/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIG9yIGZhaWxzIHRvIGhhbmRsZT8gQXJlIHRoZXJlIHJlY2VudCBjaGFuZ2VzLCBjb21taXRzLCBvciBidWcgcmVwb3J0cyBhc3NvY2lhdGVkIHdpdGggYHB1dF9lcGAgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IuIERvZXMgaXQgYWRoZXJlIHRvIHRoZSBBUEkgc3BlY3Mgb3IgaXMgdGhlcmUgc29tZSBkZXZpYXRpb24/IElzIGl0IHVzZWQgaW4gdGhlIGNvZGUgcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlcj8gSW4gZXNzZW5jZSwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIEknbGwgbmVlZCB0byBhbnN3ZXIgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgY29uZGl0aW9uLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBjcml0aWNhbCBjaGVja3BvaW50IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjMyLjc5NTc3MzI4NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNjI0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjE3OnN0YXRpYyB2b2lkIHB1dF9lcCAoc3RydWN0IGVwX2RhdGEgKmRhdGEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MzgxPWVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0zOTctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6Mzk4OlxcdHB1dF9lcCAoZGF0YSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM5OS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz00ODg9c3RhdGljIHZvaWQgZXBfYWlvX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjMtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVwZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NTI0OlxcdHB1dF9lcChlcGRhdGEpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjUtfVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTUyNz1zdGF0aWMgc3NpemVfdCBlcF9haW8oc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3NC1cXHRrZnJlZShwcml2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NTc1OlxcdHB1dF9lcChlcGRhdGEpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzYtXFx0cmV0dXJuIHZhbHVlO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMDg9c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDEyLVxcdGlmIChpbm9kZS1cXHUwMDNlaV9wcml2YXRlIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX2ZvcCA9PSBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxMzpcXHRcXHRwdXRfZXAoaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDozMi44OTUwNDQ3MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI3NDU3NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRW5kcG9pbnQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBuYXN0eSBidWc6IGBwdXRfZXBgIGJlaW5nIGNhbGxlZCBhdCB0aGUgd3JvbmcgdGltZSDigJMgc3BlY2lmaWNhbGx5LCBpbnNpZGUgYGRlc3Ryb3lfZXBfZmlsZXNgIGluc3RlYWQgb2YgZHVyaW5nIGlub2RlIGV2aWN0aW9uLiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiB0aGUgaW5vZGUgc3RpY2tzIGFyb3VuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQgYW5kIG1ha2luZyBzdXJlIHRoYXQgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBtYW5hZ2VkLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmUgYGVwX3JlbGVhc2VgLCBgZXBfYWlvYCwgYGVwX2Fpb19jb21wbGV0ZWAsIGBnYWRnZXRfZGV2X29wZW5gLCBgZGV2X3JlbGVhc2VgLCBgZXBfb3BlbmAsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBgZXBfd3JpdGVfaXRlcmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBhbmQgYGdhZGdldF9kZXZfaW9jdGxgLiBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgZW50cnkgcG9pbnRzIGludG8gdGhlIHN5c3RlbSwgbm90IGp1c3QgaW50ZXJuYWwgaGVscGVycy5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBhIG5vdGUgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEJ1dC4uLiBhbGwgZmlsZSBvcGVyYXRpb25zIGFyZSBzdGF0aWMgaW4gdGhpcyBmaWxlLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHN0aWxsIGVudHJ5IHBvaW50cyB0aGF0IGdldCB0aGVpciBhZGRyZXNzZXMgdGFrZW4sIGFuZCAqc2hvdWxkbid0KiBiZSBpbmxpbmVkLiBTbywgYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgdGhleSdyZSBsaWtlbHkgbm90IGlubGluZWQgYW5kIHRodXMgd2UgY2FuIHN0aWxsIHNlZSB0aGVtLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0cnVlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBhcyBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MzkuMzIyNTA0NjkzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkyNjQ4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxPU1PRFVMRV9MSUNFTlNFIChcXFwiR1BMXFxcIik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo4MzpzdGF0aWMgaW50IGVwX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy04NC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz03MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNTpcXHQub3BlbiA9XFx0XFx0ZXBfb3BlbixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA2LVxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjgxODplcF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjM5LjQ2MTc3NTAxNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU4MDg1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGUgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGJlaW5nIGlubGluZWQuIFRoYXQncyBnb29kOyBpdCBtYWtlcyB0aGVtIGRpc3RpbmN0IHRhcmdldHMuIExldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGZpbGUgb3BlcmF0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuLi4gKkRlZXAgYnJlYXRoKi4uLiBoZXJlIHRoZXkgYXJlOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGVwX2lvY3RsYCwgYGVwX3JlYWRfaXRlcmAsIGBlcF93cml0ZV9pdGVyYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBSaWdodCwgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0LlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIHRoZXNlIHdvdWxkIGJlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHRvIHN0YXJ0IGZ1enppbmcuIEknbGwgbmVlZCB0byBwcmlvcml0aXplIHRob3VnaDsgbGV0J3MgcGljayBhIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWJzZXQgZm9yIHRoZSBpbml0aWFsIHRlc3RzLiBJJ20gdGhpbmtpbmcuLi4gYGVwX29wZW5gLCBgZXBfcmVsZWFzZWAsIGBnYWRnZXRfZGV2X29wZW5gLCBgZGV2X3JlbGVhc2VgLCBhbmQgYGRldl9jb25maWdgIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcgb25lcyB0byBzdGFydCB3aXRoLlxuXG5JIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZXBfcmVsZWFzZWAgZm9yIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjQ0LjIxOTg2NDIyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5ODU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MD1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjM4MTplcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA1LVxcdC5vcGVuID1cXHRcXHRlcF9vcGVuLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDY6XFx0LnJlbGVhc2UgPVxcdGVwX3JlbGVhc2UsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwNy1cXHQudW5sb2NrZWRfaW9jdGwgPSBlcF9pb2N0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6NDQuMzk3ODU1OTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Njk0MDg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipDaGVja2luZyB0aGUgUmVsZWFzZSBQaXBlbGluZSoqXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZ2V0IHN0cmFpZ2h0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZGV2X3JlbGVhc2VgLiBObyBuZWVkIHRvIGJlYXQgYXJvdW5kIHRoZSBidXNoOyBJJ3ZlIGdvdCBhIHNwZWNpZmljIHB1cnBvc2UuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgcGlwZWxpbmUgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbG9va3MgYXMgZXhwZWN0ZWQgYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjU3LjI2NzI2NzM1NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjg0OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MD1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExOTE6ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM2LVxcdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5Mzc6XFx0LnJlbGVhc2UgPVxcdGRldl9yZWxlYXNlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjU3LjQxMDk2MTI5NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU5MTQyODg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IHRyb3VibGVzaG9vdGluZyBvciBmZWF0dXJlIGRlcGxveW1lbnQsIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZC4gTXkgaW5zdGluY3QgaGVyZSBpcyB0byBiZWdpbiBieSBleGFtaW5pbmcgdGhlIGBkZXZfY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBBcmUgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBpbiBwbGFjZT8gSGF2ZSBJIGFkZHJlc3NlZCBwb3RlbnRpYWwgY29uZmxpY3RzPyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gdW5leHBlY3RlZCBvdXRjb21lIGZ1cnRoZXIgZG93biB0aGUgbGluZT8gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYSBtaXNjb25maWd1cmVkIGVudmlyb25tZW50IGNhbiB3YXN0ZSBob3VycyBjaGFzaW5nIHBoYW50b21zLiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBlcnJvciBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgc2V0dGluZ3MsIGRlcGVuZGVuY2llcywgYW5kIGNvbm5lY3Rpb25zIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQgd2l0aGluIHRoZSBkZXZlbG9wbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHVwZnJvbnQgY2hlY2sgd2lsbCBzYXZlIG1lIGEgd29ybGQgb2YgcG90ZW50aWFsIGhlYWRhY2hlcyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE0LjAwMjM5MzU5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU3ODU2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU1LSAqXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjU2OiAqIC0gRmlyc3QsIGRldl9jb25maWcoKSBpcyBjYWxsZWQgd2hlbiAvZGV2L2dhZGdldC8kQ0hJUCBpcyBjb25maWd1cmVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3LSAqICAgKGJ5IHdyaXRpbmcgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgaXRcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzk4PXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3OTk6ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTgwMC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMyLVxcdC5yZWFkID1cXHRcXHRlcDBfcmVhZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMzpcXHQud3JpdGUgPVxcdGRldl9jb25maWcsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzQtXFx0LmZhc3luYyA9XFx0ZXAwX2Zhc3luYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MTQuMTk4MTg0Nzk4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgzMDA4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEdhZGdldCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gemVybyBpbiBvbiBgZ2FkZ2V0X2Rldl9vcGVuYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBpbW1lZGlhdGVseSBjb25jZXJuZWQgd2l0aCB0aGUgZGV2aWNlJ3Mgb3BlbiBvcGVyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBhIHBlcmZlY3RseSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgKm9wZW4qIHJvdXRpbmUgaXMgb2Z0ZW4gdGhlIGdhdGV3YXkgZm9yIGFsbCBzb3J0cyBvZiBzdWJzZXF1ZW50IGludGVyYWN0aW9uLCBzbyBjaGVja2luZyBpdCBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgaG93IGEgZGV2aWNlIGhhbmRsZXMgYW4gb3BlbiBjYWxsIGhlbHBzIHRvIGRpYWdub3NlIHRoZSB3YXkgdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXJyb3JzIGFyZSBoYW5kbGVkLCBhbmQgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCBmb3IgdXNlLiBLbm93aW5nIHRoaXMgYWxzbyBzZXRzIHRoZSBzdGFnZSBmb3IgY2hlY2tpbmcgaG93IHRoZSBkZXZpY2UgaXMgaGFuZGxlZCBmb3Igc3Vic2VxdWVudCByZWFkIGFuZCB3cml0ZSBjYWxscy4gSXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlIHdoZW4gdHJvdWJsZXNob290aW5nLCBkZWJ1Z2dpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGEgZ2FkZ2V0IGRldmljZSdzIGJlaGF2aW9yLiBUaGUgYGdhZGdldF9kZXZfb3BlbmAgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIHRoZSBzZXR1cCBwaGFzZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmhvdyogdGhhdCBoYXBwZW5zIGFyZSB2YXN0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxNy42NTY0ODg3OTRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkzNDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTExPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkxMjpnYWRnZXRfZGV2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkxMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMTpcXHQub3BlbiA9XFx0XFx0Z2FkZ2V0X2Rldl9vcGVuLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMyLVxcdC5yZWFkID1cXHRcXHRlcDBfcmVhZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MTcuODA4NDI4ODU1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzQ2NTcyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBlcF9pb2N0bGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZXBfaW9jdGxgLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFdoYXQncyB0aGUgcGxhbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjIxLjE4MzA5MDUzNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyOTM0NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MzgxPWVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy00MDEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjQwMjpzdGF0aWMgbG9uZyBlcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA2LVxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDc6XFx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwOC1cXHQucmVhZF9pdGVyID1cXHRlcF9yZWFkX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjIxLjI4NjAzMDk1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjI3MDQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgKipcblxuT2theSwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYyBhZ2FpbiwgcGFydGljdWxhcmx5IGluIGxpZ2h0IG9mIFtpbnNlcnQgcmVsZXZhbnQgY29udGV4dCBoZXJlLCBlLmcuLCB0aGUgcmVjZW50IGlzc3VlIHdpdGggcGVyc2lzdGVudCBzdG9yYWdlLCBhIG5ldyBmZWF0dXJlIHdlJ3JlIGltcGxlbWVudGluZywgb3IgYSBwYXJ0aWN1bGFyIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tdLiBJIHdhbnQgdG8gZW5zdXJlIGl0J3MgaGFuZGxpbmcgaW5vZGUgZXZpY3Rpb24gY29ycmVjdGx5IHVuZGVyIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3MgcGF0dGVybnMgd2UndmUgZGlzY3Vzc2VkLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlcXVlbmNpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBkb3VibGUtY2hlY2tpbmcgdGhlIGxvY2tzIGl0IHV0aWxpemVzLCBhbmQgY29uZmlybWluZyB0aGF0IHRoZSBjbGVhbnVwIG9mIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIGBnYWRnZXRmc2DigJlzIGlub2RlIG1hbmFnZW1lbnQg4oCTIHRoZSBzaGFyZWQgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgbWFuYWdlZCB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIEknbGwgYWxzbyB3YW50IHRvIHF1aWNrbHkgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYW55IHJlbGF0ZWQgVkZTIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIHJlbWVtYmVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmFsIFZGUyBpbm9kZSBsaWZlY3ljbGUgYW5kIGZpbGUgc3lzdGVtIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyNS40NDg3MzkyNDNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTUwMzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19ldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5ODQ9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDA3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDA4OnN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTgtXFx0LmRyb3BfaW5vZGUgPVxcdGlub2RlX2p1c3RfZHJvcCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxOTpcXHQuZXZpY3RfaW5vZGUgPVxcdGdhZGdldGZzX2V2aWN0X2lub2RlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDIwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjI1LjgzMDI0ODc2OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQwNzY4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQncyBsYXkgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJ3JlIGxvb2tpbmcgYXQgaGVyZTogYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBhbmQgYGRldl9jb25maWdgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9ucyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMgYXMgZXhwZWN0ZWQuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBVU0JfR0FER0VURlNgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAgYXJlIGFsbCBwcm9wZXJseSBzZXQuXG5cblJpZ2h0LCBgVVNCX0dBREdFVEZTYCwgSSByZW1lbWJlciB0aGF0J3MgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AuIFNvIGl0J3MgcHJvYmFibHkgb2xkZXIgY29kZS4gTm93LCBpcyBgVVNCX0dBREdFVGAgbWFuZGF0b3J5PyBPZiBjb3Vyc2UsIGl0IGlzIOKAkyBpdOKAmXMgdGhlIG1haW4gbWVudWNvbmZpZyBvcHRpb24gZm9yIHRoZSBlbnRpcmUgZ2FkZ2V0IHN1YnN5c3RlbS4gQW5kIGBVU0JfRFVNTVlfSENEYD8gWWVzLCBJIG5lZWQgdGhhdCBvbmUgZm9yIHRlc3RpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBFc3NlbnRpYWwgZm9yIG91ciBkZXZlbG9wbWVudCB3b3JrIVxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBVU0JfR0FER0VURlNgIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjMxLjA3MTAyMTE0NVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwNzQwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MzEuMzgxNzcwNTY2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzA0NTQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBVU0IgR2FkZ2V0IEZpbGUgU3lzdGVtIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIHJldmlzaXQgdGhlIGBLY29uZmlnYCBmb3IgYFVTQl9HQURHRVRGU2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIFttZW50aW9uIHNwZWNpZmljIGFyZWFzIHlvdSBtaWdodCBmb2N1cyBvbiwgZS5nLiwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGdhZGdldCBkcml2ZXJzLCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbnkgcmVjZW50IGNoYW5nZXMsIG9yIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZXNdLiBJIHdhbnQgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJ3MgVVNCIHN0YWNrIG9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIGRyaXZlcnMgSSdtIHdvcmtpbmcgd2l0aC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgY3VycmVudCBzdGF0ZSBjb21wbGV0ZWx5IGFuZCBlbnN1cmUgdGhpcyBvcHRpb24gaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGRlc2lnbiByZXF1aXJlbWVudHMgYW5kIGZ1dHVyZSBleHBhbnNpb24gcG9zc2liaWxpdGllcy4gVGhlcmUgbWlnaHQgYWxzbyBiZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZpbGUgc3lzdGVtIGFuZCB0aGUgcG93ZXItbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgYWxzbyByZXF1aXJlcyBhIHF1aWNrIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNS4zNTIyMjkwN1oiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuIDIyMDpcXHRcXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbiAyMjE6XFx0XFx0c2VsZWN0IFVTQl9GX0ZTXFxuIDIyMjpcXHRcXHRzZWxlY3QgVVNCX0ZVTkNUSU9ORlNfR0VORVJJQyBpZiAhKFVTQl9GVU5DVElPTkZTX0VUSCB8fCBVU0JfRlVOQ1RJT05GU19STkRJUylcXG4gMjIzOlxcdFxcdGhlbHBcXG4gMjI0OlxcdFxcdCAgVGhlIEZ1bmN0aW9uIEZpbGVzeXN0ZW0gKEZ1bmN0aW9uRlMpIGxldHMgb25lIGNyZWF0ZSBVU0JcXG4gMjI1OlxcdFxcdCAgY29tcG9zaXRlIGZ1bmN0aW9ucyBpbiB1c2VyIHNwYWNlIGluIHRoZSBzYW1lIHdheSBHYWRnZXRGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNS4zNTIzNTE1M1oiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY2NTE0NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBEZXBlbmRlbmN5IHdpdGhpbiBVU0IgR2FkZ2V0IENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBJIHNlZSBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlLCBhdCBsZWFzdCBub3QgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LiBCdXQgSSBub3RpY2UgaXQncyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuXCIgVGhhdCBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnQgaXMgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSAqY29uZGl0aW9uYWwqIGRlcGVuZGVuY3kuIEl0IG1lYW5zIHRoaXMgcGFydGljdWxhciBjb2RlIHNlY3Rpb24gb25seSBnZXRzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpZiB0aGUgYFVTQl9HQURHRVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBub3QgYSBkaXJlY3QsIGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnQsIGJ1dCBpdCdzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgaXMgZGVwZW5kZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBjb25maWd1cmVkLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MzkuOTE4ODY5NDI4WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM4MjI1NDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIFVTQl9HQURHRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0MC4xMjI3MDMyMTZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDkwNjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBTb3VyY2UqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZSBhY3R1YWxseSBnZXRzIHB1bGxlZCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEl0J3Mgbm90IGp1c3Qgc2l0dGluZyB0aGVyZSwgb3JwaGFuZWQ7IGl0ICpoYXMqIHRvIGJlIHNvdXJjZWQgZnJvbSBzb21ld2hlcmUgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIHRyZWUuIEkgbmVlZCB0byB0cmFjZSBpdHMgaW5jbHVzaW9uIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxvZ2ljIGZvciB0aGUgbGVnYWN5IFVTQiBnYWRnZXQgZHJpdmVyLiBMZXQgbWUgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIEtjb25maWcgZmlsZXMgYW5kIE1ha2VmaWxlcywgbWF5YmUgdXNlIHNvbWUgZ3JlcC1mdSwgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGdldHMgbGlua2VkIGludG8gdGhlIGJyb2FkZXIgVVNCIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbiBmaWxlcyBpcyBjcml0aWNhbCBmb3IgY29ycmVjdGx5IGVuYWJsaW5nLCBkaXNhYmxpbmcsIGFuZCBjdXN0b21pemluZyB0aGUgZ2FkZ2V0IGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gUmlnaHQsIGxldCdzIHN0YXJ0IHRoZSBodW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTczOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQ0LjMzMzYxMjc2NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MTQwNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZ2FjeS9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ5NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfVENNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NTA5OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NDQuNDUyNzU4OTk4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjU4NDM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFVTQiBHYWRnZXQgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTA5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNvcmUgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZC4gSSdtIGd1ZXNzaW5nIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGlzIGluIHRoYXQgZ2VuZXJhbCBhcmVhLCBhbmQgaXQnbGwgc2VydmUgYXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRldGFpbGVkLCB3aGljaCBjb3VsZCBiZSBoZWxwZnVsLiBJJ2xsIHByb2JhYmx5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gTGluZSA1MDkuLi4gcmlnaHQsIHRoYXQgc2hvdWxkIGdldCB0aGUgaW52ZXN0aWdhdGlvbiBtb3ZpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NDguMDc4NjA2NzY0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0ICB0aGUgZGV2aWNlIGZpbGUgdG8gZ2V0IG9yIHNldCBwcmludGVyIHN0YXR1cy5cXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldF9wcmludGVyLnJzdFxcbiA0OTM6XFx0XFx0ICB3aGljaCBpbmNsdWRlcyBzYW1wbGUgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UgZmlsZS5cXG4gNDk0OlxcdFxcbiA0OTU6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxcbiA0OTY6XFx0XFx0Ym9vbCBcXFwiVVNCIEdhZGdldCBUYXJnZXQgRmFicmljXFxcIlxcbiA0OTc6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRVxcbiA0OTg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfQ09ORklHRlNcXG4gNDk5OlxcdFxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuIDUwMDpcXHRcXHRzZWxlY3QgVVNCX0ZfVENNXFxuIDUwMTpcXHRcXHRoZWxwXFxuIDUwMjpcXHRcXHQgIFRoaXMgZmFicmljIGlzIGEgVVNCIGdhZGdldCBjb21wb25lbnQuIFR3byBVU0IgcHJvdG9jb2xzIGFyZVxcbiA1MDM6XFx0XFx0ICBzdXBwb3J0ZWQgdGhhdCBpcyBCQkIgb3IgQk9UIChCdWxrIE9ubHkgVHJhbnNwb3J0KSBhbmQgVUFTXFxuIDUwNDpcXHRcXHQgIChVU0IgQXR0YWNoZWQgU0NTSSkuIEJPVCBpcyBhZHZlcnRpc2VkIG9uIGFsdGVybmF0aXZlXFxuIDUwNTpcXHRcXHQgIGludGVyZmFjZSAwIChwcmltYXJ5KSBhbmQgVUFTIGlzIG9uIGFsdGVybmF0aXZlIGludGVyZmFjZSAxLlxcbiA1MDY6XFx0XFx0ICBCb3RoIHByb3RvY29scyBjYW4gd29yayBvbiBVU0IyLjAgYW5kIFVTQjMuMC5cXG4gNTA3OlxcdFxcdCAgVUFTIHV0aWxpemVzIHRoZSBVU0IgMy4wIGZlYXR1cmUgY2FsbGVkIHN0cmVhbXMgc3VwcG9ydC5cXG4gNTA4OlxcdFxcbiA1MDk6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcXFwiXFxuIDUxMDpcXHRcXG4gNTExOlxcdGVuZGlmICMgVVNCX0dBREdFVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0OC4wNzg3NzIxNDRaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5MzkzMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGxvb2tpbmcgYXQgaXMgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGAgYmVpbmcgZGVmaW5lZC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgYnV0IHRvIGVtdWxhdGUgdGhlIGdhZGdldCBjb250cm9sbGVyLCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEFuZCwgdG8gYmUgY29tcGxldGUsIGBVU0JfR0FER0VURlNgIG5lZWRzIHRvIGJlIGRlZmluZWQgdG9vLlxuXG5TbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogSSBoYXZlOiBgVVNCX0dBREdFVGAsIGBVU0JfR0FER0VURlNgLCBhbmQgYFVTQl9EVU1NWV9IQ0RgLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEkndmUgaWRlbnRpZmllZCBhIGxpc3QgdGhhdCBzZWVtIHByb21pc2luZzogYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBgZGV2X2NvbmZpZ2AsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBhbmQgYGVwX3dyaXRlX2l0ZXJgLlxuXG5IbW0sIG5vdywgYWJvdXQgYGdhZGdldGZzX2V2aWN0X2lub2RlYC4uLiBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgZ2FkZ2V0X2ZzX29wZXJhdGlvbnNgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIG15IGZvY3VzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBidWcgZml4IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBpdC4gSSB3YW50IHRvIGtlZXAgaXQuXG5cbkknbSBza2lwcGluZyBgZGVzdHJveV9lcF9maWxlc2AgYmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgaXRzIGFkZHJlc3MgaXNuJ3QgdGFrZW4uIEl0J3MgY2FsbGVkIGJ5IGBnYWRnZXRmc191bmJpbmRgIGFuZCBgYWN0aXZhdGVfZXBfZmlsZXNgLCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSB0byBiZSBpbmxpbmVkLiBJIHdpbGwgc2tpcCBpdCBmb3Igbm93LlxuXG5JJ20gYWxzbyBnb2luZyB0byBza2lwIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgZm9yIHRoZSBzYW1lIHJlYXNvbi4gSXQncyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzbid0IHRha2VuLCBhbmQgaXQncyBjYWxsZWQgYnkgYGFjdGl2YXRlX2VwX2ZpbGVzYCBhbmQgYGdhZGdldGZzX2ZpbGxfc3VwZXJgLiBBZ2FpbiwgcHJvYmFibHkgaW5saW5lZC5cblxuTm93LCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBub3QgZ2V0dGluZyBpbmxpbmVkLiBJJ2xsIGNoZWNrIGVhY2ggc3ltYm9sOiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBBc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZXJlZm9yZSBpdCB3b24ndCBiZSBpbmxpbmVkLiBHb29kISBgZXBfcmVsZWFzZWAuIEFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIC0gZGVmaW5pdGVseSBub3QgaW5saW5lZC4gYGRldl9yZWxlYXNlYC4gU2FtZSBzdG9yeTogZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50LiBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBgZGV2X2NvbmZpZ2AsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBhbmQgYGVwX3dyaXRlX2l0ZXJgLiBBbGwgb2YgdGhlbS4gVGhleSBhcmUgYWxsIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBtZWFucyB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbk9rYXksIHRoYXQncyBpdC4gSSBoYXZlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NjUsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NTcuOTcyNzA1NzEzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3Mzg3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIixcbiAgICBcIlVTQl9EVU1NWV9IQ0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRmc19ldmljdF9pbm9kZVwiLFxuICAgIFwiZXBfcmVsZWFzZVwiLFxuICAgIFwiZGV2X3JlbGVhc2VcIixcbiAgICBcImdhZGdldF9kZXZfb3BlblwiLFxuICAgIFwiZXBfb3BlblwiLFxuICAgIFwiZGV2X2NvbmZpZ1wiLFxuICAgIFwiZXBfaW9jdGxcIixcbiAgICBcImVwX3JlYWRfaXRlclwiLFxuICAgIFwiZXBfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldGZzX2V2aWN0X2lub2RlXCIsXG4gICAgXCJlcF9yZWxlYXNlXCIsXG4gICAgXCJkZXZfcmVsZWFzZVwiLFxuICAgIFwiZ2FkZ2V0X2Rldl9vcGVuXCIsXG4gICAgXCJlcF9vcGVuXCIsXG4gICAgXCJkZXZfY29uZmlnXCIsXG4gICAgXCJlcF9pb2N0bFwiLFxuICAgIFwiZXBfcmVhZF9pdGVyXCIsXG4gICAgXCJlcF93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIFVTQiBnYWRnZXRmcyBkcml2ZXIgYnkgbW92aW5nIHRoZSBgcHV0X2VwYCBjYWxsIGZyb20gYGRlc3Ryb3lfZXBfZmlsZXNgIHRvIGEgbmV3IGBnYWRnZXRmc19ldmljdF9pbm9kZWAgY2FsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGRyaXZlciAoZ2FkZ2V0ZnMgY2FuIGJlIHRlc3RlZCB2aWEgZHVtbXlfaGNkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowt2mk6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 08:30:51 +0000 UTC FinishedAt: 2026-07-31 08:36:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "98cdbede-dc32-42a0-8b11-707715055a8f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gadgetfs_evict_inode", "ep_release", "dev_release", "gadget_dev_open", "ep_open", "dev_config", "ep_ioctl", "ep_read_iter", "ep_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYWRnZXRmc19ldmljdF9pbm9kZSYjMzQ7LAogICAgJiMzNDtlcF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2Rldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2dhZGdldF9kZXZfb3BlbiYjMzQ7LAogICAgJiMzNDtlcF9vcGVuJiMzNDssCiAgICAmIzM0O2Rldl9jb25maWcmIzM0OywKICAgICYjMzQ7ZXBfaW9jdGwmIzM0OywKICAgICYjMzQ7ZXBfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O2VwX3dyaXRlX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIFVTQiBnYWRnZXRmcyBkcml2ZXIgYnkgbW92aW5nIHRoZSBgcHV0X2VwYCBjYWxsIGZyb20gYGRlc3Ryb3lfZXBfZmlsZXNgIHRvIGEgbmV3IGBnYWRnZXRmc19ldmljdF9pbm9kZWAgY2FsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGRyaXZlciAoZ2FkZ2V0ZnMgY2FuIGJlIHRlc3RlZCB2aWEgZHVtbXlfaGNkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTE2NmQxZWNhYTQzM2ZhNjhhZjNhZGU2MTg0ZDAyYjczYmE3N2M4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDg6MzI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5hMDMwNjI5ODZiZjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xNTc5LDggJiM0MzsxNTc5LDYgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4gXHRcdC8qIGJyZWFrIGxpbmsgdG8gZGNhY2hlICovXG4gXHRcdHNpbXBsZV9yZW1vdmVfYnlfbmFtZShkZXYtXHUwMDNlc2ItXHUwMDNlc19yb290LCBlcC1cdTAwM2VuYW1lLCBOVUxMKTtcbiBcbi1cdFx0cHV0X2VwIChlcCk7XG4tXG4gXHRcdHNwaW5fbG9ja19pcnEgKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuQEAgLTE5OTYsNiAmIzQzOzE5OTQsNyBAQCBzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxuIFxuIFx0ZGVudHJ5ID0gc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKHNiLVx1MDAzZXNfcm9vdCwgbmFtZSk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpIHtcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkZW50cnkpO1xuIFx0fVxuQEAgLTIwMDYsOSAmIzQzOzIwMDUsMTggQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4mIzQzO1x0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuJiM0MztcdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG4mIzQzO1x0XHRwdXRfZXAoaW5vZGUtXHUwMDNlaV9wcml2YXRlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7XG4gXHQuc3RhdGZzID1cdHNpbXBsZV9zdGF0ZnMsXG4gXHQuZHJvcF9pbm9kZSA9XHRpbm9kZV9qdXN0X2Ryb3AsXG4mIzQzO1x0LmV2aWN0X2lub2RlID1cdGdhZGdldGZzX2V2aWN0X2lub2RlLFxuIH07XG4gXG4gc3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDExNjZkMWVjYWE0MzNmYTY4YWYzYWRlNjE4NGQwMmI3M2JhNzdjOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCmluZGV4IGQ4N2E4YWI1MTUxMDcuLmEwMzA2Mjk4NmJmMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKQEAgLTE1NzksOCAmIzQzOzE1NzksNiBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKIAkJLyogYnJlYWsgbGluayB0byBkY2FjaGUgKi8KIAkJc2ltcGxlX3JlbW92ZV9ieV9uYW1lKGRldi0mZ3Q7c2ItJmd0O3Nfcm9vdCwgZXAtJmd0O25hbWUsIE5VTEwpOwogCi0JCXB1dF9lcCAoZXApOwotCiAJCXNwaW5fbG9ja19pcnEgKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxICgmYW1wO2Rldi0mZ3Q7bG9jayk7CkBAIC0xOTk2LDYgJiM0MzsxOTk0LDcgQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSwKIAogCWRlbnRyeSA9IHNpbXBsZV9zdGFydF9jcmVhdGluZyhzYi0mZ3Q7c19yb290LCBuYW1lKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKJiM0MzsJCWlub2RlLSZndDtpX3ByaXZhdGUgPSBOVUxMOwogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIAl9CkBAIC0yMDA2LDkgJiM0MzsyMDA1LDE4IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoJmFtcDtpbm9kZS0mZ3Q7aV9kYXRhKTsKJiM0MzsJY2xlYXJfaW5vZGUoaW5vZGUpOwomIzQzOwlpZiAoaW5vZGUtJmd0O2lfcHJpdmF0ZSAmYW1wOyZhbXA7IGlub2RlLSZndDtpX2ZvcCA9PSAmYW1wO2VwX2lvX29wZXJhdGlvbnMpCiYjNDM7CQlwdXRfZXAoaW5vZGUtJmd0O2lfcHJpdmF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0gewogCS5zdGF0ZnMgPQlzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlID0JaW5vZGVfanVzdF9kcm9wLAomIzQzOwkuZXZpY3RfaW5vZGUgPQlnYWRnZXRmc19ldmljdF9pbm9kZSwKIH07CiAKIHN0YXRpYyBpbnQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0ZnMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHNvbWUgbG93LWxldmVsIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFyb3VuZCBlbmRwb2ludCAoYGVwYCkgb2JqZWN0IGhhbmRsaW5nIHdpdGhpbiB0aGUgZ2FkZ2V0ZnMgZnJhbWV3b3JrLgoKRmlyc3QsIGl0IGxvb2tzIGxpa2UgYHB1dF9lcChlcClgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGVzdHJveV9lcF9maWxlcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IFRoYXQgZnVuY3Rpb24mIzM5O3MgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNsZWFuIHVwIHJlc291cmNlcywgc28gcmVtb3ZpbmcgYSBgcHV0X2VwKClgIGNhbGwgdGhlcmUgaW1wbGllcyB0aGUgcmVzcG9uc2liaWxpdHkgaXMgc2hpZnRpbmcgZWxzZXdoZXJlIG9yIGl0JiMzOTtzIHBvdGVudGlhbGx5IHJlZHVuZGFudC4gRm9sbG93aW5nIHRoYXQgdGhyZWFkLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgaW5vZGUtJmd0O2lfcHJpdmF0ZSA9IE5VTEw7YCBpbiBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoKWAgdW5kZXIgYSBzcGVjaWZpYyBmYWlsdXJlIGNvbmRpdGlvbiBpbiBgc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKClgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQmIzM5O3MgY3J1Y2lhbCB0byBudWxsIG91dCB0aGF0IHBvaW50ZXIgdG8gcHJldmVudCBkYW5nbGluZyByZWZlcmVuY2VzIGlmIHRoZSBmaWxlIGNyZWF0aW9uIGZhaWxzLgoKVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYWRkaXRpb24sIHRob3VnaCwgaXMgYGdhZGdldGZzX2V2aWN0X2lub2RlKClgLiBUaGlzIGZ1bmN0aW9uJiMzOTtzIHNvbGUgcHVycG9zZSBpcyB0byBjYWxsIGBwdXRfZXAoaW5vZGUtJmd0O2lfcHJpdmF0ZSlgIGlmIGBpbm9kZS0mZ3Q7aV9wcml2YXRlYCBpcyBub3QgbnVsbCBhbmQgdGhlIGlub2RlJiMzOTtzIGZpbGUgb3BlcmF0aW9ucyBhcmUgcmVsYXRlZCB0byBhbiBlbmRwb2ludC4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGZpeC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgaW1wbGVtZW50aW5nIGRlbGF5ZWQgcmVzb3VyY2UgcmVsZWFzZSBkdXJpbmcgaW5vZGUgZXZpY3Rpb24sIHdoaWNoIGlzIHByb2JhYmx5IGNyaXRpY2FsIHRvIGZyZWVpbmcgZW5kcG9pbnQgcmVzb3VyY2VzIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lIHdoZW4gdGhlIGZpbGUgaXMgbm8gbG9uZ2VyIGluIHVzZS4gRmluYWxseSwgdGhleSYjMzk7dmUgcmVnaXN0ZXJlZCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGFzIHRoZSBgLmV2aWN0X2lub2RlYCBvcGVyYXRpb24gaW4gYGdhZGdldF9mc19vcGVyYXRpb25zYC4gVGhpcyB0aWVzIGl0IGFsbCB0b2dldGhlciwgZW5zdXJpbmcgdGhhdCBvdXIgbmV3IGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIGlub2RlIGlzIGJlaW5nIGV2aWN0ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIGlub2RlIGNhY2hlLgoKU28sIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0YXJnZXRpbmcgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgb3IgYSBtZW1vcnkgbGVhay91c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IHRpZWQgdG8gaG93IGBlcGAgb2JqZWN0cyBhcmUgbWFuYWdlZCBpbiBnYWRnZXRmcy4gU2luY2UgZ2FkZ2V0ZnMgY2FuIGJlIGFjY2Vzc2VkIGluIHZpcnR1YWxpemVkIHNjZW5hcmlvcywgZXZlbiB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGEgYGR1bW15X2hjZGAsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdpdmUgbW9yZSBhdHRlbnRpb24gdG8uIEkmIzM5O2Qgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyByZWxhdGVkIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGlzIGlzIHNvbWV0aGluZyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9ucy4gQW5kLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emluZyBtYXRlcmlhbC4gV2UgbmVlZCB0byB0aHJvdyBzb21lIGNyYWZ0ZWQgcGF5bG9hZHMgYXQgdGhpcyB0byBtYWtlIHN1cmUgdGhlIGVuZHBvaW50IHJlc291cmNlcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTIwNj1jb25maWcgVVNCX0dBREdFVEZTXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIxNS1cdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjIxNjpcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z2FkZ2V0ZnNcJiMzNDsuXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBHYWRnZXRGUyBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IHBvaW50aW5nIHRvd2FyZHMgYFVTQl9HQURHRVRGU2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBwcm9jZXNzIHRvIHNlZSBleGFjdGx5IGhvdyBgaW5vZGUuY2AgZ2V0cyBjb21waWxlZCB1bmRlciB0aGlzIGNvbmZpZy4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgZmlndXJpbmcgb3V0IHRoZXNlIGxlZ2FjeSBnYWRnZXQgZHJpdmVyIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYW5kIGNvbXBpbGF0aW9uIHNwZWNpZmljcyByZWxhdGVkIHRvIGBpbm9kZS5jYCBoZXJlIGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHRyb3VibGVzaG9vdCBvciBleHRlbmQgYW55dGhpbmcgZ2FkZ2V0LXJlbGF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbm9kZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcdFx0XHQ6PSBnbWlkaS5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlOjE1OmdhZGdldGZzLXlcdFx0XHQ6PSBpbm9kZS5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlLTE2LWdfbWFzc19zdG9yYWdlLXlcdFx0Oj0gbWFzc19zdG9yYWdlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIEdhZGdldEZTIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgb2YgdGhlIExpbnV4IGtlcm5lbCBpcyBwcmV0dHkgc29saWQsIHNvIEkmIzM5O20gcXVpY2tseSBwdWxsaW5nIHVwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gWWVzLCAqZ2FkZ2V0ZnMqIOKAkyB0aGUgVVNCIGdhZGdldCBmaWxlc3lzdGVtIOKAkyBpcyBmdW5kYW1lbnRhbGx5IGJ1aWx0IGFyb3VuZCBhbmQgdXRpbGl6ZXMgY29kZSBmcm9tIGBpbm9kZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLCBhZnRlciBhbGwsIHNvIHRoZSBjb3JlIGlub2RlIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBrZXkuCgpOb3csIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIGZvciAqVVNCX0dBREdFVEZTKi4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBpdCBoaW5nZXMgb24g4oCTIGFuZCB0aGluayBhYm91dCB3aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGluIGNhc2UgSSBuZWVkIHRvIG1vZGlmeSB0aGF0LiBNaWdodCBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaG9va3MgaW50byB0aGUgbGFyZ2VyIFVTQiBnYWRnZXQgZHJpdmVyIGZyYW1ld29yay4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUgZm9yIGFueSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0dBREdFVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHRoZSB0YXNrIGF0IGhhbmQsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIGxlZ2FjeSBVU0IgZ2FkZ2V0IGRyaXZlcnMsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDIwNiBvZiB0aGUgZmlsZS4gVGhhdCBhcmVhIHByb2JhYmx5IGRlZmluZXMgYSBrZXkgc2VjdGlvbiBvciBvcHRpb24gdGhhdCYjMzk7cyByZWxldmFudCB0byB3aGF0IEkgbmVlZCB0byBhY2NvbXBsaXNoLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGxpa2VseSBiZSBkZXZpY2UgZHJpdmVycyBjb25maWd1cmVkLCBtYXliZSBmZWF0dXJlcyBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiB1bmVhcnRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHQgIG9mIHNldmVyYWwgZXRoZXJuZXQgZnJhbWVzIGludG8gb25lIFVTQiB0cmFuc2ZlciBhbmQgZGlmZmVyZW50XG4gMjAxOlx0XHQgIGFsaWdubWVudCBwb3NzaWJpbGl0aWVzLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjA0Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dfbmNtXCYjMzQ7LlxuIDIwNTpcdFxuIDIwNjpcdGNvbmZpZyBVU0JfR0FER0VURlNcbiAyMDc6XHRcdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxuIDIxMDpcdFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcbiAyMTE6XHRcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJiMzOTt0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cbiAyMTI6XHRcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XG4gMjEzOlx0XHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cbiAyMTQ6XHRcbiAyMTU6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIxNjpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnYWRnZXRmc1wmIzM0Oy5cbiAyMTc6XHRcbiAyMTg6XHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcbiAyMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Z1bmN0aW9uIEZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24sIGFuZCBpbW1lZGlhdGVseSwgbXkgdGhvdWdodCBwcm9jZXNzIGp1bXBzIHRvIGl0cyBwYXJlbnQg4oCTIGBVU0JfR0FER0VUYC4gVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wsIHRoZSBrZXlzdG9uZSBvZiB0aGUgd2hvbGUgc3lzdGVtLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGVyZSBhcmUgYSByYWZ0IG9mIG90aGVyIGZlYXR1cmVzIHRoYXQgaGluZ2Ugb24gYFVTQl9HQURHRVRgIGJlaW5nIGVuYWJsZWQsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgYWxsIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGFzc2VzcyB3aGF0IG9wdGlvbnMgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIChvciB1bmF2YWlsYWJsZSkgYXMgYSByZXN1bHQgb2YgbWFraW5nIGNoYW5nZXMgdG8gYFVTQl9HQURHRVRgLiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG5vdyB0byBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxNzptZW51Y29uZmlnIFVTQl9HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEdhZGdldCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDc9aWYgVVNCX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTAtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo2Mzpjb25maWcgVVNCX0dBREdFVF9WRVJCT1NFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgTWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo5OTpjb25maWcgVVNCX0dBREdFVF9WQlVTX0RSQVdcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cdGludCBcJiMzNDtNYXhpbXVtIFZCVVMgUG93ZXIgdXNhZ2UgKDItNTAwIG1BKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTcuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgc28gdGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0gaXMgZW5hYmxlZCBhbmQgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBVU0IgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBkZWNpc2lvbnMgZ2V0IG1hZGUgYWJvdXQgd2hhdCBmZWF0dXJlcyB3ZSB3YW50IHRvIGV4cG9zZSB0byB1c2Vyc3BhY2UgYXMgYSBVU0IgZGV2aWNlLiBGcm9tIGhlcmUsIEkgY2FuIHRyYWNlIG91dCB0byByZWxldmFudCBjb2RlIGFuZCBvdGhlciBrY29uZmlnIG9wdGlvbnMgYXMgbmVlZGVkLCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgaGlnaC1sZXZlbCBtYXAgb2YgdGhlIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgVVNCIGdhZGdldCBzZXR1cDoKCioqTXkgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBrZXkgY29uZmlncyBmb3IgdGhpcyBnYWRnZXQgbW9kZSBpbXBsZW1lbnRhdGlvbiBhcmUgY2xlYXJseSBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgLiBUaG9zZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2Nrcywgbm8gcXVlc3Rpb24uIE5vdywgdG8gbWFrZSB0aGlzIHdvcmssIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGEgaG9zdCBjb250cm9sbGVyIGRyaXZlciAoSENEKSB0aGF0LCBmb3IgYWxsIGludGVudHMgYW5kIHB1cnBvc2VzLCAqYmVoYXZlcyogbGlrZSBhIFVTQiBnYWRnZXQsIGJ1dCBkb2VzbiYjMzk7dCBhY3R1YWxseSBuZWVkIHRvIGJlIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBuZWVkIHRvIHNpbXVsYXRlIGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIGVuYWJsZWQgb3IgaW5jbHVkZWQgc29tZWhvdy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIG1ha2luZyB0aGlzIHJ1biBzbW9vdGhseSBpbiB0aGUgYWJzZW5jZSBvZiBhIHJlYWwgZGV2aWNlLCByaWdodD8gR29vZC4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0RVTU1ZX0hDRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc9NDIyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NkbnMyL0tjb25maWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnOjQyODpjb25maWcgVVNCX0RVTU1ZX0hDRFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyOS1cdHRyaXN0YXRlIFwmIzM0O0R1bW15IEhDRCAoREVWRUxPUE1FTlQpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVVNCX0RVTU1ZX0hDRGAgUGF0Y2ggZm9yIEdhZGdldGZzIFRlc3RpbmcqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBpcyBhYm91dCBpbnRlZ3JhdGluZyBgVVNCX0RVTU1ZX0hDRGAgZm9yIHRlc3RpbmcgZ2FkZ2V0ZnMsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCYjMzk7cyBhIHNvbGlkIGFwcHJvYWNoLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gb24gdGhlIGNvcmUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGRlc3Ryb3lfZXBfZmlsZXNgLCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLCBhbmQgYSBuZXcgYWRkaXRpb24sIGBnYWRnZXRmc19ldmljdF9pbm9kZWAuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIHRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG0sIHRoYXQgY291bGQgbGltaXQgdGhlIHNjb3BlIG9mIHRoZWlyIGltcGFjdCwgZGVwZW5kaW5nIG9uIGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZXNlIHN0YXRpYyBvbmVzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBleHRlbnQgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjYWxsZXJzIG9mIGBkZXN0cm95X2VwX2ZpbGVzYCBmaXJzdC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyBiZWluZyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rlc3Ryb3lfZXBfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEzMzM9Z2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE1NTMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU1NDpzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNTU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU5MT1zdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYzMi1cdERCRyAoZGV2LCBcJiMzNDslcyBlbm9tZW1cXG5cJiMzNDssIF9fZnVuY19fKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjMzOlx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjM0LVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2Mzg9Z2FkZ2V0ZnNfdW5iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjUyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2NTM6XHRkZXN0cm95X2VwX2ZpbGVzIChkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NTQtXHRnYWRnZXQtXHUwMDNlZXAwLVx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBgZ2FkZ2V0ZnNgIG1vZHVsZSBoYXMgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbnRlcmFjdGluZyB3aXRoIGl0cyBmaWxlIHN5c3RlbSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYGdhZGdldGZzX3VuYmluZGAgaXMgY2FsbGluZyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgZmlsZXMgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgdW5tb3VudGVkLiBNYWtlcyBzZW5zZS4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgICphbHNvKiBjYWxscyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBwYXR0ZXJuLCBhbmQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEl0IG1lYW5zIHRoaXMgYGRlc3Ryb3lfZXBfZmlsZXNgIGlzIHByb2JhYmx5IGRvaW5nIHNvbWUgdmVyeSBjb3JlIHJlc291cmNlIGNsZWFudXAsIGFuZCBpcyBjYWxsZWQgaW4gYXQgbGVhc3QgdHdvIGNvbnRleHRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgYGFjdGl2YXRlX2VwX2ZpbGVzYCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBvdmVybGFwIG9yIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIG90aGVyIGlzc3VlcyB3aXRoaW4gdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgZW5kcG9pbnQgZmlsZXMuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmlsZXMgYXJlICpjcmVhdGVkKiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgd2hhdCBgZGVzdHJveV9lcF9maWxlc2AgaXMgYWN0dWFsbHkgZG9pbmcuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBwcm92aWRlcyB0aGUgZXNzZW50aWFsIGNvbnRleHQgZm9yIHdoYXQgbmVlZHMgdG8gYmUgZGVzdHJveWVkLiBJdCBtaWdodCBpbnZvbHZlIGFsbG9jYXRpb24sIHdoaWNoIGhhcyB0byBiZSBkZWFsbG9jYXRlZC4gSXQgY291bGQgYWxzbyBpbnZvbHZlZCBtZXRhZGF0YSwgd2hpY2ggd291bGQgYmUgaW1wb3J0YW50IHRvIGNsZWFyIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19jcmVhdGVfZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU1ND1zdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNTg4OnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4OS1cdFx0dm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTctXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxODpcdFx0ZXJyID0gZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKGRldi1cdTAwM2VzYiwgZGF0YS1cdTAwM2VuYW1lLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTktXHRcdFx0XHRkYXRhLCBcdTAwMjZlcF9pb19vcGVyYXRpb25zKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTk2Mz1nYWRnZXRmc19tYWtlX2lub2RlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTgzLSAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5ODQ6c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTg1LVx0XHR2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2Ni1cdGRldi1cdTAwM2VzYiA9IHNiO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjc6XHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBDYWxscyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAgaXMgY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaXMgbGlrZWx5IGJlaW5nIGluaXRpYWxpemVkLiBUaGVuLCBJIGFsc28gc2VlIHRoYXQgYGFjdGl2YXRlX2VwX2ZpbGVzYCBpcyAqYWxzbyogY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBwb2ludCBvZiBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYWN0aXZhdGVfZXBfZmlsZXNgIGlzIGRvaW5nIGFuZCB3aHkgaXQgbmVlZHMgdG8gY3JlYXRlIGZpbGVzLCBhcyBJIHN1c3BlY3QgdGhlc2UgZmlsZXMgYXJlIHJlbGF0ZWQgdG8gZW5kcG9pbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBhY3RpdmF0ZV9lcF9maWxlc2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBhbHNvIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0aXZhdGVfZXBfZmlsZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1ODg9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNTkxOnN0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE1OTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY2PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjg5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2OTA6XHRpZiAoYWN0aXZhdGVfZXBfZmlsZXMgKGRldikgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY5MS1cdFx0Z290byBlbm9tZW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdhZGdldEZTIEJpbmRpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgYW5kIHRyYWNpbmcgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSXQgc2VlbXMgYGdhZGdldGZzX2JpbmRgIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gdGhlbiBjYWxscyBgYWN0aXZhdGVfZXBfZmlsZXNgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvciBkZXBlbmRlbmNpZXMuIE5vdywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbW9kdWxlJiMzOTtzIHB1YmxpYyBpbnRlcmZhY2UsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRob3NlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGdhZGdldGZzX2JpbmRgLCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgYW5kIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gSXQmIzM5O3MgYSBxdWljayBleGVyY2lzZSB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgb3IgYXJlIGluZGVlZCBtZWFudCB0byBiZSBleHBvc2VkLiBLbm93aW5nIHRoZWlyIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hldGhlciBhbnkgb3V0c2lkZSBjb21wb25lbnRzIGNhbiBob29rIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY0PXN0YXRpYyBzdHJ1Y3QgZGV2X2RhdGFcdFx0KnRoZV9kZXZpY2U7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2NS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjY2OnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NjctXHRcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ0PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDUtXHQuZnVuY3Rpb25cdD0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc0NjpcdC5iaW5kXHRcdD0gZ2FkZ2V0ZnNfYmluZCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzQ3LVx0LnVuYmluZFx0XHQ9IGdhZGdldGZzX3VuYmluZCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc5OT1kZXZfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODczLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4NzQ6XHQvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODc1LVx0c3Bpbl91bmxvY2tfaXJxIChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEdhZGdldEZTIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnYWRnZXRmc2AgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBnYWRnZXRmc19iaW5kYCBmdW5jdGlvbi4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBSaWdodCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB0aGlzLiBJdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gTm93LCBnaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyAqYmVmb3JlKiBgZ2FkZ2V0ZnNfYmluZGAgaXMgY2FsbGVkLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYGdhZGdldGZzX2ZpbGxfc3VwZXJgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gc2V0dXAgdHlwaWNhbGx5IGhhcHBlbnMuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGFzIGl0IHNob3VsZCBob2xkIHRoZSBrZXkgdGhhdCBsZWFkcyB0byB0aGUgY2FsbHMgYW5kIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGUgYGJpbmRgIHN0YXRpYyBmdW5jdGlvbiBJIGp1c3QgaWRlbnRpZmllZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjb25uZWN0aW9uIGlzIG1hZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAyMj1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAyMzpnYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyNC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwOTE9c3RhdGljIGludCBnYWRnZXRmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5Mi17XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA5MzpcdHJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGdhZGdldGZzX2ZpbGxfc3VwZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgdGhlIEdhZGdldEZTIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBHYWRnZXRGUyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBmaWxlc3lzdGVtIGlzIGluaXRpYWxpemVkLiBJIHNlZSB0aGF0IGBnYWRnZXRmc19maWxsX3N1cGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNhbWUgd2l0aCBgZ2FkZ2V0ZnNfZ2V0X3RyZWVgLiBOb3csIEkgd2FudCB0byB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHNvIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGEgcmV2aWV3IG9mIGBnYWRnZXRmc19pbml0YCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBnZXR0aW5nIHRoaXMgZmlsZXN5c3RlbSB1cCBhbmQgcnVubmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjA5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBnYWRnZXRmc19jb250ZXh0X29wcyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5OS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTAwOnN0YXRpYyBpbnQgZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTAxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEyMj1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEyNC1cdC5uYW1lXHRcdD0gc2hvcnRuYW1lLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMjU6XHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMjYtXHQua2lsbF9zYlx0PSBnYWRnZXRmc19raWxsX3NiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTI4PU1PRFVMRV9BTElBU19GUyhcJiMzNDtnYWRnZXRmc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEzMjpzdGF0aWMgaW50IF9faW5pdCBnYWRnZXRmc19pbml0ICh2b2lkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQxLX1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTQyOm1vZHVsZV9pbml0IChnYWRnZXRmc19pbml0KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgR2FkZ2V0RlMgRmlsZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byBmaWxlIG9wZXJhdGlvbnMgZm9yIGdhZGdldGZzLiBSaWdodCwgdGhlIGtleSBhcmVhcyB0byBsb29rIGF0IGFyZSBkZWZpbml0ZWx5IGBlcF9pb19vcGVyYXRpb25zYCBhbmQgYGVwMF9vcGVyYXRpb25zYC4gVGhlc2UgYXJlIHRoZSBuYXR1cmFsIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgVVNCIGhhcmR3YXJlLCBhbmQgdGhlIGJ1bGsgb2YgdGhlIHByb2Nlc3Npbmcgd2lsbCBoYXBwZW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIG1vdmVkLCBob3cgcmVxdWVzdHMgYXJlIGhhbmRsZWQsIGFuZCBob3cgdGhlIGRldmljZSBlbXVsYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlc2Ugc3BlY2lmaWMgb3BlcmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIGEgc29saWQgZ3Jhc3Agb2YgZ2FkZ2V0ZnMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfaW9fb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NjM5PWVwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMS0vKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDMtXHQub3duZXIgPVx0VEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MTgtXHRcdGVyciA9IGdhZGdldGZzX2NyZWF0ZV9maWxlIChkZXYtXHUwMDNlc2IsIGRhdGEtXHUwMDNlbmFtZSxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjE5Olx0XHRcdFx0ZGF0YSwgXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYyMC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAwOD1zdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDExLVx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTI6XHRpZiAoaW5vZGUtXHUwMDNlaV9wcml2YXRlIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX2ZvcCA9PSBcdTAwMjZlcF9pb19vcGVyYXRpb25zKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTMtXHRcdHB1dF9lcChpbm9kZS1cdTAwM2VpX3ByaXZhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGVwMF9vcGVyYXRpb25zYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZXAwX29wZXJhdGlvbnNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlIGJhc2UuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgZXNzZW50aWFsIG9wZXJhdGlvbnMgZm9yIGVwaXNvZGUgemVybywgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0cyByb2xlIGFuZCBzdHJ1Y3R1cmUgYmVmb3JlIGdldHRpbmcgZGVlcCBpbnRvIHNwZWNpZmljIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdXAgdG8gc3BlZWQgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBiZWdpbiBkZWJ1Z2dpbmcgYW55dGhpbmcgaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXAwX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5MTI9Z2FkZ2V0X2Rldl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkyOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMwLVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2Ni1cdGRldi1cdTAwM2VzYiA9IHNiO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjc6XHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZXBfaW9fb3BlcmF0aW9uc2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGVwX2lvX29wZXJhdGlvbnNgIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nLCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGhhbmRsaW5nIEkvTywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmUgcmlwZSBmb3Igb3B0aW1pemF0aW9uIG9yIGltcHJvdmVtZW50LiBBcmUgd2UgaGFuZGxpbmcgZXJyb3JzIGdyYWNlZnVsbHk/IFdoYXQmIzM5O3MgdGhlIHRocmVhZGluZyBtb2RlbCBoZXJlLCBhbmQgaG93IGlzIGl0IGltcGFjdGluZyBwZXJmb3JtYW5jZT8gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbiAtIGxldCYjMzk7cyBmaW5kIHRoYXQuIEhvcGVmdWxseSwgdGhlIGNvZGUgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGVhc3kgdG8gZm9sbG93LiBLbm93aW5nIHRoZSBjdXJyZW50IHN0cmF0ZWd5IHdpbGwgaGVscCBtZSBkZWNpZGUgb24gY2hhbmdlcyBvciByZWZhY3RvcmluZyBpZiB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgZ2FpbnMgdG8gYmUgaGFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XG4gNzAxOlx0LyogdXNlZCBhZnRlciBlbmRwb2ludCBjb25maWd1cmF0aW9uICovXG4gNzAyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbiA3MDM6XHRcdC5vd25lciA9XHRUSElTX01PRFVMRSxcbiA3MDQ6XHRcbiA3MDU6XHRcdC5vcGVuID1cdFx0ZXBfb3BlbixcbiA3MDY6XHRcdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG4gNzA3Olx0XHQudW5sb2NrZWRfaW9jdGwgPSBlcF9pb2N0bCxcbiA3MDg6XHRcdC5yZWFkX2l0ZXIgPVx0ZXBfcmVhZF9pdGVyLFxuIDcwOTpcdFx0LndyaXRlX2l0ZXIgPVx0ZXBfd3JpdGVfaXRlcixcbiA3MTA6XHR9O1xuIDcxMTpcdFxuIDcxMjpcdC8qIEVORFBPSU5UIElOSVRJQUxJWkFUSU9OXG4gNzEzOlx0ICpcbiA3MTQ6XHQgKiAgICAgZmQgPSBvcGVuIChcJiMzNDsvZGV2L2dhZGdldC8kRU5EUE9JTlRcJiMzNDssIE9fUkRXUilcbiA3MTU6XHQgKiAgICAgc3RhdHVzID0gd3JpdGUgKGZkLCBkZXNjcmlwdG9ycywgc2l6ZW9mIGRlc2NyaXB0b3JzKVxuIDcxNjpcdCAqXG4gNzE3Olx0ICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgY29uZmlndXJpbmdcbiA3MTg6XHQgKiB0aGUgY29udHJvbGxlciB0byBwcm9jZXNzIGJ1bGssIGludGVycnVwdCwgb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzXG4gNzE5Olx0ICogYXQgdGhlIHJpZ2h0IG1heHBhY2tldCBzaXplLCBhbmQgc28gb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgZXBvbGwgRmlsZSBPcGVyYXRpb25zKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgZmlsZSBvcGVyYXRpb24gZW50cnkgcG9pbnRzIGZvciB0aGUgZXBvbGwgaW1wbGVtZW50YXRpb24uIFRoZSBrZXkgZnVuY3Rpb25zLCB0aGUgb25lcyB0aGF0IGRlZmluZSB0aGUgZXBvbGwmIzM5O3MgYmVoYXZpb3IgYXJlIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcmVhbGx5IG1hdHRlci4gTm93LCBob2xkIG9uLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcuIGBlcF9vcGVuYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyAqc3RpbGwqIHVzZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHByb2JsZW0uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQmVzdCB0byBjaGVjayB0aGUgYGVwMF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSByZWFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGltcGxlbWVudGVkIGZpbGUgb3BlcmF0aW9ucywgYW5kIEkgZXhwZWN0IGBlcF9vcGVuYCB3aWxsIGJlIGFtb25nIHRoZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGV0YWlscyBhcmUgaGlkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkyNTpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjE5MjY6XHRcdHJldHVybiB2YWx1ZTtcbjE5Mjc6XHR9XG4xOTI4Olx0XG4xOTI5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XG4xOTMwOlx0XG4xOTMxOlx0XHQub3BlbiA9XHRcdGdhZGdldF9kZXZfb3BlbixcbjE5MzI6XHRcdC5yZWFkID1cdFx0ZXAwX3JlYWQsXG4xOTMzOlx0XHQud3JpdGUgPVx0ZGV2X2NvbmZpZyxcbjE5MzQ6XHRcdC5mYXN5bmMgPVx0ZXAwX2Zhc3luYyxcbjE5MzU6XHRcdC5wb2xsID1cdFx0ZXAwX3BvbGwsXG4xOTM2Olx0XHQudW5sb2NrZWRfaW9jdGwgPSBnYWRnZXRfZGV2X2lvY3RsLFxuMTkzNzpcdFx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG4xOTM4Olx0fTtcbjE5Mzk6XHRcbjE5NDA6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTk0MTpcdFxuMTk0MjpcdC8qIEZJTEVTWVNURU0gQU5EIFNVUEVSQkxPQ0sgT1BFUkFUSU9OU1xuMTk0MzpcdCAqXG4xOTQ0Olx0ICogTW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0gY3JlYXRlcyBhIGNvbnRyb2xsZXIgZmlsZSwgdXNlZCBmaXJzdCBmb3JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBGdW5jdGlvbnMgaW4gdGhlIFVTQiBHYWRnZXQgRHJpdmVyIENvbnRleHQqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb3JlIGZ1bmN0aW9uczogYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBUaGVzZSBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIsIHRoZSBvbmVzIHRoYXQgaGFuZGxlIHRoZSBkZXZpY2Ugc2V0dXAsIGVuZHBvaW50IGNvbW11bmljYXRpb24sIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgYXN5bmNocm9ub3VzIEkvTywgcG9sbGluZywgSU9DVEwgaGFuZGxpbmcsIGFuZCBkZXZpY2UgcmVsZWFzZSByZXNwZWN0aXZlbHkuIFRoZSBzdGFuZGFyZCBvcGVyYXRpb25zLCB0aGUgYnVpbGRpbmcgYmxvY2tzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBhZGRlZCBieSB0aGlzIHBhdGNoIHdlJiMzOTtyZSByZXZpZXdpbmcuIEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoeSB0aGlzIGlzIGhlcmUsIHNvIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIGZpbGUgc3lzdGVtIGFuZCBkZXZpY2Ugbm9kZSBtYW5hZ2VtZW50LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhZGdldGZzX2V2aWN0X2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTg0PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDctXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAwODpzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnYWRnZXRfZnNfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxOC1cdC5kcm9wX2lub2RlID1cdGlub2RlX2p1c3RfZHJvcCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDE5Olx0LmV2aWN0X2lub2RlID1cdGdhZGdldGZzX2V2aWN0X2lub2RlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMjAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCdWcgRml4IGluIEdhZGdldEZTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgZml4aW5nIHNvbWV0aGluZyBpbiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGFuZCBgZGVzdHJveV9lcF9maWxlc2AuIFRoZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBmcmVlaW5nIGBlcGAgb2JqZWN0cywgd2hpY2ggaXMgYSBjb21tb24gYXJlYSBmb3Igc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycy4gU2luY2UgSSYjMzk7bSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIGBnYWRnZXRmc2Agc3Vic3lzdGVtLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBhZGRyZXNzZXMuCgpUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLCB3aGljaCB0aGUgcGF0Y2ggYWRkZWQsIGFuZCB0aGUgbW9kaWZpZWQgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBhbmQgYGRlc3Ryb3lfZXBfZmlsZXNgLiBXYWl0IGEgbWludXRlLi4uIHRoZXNlIGFyZSBhbGwgZGVjbGFyZWQgc3RhdGljLiBIbW0sIHRoYXQgc3VnZ2VzdHMgdGhleeKAmXJlIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSBnZW5lcmFsIHN5c3RlbSwgdGhleSBhcmUgaW50ZXJuYWwgaGVscGVycy4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBjb25zaWRlciB0aGUgZW50cnkgcG9pbnRzIHRoYXQgKmNhbGwqIHRoZXNlIGZ1bmN0aW9ucy4gIFRoYXTigJlsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBXZSBoYXZlIGBnYWRnZXRmc19maWxsX3N1cGVyYCBjYWxsaW5nIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBiZWluZyBtb3VudGVkLiBUaGVuIHdlIGhhdmUgYGFjdGl2YXRlX2VwX2ZpbGVzYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgZ2FkZ2V0ZnNfYmluZGAuIE9uIHRoZSB1bmJpbmQgc2lkZSwgYGRlc3Ryb3lfZXBfZmlsZXNgIGlzIGNhbGxlZCBieSBgZ2FkZ2V0ZnNfdW5iaW5kYC4gQW5kIHRoZXJlJiMzOTtzIGFsc28gdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgYGdhZGdldGZzX2tpbGxfc2JgIGlzIGludm9sdmVkIGhlcmUsIHdoaWNoIEkgbmVlZCB0byBjaGVjay4gIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgcG90ZW50aWFsbHkgaW52b2x2ZWQ6IGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBhbmQgYGdhZGdldF9kZXZfb3BlbmAsIHdoaWNoIGNvdWxkIGFsc28gaW5kaXJlY3RseSB0cmlnZ2VyIG9yIGJlIGltcGFjdGVkIGJ5IHRoaXMgYnVnLgoKUmlnaHQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZmlyc3QuIEl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRmc19raWxsX3NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTA2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEwNzpnYWRnZXRmc19raWxsX3NiIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTIyPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI1LVx0LmluaXRfZnNfY29udGV4dCA9IGdhZGdldGZzX2luaXRfZnNfY29udGV4dCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTI2Olx0LmtpbGxfc2JcdD0gZ2FkZ2V0ZnNfa2lsbF9zYixcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTU1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1bm1vdW50aW5nIGFuZCBjbGVhbmluZyB1cCBhIGdhZGdldGZzIGZpbGVzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncy4gSXMgaXQgYSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgYSBgdW1vdW50YCBjYWxsLCBvciB0cmlnZ2VyZWQgYnkgc29tZSBvdGhlciBldmVudD8gV2hhdCByZXNvdXJjZXMgZG9lcyBpdCBuZWVkIHRvIHJlbGVhc2U/IE1lbW9yeSwgZmlsZSBkZXNjcmlwdG9ycywgcGVyaGFwcz8gTW9yZSBpbXBvcnRhbnRseSwgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBwaXRmYWxscz8gRGVhZGxvY2tzPyBEYXRhIGNvcnJ1cHRpb24/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgbXV0ZXhlcyBvciBsb2NrcyBiZWluZyBoZWxkIGFuZCBlbnN1cmUgdGhleSYjMzk7cmUgcmVsZWFzZWQgaW4gYSBzYWZlIGFuZCBwcmVkaWN0YWJsZSBvcmRlci4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIHRvby4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3IgcmVzb3VyY2UgbGVha3MsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvICYjMzk7c3VjY2VlZCYjMzk7PyBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBpcyBrZXkgaGVyZS4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGZpbGVzeXN0ZW0gZGlzYXBwZWFycywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCBldmVyeXRoaW5nIGl0IGRvZXMuIEkgd2FudCB0byByZWFkIHRoZSBjb2RlIHdpdGggYSBjcml0aWNhbCBleWUsIGxvb2tpbmcgZm9yIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGlmIHRoZSBnYWRnZXQgZmlsZXN5c3RlbSBpcyBjcml0aWNhbCBmb3Igc29tZSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTA2Olx0c3RhdGljIHZvaWRcbjIxMDc6XHRnYWRnZXRmc19raWxsX3NiIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMjEwODpcdHtcbjIxMDk6XHRcdG11dGV4X2xvY2soXHUwMDI2c2JfbXV0ZXgpO1xuMjExMDpcdFx0a2lsbF9hbm9uX3N1cGVyIChzYik7XG4yMTExOlx0XHRpZiAodGhlX2RldmljZSkge1xuMjExMjpcdFx0XHRwdXRfZGV2ICh0aGVfZGV2aWNlKTtcbjIxMTM6XHRcdFx0dGhlX2RldmljZSA9IE5VTEw7XG4yMTE0Olx0XHR9XG4yMTE1Olx0XHRrZnJlZShDSElQKTtcbjIxMTY6XHRcdENISVAgPSBOVUxMO1xuMjExNzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiX211dGV4KTtcbjIxMTg6XHR9XG4yMTE5Olx0XG4yMTIwOlx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbjIxMjE6XHRcbjIxMjI6XHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcbjIxMjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjEyNDpcdFx0Lm5hbWVcdFx0PSBzaG9ydG5hbWUsXG4yMTI1Olx0XHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhlIHJlbGV2YW50IHRlY2huaWNhbCBkb21haW4gYW5kIGNvbnRleHQuCgoqKkNoZWNraW5nIGBwdXRfZGV2YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyBgcHV0X2RldmAuIFRoYXQmIzM5O3MgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGRldmljZSBtYW5hZ2VtZW50IG9yIHNvbWUgZm9ybSBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGludGVyZmFjZS4gSXQgc3VnZ2VzdHMgYW4gYWN0aW9uLCBsaWtlbHkgYSBjb21tYW5kLCBmdW5jdGlvbiwgb3IgbWV0aG9kIGNhbGwsIHRoYXQmIzM5O3MgY2VudHJhbCB0byB3aGF0ZXZlciB0YXNrIEkmIzM5O20gY3VycmVudGx5IGZvY3VzZWQgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nICp3aXRoKiB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJcyBpdCBiZWhhdmluZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyB3b3JraW5nIGFzIGl0IHNob3VsZCwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU4PXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjM6c3RhdGljIHZvaWQgcHV0X2RldiAoc3RydWN0IGRldl9kYXRhICpkYXRhKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxNz1zdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMjAtXHRcdHJldHVybjtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMjE6XHRwdXRfZGV2IChkYXRhLVx1MDAzZWRldik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjIyLVx0LyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTE9ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTIxNC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMjE1Olx0cHV0X2RldiAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjE2LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjgtZW5vbWVtMTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjI5Olx0cHV0X2RldiAoZGV2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMwLVx0a2ZyZWUgKGRhdGEpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2MC1cdERCRyAoZGV2LCBcJiMzNDslcyBkb25lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY2MTpcdHB1dF9kZXYgKGRldik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2Mi19XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY4LVx0aWYgKHJjKSB7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA2OTpcdFx0cHV0X2RldihkZXYpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNzAtXHRcdGdvdG8gRW5vbWVtO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTA3PWdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTEtXHRpZiAodGhlX2RldmljZSkge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMTI6XHRcdHB1dF9kZXYgKHRoZV9kZXZpY2UpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTMtXHRcdHRoZV9kZXZpY2UgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNoZWNraW5nIGBwdXRfZXBgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBwdXRfZXBgLiYjMzQ7IEkmIzM5O20gbm90IGdvaW5nIHRvIGdldCBib2dnZWQgZG93biBpbiBwcmVsaW1pbmFyaWVzOyBJIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBtaW5kIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5LiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGVkZ2UgY2FzZXMgaXQgaGFuZGxlcywgb3IgZmFpbHMgdG8gaGFuZGxlPyBBcmUgdGhlcmUgcmVjZW50IGNoYW5nZXMsIGNvbW1pdHMsIG9yIGJ1ZyByZXBvcnRzIGFzc29jaWF0ZWQgd2l0aCBgcHV0X2VwYCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IuIERvZXMgaXQgYWRoZXJlIHRvIHRoZSBBUEkgc3BlY3Mgb3IgaXMgdGhlcmUgc29tZSBkZXZpYXRpb24/IElzIGl0IHVzZWQgaW4gdGhlIGNvZGUgcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlcj8gSW4gZXNzZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIGFuc3dlciB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBjb25kaXRpb24uIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGNyaXRpY2FsIGNoZWNrcG9pbnQgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXRfZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMj1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2VwIChzdHJ1Y3QgZXBfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjE2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxNzpzdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxOC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MT1lcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM5Ny1cdG11dGV4X3VubG9jayhcdTAwMjZkYXRhLVx1MDAzZWxvY2spO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjM5ODpcdHB1dF9lcCAoZGF0YSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMzk5LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTQ4OD1zdGF0aWMgdm9pZCBlcF9haW9fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjMtXHRzcGluX3VubG9jayhcdTAwMjZlcGRhdGEtXHUwMDNlZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjUyNDpcdHB1dF9lcChlcGRhdGEpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTUyNS19XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTUyNz1zdGF0aWMgc3NpemVfdCBlcF9haW8oc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzQtXHRrZnJlZShwcml2KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo1NzU6XHRwdXRfZXAoZXBkYXRhKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzYtXHRyZXR1cm4gdmFsdWU7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMDg9c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxMi1cdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxMzpcdFx0cHV0X2VwKGlub2RlLVx1MDAzZWlfcHJpdmF0ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRW5kcG9pbnQgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcmV0dHkgbmFzdHkgYnVnOiBgcHV0X2VwYCBiZWluZyBjYWxsZWQgYXQgdGhlIHdyb25nIHRpbWUg4oCTIHNwZWNpZmljYWxseSwgaW5zaWRlIGBkZXN0cm95X2VwX2ZpbGVzYCBpbnN0ZWFkIG9mIGR1cmluZyBpbm9kZSBldmljdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmVjaXBlIGZvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIHRoZSBpbm9kZSBzdGlja3MgYXJvdW5kLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBob3cgdGhpcyBpcyBoYW5kbGVkLCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBlbmRwb2ludCBhbmQgbWFraW5nIHN1cmUgdGhhdCByZXNvdXJjZXMgYXJlIHByb3Blcmx5IG1hbmFnZWQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IExldCYjMzk7cyBzZWUuLi4gdGhlIHByaW1hcnkgc3VzcGVjdHMgYXJlIGBlcF9yZWxlYXNlYCwgYGVwX2Fpb2AsIGBlcF9haW9fY29tcGxldGVgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGRldl9yZWxlYXNlYCwgYGVwX29wZW5gLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYGVwX3dyaXRlX2l0ZXJgLCBgZXAwX3JlYWRgLCBgZGV2X2NvbmZpZ2AsIGBlcDBfZmFzeW5jYCwgYGVwMF9wb2xsYCwgYW5kIGBnYWRnZXRfZGV2X2lvY3RsYC4gSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBzeXN0ZW0sIG5vdCBqdXN0IGludGVybmFsIGhlbHBlcnMuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBhIG5vdGUgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEJ1dC4uLiBhbGwgZmlsZSBvcGVyYXRpb25zIGFyZSBzdGF0aWMgaW4gdGhpcyBmaWxlLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHN0aWxsIGVudHJ5IHBvaW50cyB0aGF0IGdldCB0aGVpciBhZGRyZXNzZXMgdGFrZW4sIGFuZCAqc2hvdWxkbiYjMzk7dCogYmUgaW5saW5lZC4gU28sIGFsdGhvdWdoIHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHRoZXkmIzM5O3JlIGxpa2VseSBub3QgaW5saW5lZCBhbmQgdGh1cyB3ZSBjYW4gc3RpbGwgc2VlIHRoZW0uIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdHJ1ZSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgaXQgY2hhbmdlcyB0aGUgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxPU1PRFVMRV9MSUNFTlNFIChcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjgzOnN0YXRpYyBpbnQgZXBfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtODQtXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9pb19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NzA1Olx0Lm9wZW4gPVx0XHRlcF9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwNi1cdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6ODE4OmVwX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy04MTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMyNQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZXM6IEEgU3RyYXRlZ2ljIEFwcHJvYWNoKioKCk9rYXksIHNvIHRoZSBhZGRyZXNzZXMgYXJlIHRha2VuLCBtZWFuaW5nIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGJlaW5nIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWFrZXMgdGhlbSBkaXN0aW5jdCB0YXJnZXRzLiBMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUgZmlsZSBvcGVyYXRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuLi4gKkRlZXAgYnJlYXRoKi4uLiBoZXJlIHRoZXkgYXJlOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGVwX2lvY3RsYCwgYGVwX3JlYWRfaXRlcmAsIGBlcF93cml0ZV9pdGVyYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBSaWdodCwgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0LgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayB0aGVzZSB3b3VsZCBiZSBleGNlbGxlbnQgY2FuZGlkYXRlcyB0byBzdGFydCBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHByaW9yaXRpemUgdGhvdWdoOyBsZXQmIzM5O3MgcGljayBhIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWJzZXQgZm9yIHRoZSBpbml0aWFsIHRlc3RzLiBJJiMzOTttIHRoaW5raW5nLi4uIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGRldl9yZWxlYXNlYCwgYW5kIGBkZXZfY29uZmlnYCBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIG9uZXMgdG8gc3RhcnQgd2l0aC4KCkkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBlcF9yZWxlYXNlYCBmb3IgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MD1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MzgxOmVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0zODIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz03MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA1LVx0Lm9wZW4gPVx0XHRlcF9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNjpcdC5yZWxlYXNlID1cdGVwX3JlbGVhc2UsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA3LVx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkNoZWNraW5nIHRoZSBSZWxlYXNlIFBpcGVsaW5lKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGdldCBzdHJhaWdodCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGRldl9yZWxlYXNlYC4gTm8gbmVlZCB0byBiZWF0IGFyb3VuZCB0aGUgYnVzaDsgSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgcHVycG9zZS4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBwZWVrIGF0IHRoZSBwaXBlbGluZSB0byBhc3Nlc3MgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsb29rcyBhcyBleHBlY3RlZCBiZWZvcmUgSSBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MD1zdGF0aWMgaW50XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5MTpkZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM2LVx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTM3Olx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgZmVhdHVyZSBkZXBsb3ltZW50LCBpdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gc3RhcnQgd2l0aCB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZC4gTXkgaW5zdGluY3QgaGVyZSBpcyB0byBiZWdpbiBieSBleGFtaW5pbmcgdGhlIGBkZXZfY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBBcmUgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBpbiBwbGFjZT8gSGF2ZSBJIGFkZHJlc3NlZCBwb3RlbnRpYWwgY29uZmxpY3RzPyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gdW5leHBlY3RlZCBvdXRjb21lIGZ1cnRoZXIgZG93biB0aGUgbGluZT8gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYSBtaXNjb25maWd1cmVkIGVudmlyb25tZW50IGNhbiB3YXN0ZSBob3VycyBjaGFzaW5nIHBoYW50b21zLiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBlcnJvciBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgc2V0dGluZ3MsIGRlcGVuZGVuY2llcywgYW5kIGNvbm5lY3Rpb25zIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQgd2l0aGluIHRoZSBkZXZlbG9wbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHVwZnJvbnQgY2hlY2sgd2lsbCBzYXZlIG1lIGEgd29ybGQgb2YgcG90ZW50aWFsIGhlYWRhY2hlcyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNTUtICpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo1NjogKiAtIEZpcnN0LCBkZXZfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gL2Rldi9nYWRnZXQvJENISVAgaXMgY29uZmlndXJlZFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3LSAqICAgKGJ5IHdyaXRpbmcgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgaXRcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc5OD1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3OTk6ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODAwLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMi1cdC5yZWFkID1cdFx0ZXAwX3JlYWQsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMzpcdC53cml0ZSA9XHRkZXZfY29uZmlnLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzQtXHQuZmFzeW5jID1cdGVwMF9mYXN5bmMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogR2FkZ2V0IERldmljZSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gemVybyBpbiBvbiBgZ2FkZ2V0X2Rldl9vcGVuYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgaW1tZWRpYXRlbHkgY29uY2VybmVkIHdpdGggdGhlIGRldmljZSYjMzk7cyBvcGVuIG9wZXJhdGlvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCYjMzk7cyBhIHBlcmZlY3RseSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgKm9wZW4qIHJvdXRpbmUgaXMgb2Z0ZW4gdGhlIGdhdGV3YXkgZm9yIGFsbCBzb3J0cyBvZiBzdWJzZXF1ZW50IGludGVyYWN0aW9uLCBzbyBjaGVja2luZyBpdCBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgaG93IGEgZGV2aWNlIGhhbmRsZXMgYW4gb3BlbiBjYWxsIGhlbHBzIHRvIGRpYWdub3NlIHRoZSB3YXkgdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXJyb3JzIGFyZSBoYW5kbGVkLCBhbmQgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCBmb3IgdXNlLiBLbm93aW5nIHRoaXMgYWxzbyBzZXRzIHRoZSBzdGFnZSBmb3IgY2hlY2tpbmcgaG93IHRoZSBkZXZpY2UgaXMgaGFuZGxlZCBmb3Igc3Vic2VxdWVudCByZWFkIGFuZCB3cml0ZSBjYWxscy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gZXhwbG9yZSB3aGVuIHRyb3VibGVzaG9vdGluZywgZGVidWdnaW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBhIGdhZGdldCBkZXZpY2UmIzM5O3MgYmVoYXZpb3IuIFRoZSBgZ2FkZ2V0X2Rldl9vcGVuYCBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIHNldHVwIHBoYXNlLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiAqaG93KiB0aGF0IGhhcHBlbnMgYXJlIHZhc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0X2Rldl9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTExPXN0YXRpYyBpbnRcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTEyOmdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MTMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzAtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMTpcdC5vcGVuID1cdFx0Z2FkZ2V0X2Rldl9vcGVuLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzItXHQucmVhZCA9XHRcdGVwMF9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM2OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBlcF9pb2N0bGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IGBlcF9pb2N0bGAuIEdvdHRhIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgcGxhbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MT1lcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo0MDI6c3RhdGljIGxvbmcgZXBfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMy17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTcwMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9pb19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDYtXHQucmVsZWFzZSA9XHRlcF9yZWxlYXNlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNzpcdC51bmxvY2tlZF9pb2N0bCA9IGVwX2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwOC1cdC5yZWFkX2l0ZXIgPVx0ZXBfcmVhZF9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmV2aXNpdGluZyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGdhZGdldGZzX2V2aWN0X2lub2RlYC4gSSBuZWVkIHRvIHJldmlldyBpdHMgbG9naWMgYWdhaW4sIHBhcnRpY3VsYXJseSBpbiBsaWdodCBvZiBbaW5zZXJ0IHJlbGV2YW50IGNvbnRleHQgaGVyZSwgZS5nLiwgdGhlIHJlY2VudCBpc3N1ZSB3aXRoIHBlcnNpc3RlbnQgc3RvcmFnZSwgYSBuZXcgZmVhdHVyZSB3ZSYjMzk7cmUgaW1wbGVtZW50aW5nLCBvciBhIHBhcnRpY3VsYXIgcGVyZm9ybWFuY2UgYm90dGxlbmVja10uIEkgd2FudCB0byBlbnN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgaW5vZGUgZXZpY3Rpb24gY29ycmVjdGx5IHVuZGVyIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3MgcGF0dGVybnMgd2UmIzM5O3ZlIGRpc2N1c3NlZC4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlcXVlbmNpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBkb3VibGUtY2hlY2tpbmcgdGhlIGxvY2tzIGl0IHV0aWxpemVzLCBhbmQgY29uZmlybWluZyB0aGF0IHRoZSBjbGVhbnVwIG9mIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBpbnRyaWNhY2llcyBvZiBgZ2FkZ2V0ZnNg4oCZcyBpbm9kZSBtYW5hZ2VtZW50IOKAkyB0aGUgc2hhcmVkIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHF1aWNrbHkgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYW55IHJlbGF0ZWQgVkZTIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIHJlbWVtYmVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmFsIFZGUyBpbm9kZSBsaWZlY3ljbGUgYW5kIGZpbGUgc3lzdGVtIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5ODQ9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwNy1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDA4OnN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwOS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDE4LVx0LmRyb3BfaW5vZGUgPVx0aW5vZGVfanVzdF9kcm9wLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTk6XHQuZXZpY3RfaW5vZGUgPVx0Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyMC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBsYXkgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGhlcmU6IGBnYWRnZXRmc19ldmljdF9pbm9kZWAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYW5kIGBkZXZfY29uZmlnYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29uZmlndXJhdGlvbnMgc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zIGFzIGV4cGVjdGVkLgoKRmlyc3QsIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBVU0JfR0FER0VURlNgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAgYXJlIGFsbCBwcm9wZXJseSBzZXQuCgpSaWdodCwgYFVTQl9HQURHRVRGU2AsIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gU28gaXQmIzM5O3MgcHJvYmFibHkgb2xkZXIgY29kZS4gTm93LCBpcyBgVVNCX0dBREdFVGAgbWFuZGF0b3J5PyBPZiBjb3Vyc2UsIGl0IGlzIOKAkyBpdOKAmXMgdGhlIG1haW4gbWVudWNvbmZpZyBvcHRpb24gZm9yIHRoZSBlbnRpcmUgZ2FkZ2V0IHN1YnN5c3RlbS4gQW5kIGBVU0JfRFVNTVlfSENEYD8gWWVzLCBJIG5lZWQgdGhhdCBvbmUgZm9yIHRlc3RpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBFc3NlbnRpYWwgZm9yIG91ciBkZXZlbG9wbWVudCB3b3JrIQoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgRmlsZSBTeXN0ZW0gS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHJldmlzaXQgdGhlIGBLY29uZmlnYCBmb3IgYFVTQl9HQURHRVRGU2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgeW91IG1pZ2h0IGZvY3VzIG9uLCBlLmcuLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZ2FkZ2V0IGRyaXZlcnMsIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMsIGFueSByZWNlbnQgY2hhbmdlcywgb3IgcG90ZW50aWFsIHBvcnRhYmlsaXR5IGlzc3Vlc10uIEkgd2FudCB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJiMzOTtzIFVTQiBzdGFjayBvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIFVTQiBkcml2ZXJzIEkmIzM5O20gd29ya2luZyB3aXRoLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgY3VycmVudCBzdGF0ZSBjb21wbGV0ZWx5IGFuZCBlbnN1cmUgdGhpcyBvcHRpb24gaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGRlc2lnbiByZXF1aXJlbWVudHMgYW5kIGZ1dHVyZSBleHBhbnNpb24gcG9zc2liaWxpdGllcy4gVGhlcmUgbWlnaHQgYWxzbyBiZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZpbGUgc3lzdGVtIGFuZCB0aGUgcG93ZXItbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgYWxzbyByZXF1aXJlcyBhIHF1aWNrIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDg6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNjpcdGNvbmZpZyBVU0JfR0FER0VURlNcbiAyMDc6XHRcdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4gMjA4Olx0XHRoZWxwXG4gMjA5Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxuIDIxMDpcdFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcbiAyMTE6XHRcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJiMzOTt0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cbiAyMTI6XHRcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XG4gMjEzOlx0XHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cbiAyMTQ6XHRcbiAyMTU6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIxNjpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnYWRnZXRmc1wmIzM0Oy5cbiAyMTc6XHRcbiAyMTg6XHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcbiAyMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Z1bmN0aW9uIEZpbGVzeXN0ZW1cJiMzNDtcbiAyMjA6XHRcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXG4gMjIxOlx0XHRzZWxlY3QgVVNCX0ZfRlNcbiAyMjI6XHRcdHNlbGVjdCBVU0JfRlVOQ1RJT05GU19HRU5FUklDIGlmICEoVVNCX0ZVTkNUSU9ORlNfRVRIIHx8IFVTQl9GVU5DVElPTkZTX1JORElTKVxuIDIyMzpcdFx0aGVscFxuIDIyNDpcdFx0ICBUaGUgRnVuY3Rpb24gRmlsZXN5c3RlbSAoRnVuY3Rpb25GUykgbGV0cyBvbmUgY3JlYXRlIFVTQlxuIDIyNTpcdFx0ICBjb21wb3NpdGUgZnVuY3Rpb25zIGluIHVzZXIgc3BhY2UgaW4gdGhlIHNhbWUgd2F5IEdhZGdldEZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIERlcGVuZGVuY3kgd2l0aGluIFVTQiBHYWRnZXQgQ29kZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlLCBhbmQgSSBzZWUgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2UsIGF0IGxlYXN0IG5vdCBpbiBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkuIEJ1dCBJIG5vdGljZSBpdCYjMzk7cyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsICYjMzQ7SG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiYjMzQ7IFRoYXQgbmVzdGVkIGBpZmAgc3RhdGVtZW50IGlzIGVmZmVjdGl2ZWx5IGNyZWF0aW5nIGEgKmNvbmRpdGlvbmFsKiBkZXBlbmRlbmN5LiBJdCBtZWFucyB0aGlzIHBhcnRpY3VsYXIgY29kZSBzZWN0aW9uIG9ubHkgZ2V0cyBjb21waWxlZCBhbmQgaW5jbHVkZWQgaWYgdGhlIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIG5vdCBhIGRpcmVjdCwgZXhwbGljaXQgYGRlcGVuZHMgb25gIHN0YXRlbWVudCwgYnV0IGl0JiMzOTtzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgaXMgZGVwZW5kZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBjb25maWd1cmVkLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIFVTQl9HQURHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLY29uZmlnIFNvdXJjZSoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZSBhY3R1YWxseSBnZXRzIHB1bGxlZCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEl0JiMzOTtzIG5vdCBqdXN0IHNpdHRpbmcgdGhlcmUsIG9ycGhhbmVkOyBpdCAqaGFzKiB0byBiZSBzb3VyY2VkIGZyb20gc29tZXdoZXJlIGhpZ2hlciB1cCBpbiB0aGUgY29uZmlndXJhdGlvbiB0cmVlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGluY2x1c2lvbiBwYXRoIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsb2dpYyBmb3IgdGhlIGxlZ2FjeSBVU0IgZ2FkZ2V0IGRyaXZlci4gTGV0IG1lIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBLY29uZmlnIGZpbGVzIGFuZCBNYWtlZmlsZXMsIG1heWJlIHVzZSBzb21lIGdyZXAtZnUsIHRvIHNlZSBob3cgdGhpcyB0aGluZyBnZXRzIGxpbmtlZCBpbnRvIHRoZSBicm9hZGVyIFVTQiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgaXMgY3JpdGljYWwgZm9yIGNvcnJlY3RseSBlbmFibGluZywgZGlzYWJsaW5nLCBhbmQgY3VzdG9taXppbmcgdGhlIGdhZGdldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlIGh1bnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDk1PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo1MDk6c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFVTQiBHYWRnZXQgS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gc29tZSBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MDkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNvcmUgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZC4gSSYjMzk7bSBndWVzc2luZyB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaXMgaW4gdGhhdCBnZW5lcmFsIGFyZWEsIGFuZCBpdCYjMzk7bGwgc2VydmUgYXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBkZXRhaWxlZCwgd2hpY2ggY291bGQgYmUgaGVscGZ1bC4gSSYjMzk7bGwgcHJvYmFibHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gTGluZSA1MDkuLi4gcmlnaHQsIHRoYXQgc2hvdWxkIGdldCB0aGUgaW52ZXN0aWdhdGlvbiBtb3ZpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdFx0ICB0aGUgZGV2aWNlIGZpbGUgdG8gZ2V0IG9yIHNldCBwcmludGVyIHN0YXR1cy5cbiA0OTE6XHRcbiA0OTI6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfcHJpbnRlci5yc3RcbiA0OTM6XHRcdCAgd2hpY2ggaW5jbHVkZXMgc2FtcGxlIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlIGZpbGUuXG4gNDk0Olx0XG4gNDk1Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtVU0IgR2FkZ2V0IFRhcmdldCBGYWJyaWNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkVcbiA0OTg6XHRcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXG4gNDk5Olx0XHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxuIDUwMDpcdFx0c2VsZWN0IFVTQl9GX1RDTVxuIDUwMTpcdFx0aGVscFxuIDUwMjpcdFx0ICBUaGlzIGZhYnJpYyBpcyBhIFVTQiBnYWRnZXQgY29tcG9uZW50LiBUd28gVVNCIHByb3RvY29scyBhcmVcbiA1MDM6XHRcdCAgc3VwcG9ydGVkIHRoYXQgaXMgQkJCIG9yIEJPVCAoQnVsayBPbmx5IFRyYW5zcG9ydCkgYW5kIFVBU1xuIDUwNDpcdFx0ICAoVVNCIEF0dGFjaGVkIFNDU0kpLiBCT1QgaXMgYWR2ZXJ0aXNlZCBvbiBhbHRlcm5hdGl2ZVxuIDUwNTpcdFx0ICBpbnRlcmZhY2UgMCAocHJpbWFyeSkgYW5kIFVBUyBpcyBvbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgMS5cbiA1MDY6XHRcdCAgQm90aCBwcm90b2NvbHMgY2FuIHdvcmsgb24gVVNCMi4wIGFuZCBVU0IzLjAuXG4gNTA3Olx0XHQgIFVBUyB1dGlsaXplcyB0aGUgVVNCIDMuMCBmZWF0dXJlIGNhbGxlZCBzdHJlYW1zIHN1cHBvcnQuXG4gNTA4Olx0XG4gNTA5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wmIzM0O1xuIDUxMDpcdFxuIDUxMTpcdGVuZGlmICMgVVNCX0dBREdFVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwODozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY2NQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIGFuZCBLZXkgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IEkmIzM5O20gbG9va2luZyBhdCBpcyBjb250aW5nZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBkZWZpbmVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgYnV0IHRvIGVtdWxhdGUgdGhlIGdhZGdldCBjb250cm9sbGVyLCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEFuZCwgdG8gYmUgY29tcGxldGUsIGBVU0JfR0FER0VURlNgIG5lZWRzIHRvIGJlIGRlZmluZWQgdG9vLgoKU28sIHRvIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IEkgaGF2ZTogYFVTQl9HQURHRVRgLCBgVVNCX0dBREdFVEZTYCwgYW5kIGBVU0JfRFVNTVlfSENEYC4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRoYXQgc2VlbSBwcm9taXNpbmc6IGBnYWRnZXRmc19ldmljdF9pbm9kZWAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYGRldl9jb25maWdgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4KCkhtbSwgbm93LCBhYm91dCBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLi4uIGl0JiMzOTtzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgZ2FkZ2V0X2ZzX29wZXJhdGlvbnNgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIG15IGZvY3VzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBidWcgZml4IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBpdC4gSSB3YW50IHRvIGtlZXAgaXQuCgpJJiMzOTttIHNraXBwaW5nIGBkZXN0cm95X2VwX2ZpbGVzYCBiZWNhdXNlIGl0JiMzOTtzIHN0YXRpYyBhbmQgaXRzIGFkZHJlc3MgaXNuJiMzOTt0IHRha2VuLiBJdCYjMzk7cyBjYWxsZWQgYnkgYGdhZGdldGZzX3VuYmluZGAgYW5kIGBhY3RpdmF0ZV9lcF9maWxlc2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGxpa2VseSB0byBiZSBpbmxpbmVkLiBJIHdpbGwgc2tpcCBpdCBmb3Igbm93LgoKSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNraXAgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCBmb3IgdGhlIHNhbWUgcmVhc29uLiBJdCYjMzk7cyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzbiYjMzk7dCB0YWtlbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYWN0aXZhdGVfZXBfZmlsZXNgIGFuZCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAuIEFnYWluLCBwcm9iYWJseSBpbmxpbmVkLgoKTm93LCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIG5vdCBnZXR0aW5nIGlubGluZWQuIEkmIzM5O2xsIGNoZWNrIGVhY2ggc3ltYm9sOiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBBc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZXJlZm9yZSBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gR29vZCEgYGVwX3JlbGVhc2VgLiBBbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAtIGRlZmluaXRlbHkgbm90IGlubGluZWQuIGBkZXZfcmVsZWFzZWAuIFNhbWUgc3Rvcnk6IGZ1bmN0aW9uIHBvaW50ZXIgYXNzaWdubWVudC4gYGdhZGdldF9kZXZfb3BlbmAsIGBlcF9vcGVuYCwgYGRldl9jb25maWdgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gQWxsIG9mIHRoZW0uIFRoZXkgYXJlIGFsbCBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycywgd2hpY2ggbWVhbnMgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4KCk9rYXksIHRoYXQmIzM5O3MgaXQuIEkgaGF2ZSB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA4OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkZXZfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfZGV2X29wZW4mIzM0OywKICAgICYjMzQ7ZXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZXZfY29uZmlnJiMzNDssCiAgICAmIzM0O2VwX2lvY3RsJiMzNDssCiAgICAmIzM0O2VwX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDtlcF93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NDkuMzY0Mzk1ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg4MDU3MTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgICBcImVwX3JlbGVhc2VcIixcbiAgICBcImRldl9yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgICBcImVwX29wZW5cIixcbiAgICBcImRldl9jb25maWdcIixcbiAgICBcImVwX2lvY3RsXCIsXG4gICAgXCJlcF9yZWFkX2l0ZXJcIixcbiAgICBcImVwX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUgVVNCIGdhZGdldGZzIGRyaXZlciBieSBtb3ZpbmcgdGhlIGBwdXRfZXBgIGNhbGwgZnJvbSBgZGVzdHJveV9lcF9maWxlc2AgdG8gYSBuZXcgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBjYWxsYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIChnYWRnZXRmcyBjYW4gYmUgdGVzdGVkIHZpYSBkdW1teV9oY2QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NDkuMzY0NDAyNzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc3MDk1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MTE2NmQxZWNhYTQzM2ZhNjhhZjNhZGU2MTg0ZDAyYjczYmE3N2M4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmEwMzA2Mjk4NmJmMzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuQEAgLTE1NzksOCArMTU3OSw2IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxcbiBcXHRcXHQvKiBicmVhayBsaW5rIHRvIGRjYWNoZSAqL1xcbiBcXHRcXHRzaW1wbGVfcmVtb3ZlX2J5X25hbWUoZGV2LVxcdTAwM2VzYi1cXHUwMDNlc19yb290LCBlcC1cXHUwMDNlbmFtZSwgTlVMTCk7XFxuIFxcbi1cXHRcXHRwdXRfZXAgKGVwKTtcXG4tXFxuIFxcdFxcdHNwaW5fbG9ja19pcnEgKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycSAoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuQEAgLTE5OTYsNiArMTk5NCw3IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuIFxcbiBcXHRkZW50cnkgPSBzaW1wbGVfc3RhcnRfY3JlYXRpbmcoc2ItXFx1MDAzZXNfcm9vdCwgbmFtZSk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSkge1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9wcml2YXRlID0gTlVMTDtcXG4gXFx0XFx0aXB1dChpbm9kZSk7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRlbnRyeSk7XFxuIFxcdH1cXG5AQCAtMjAwNiw5ICsyMDA1LDE4IEBAIHN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4rXFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbitcXHRpZiAoaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9mb3AgPT0gXFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXFxuK1xcdFxcdHB1dF9lcChpbm9kZS1cXHUwMDNlaV9wcml2YXRlKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xcbiBcXHQuc3RhdGZzID1cXHRzaW1wbGVfc3RhdGZzLFxcbiBcXHQuZHJvcF9pbm9kZSA9XFx0aW5vZGVfanVzdF9kcm9wLFxcbitcXHQuZXZpY3RfaW5vZGUgPVxcdGdhZGdldGZzX2V2aWN0X2lub2RlLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo0OS44NjMwOTI5MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODgzMDcwMDUxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgICBcImVwX3JlbGVhc2VcIixcbiAgICBcImRldl9yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgICBcImVwX29wZW5cIixcbiAgICBcImRldl9jb25maWdcIixcbiAgICBcImVwX2lvY3RsXCIsXG4gICAgXCJlcF9yZWFkX2l0ZXJcIixcbiAgICBcImVwX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiB0aGUgVVNCIGdhZGdldGZzIGRyaXZlciBieSBtb3ZpbmcgdGhlIGBwdXRfZXBgIGNhbGwgZnJvbSBgZGVzdHJveV9lcF9maWxlc2AgdG8gYSBuZXcgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBjYWxsYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIChnYWRnZXRmcyBjYW4gYmUgdGVzdGVkIHZpYSBkdW1teV9oY2QgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDExNjZkMWVjYWE0MzNmYTY4YWYzYWRlNjE4NGQwMmI3M2JhNzdjOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA4OjMyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5hMDMwNjI5ODZiZjMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xNTc5LDggKzE1NzksNiBAQCBzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcbiBcdFx0LyogYnJlYWsgbGluayB0byBkY2FjaGUgKi9cbiBcdFx0c2ltcGxlX3JlbW92ZV9ieV9uYW1lKGRldi1cdTAwM2VzYi1cdTAwM2VzX3Jvb3QsIGVwLVx1MDAzZW5hbWUsIE5VTEwpO1xuIFxuLVx0XHRwdXRfZXAgKGVwKTtcbi1cbiBcdFx0c3Bpbl9sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxIChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG5AQCAtMTk5Niw2ICsxOTk0LDcgQEAgc3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcbiBcbiBcdGRlbnRyeSA9IHNpbXBsZV9zdGFydF9jcmVhdGluZyhzYi1cdTAwM2VzX3Jvb3QsIG5hbWUpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKSB7XG4rXHRcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkZW50cnkpO1xuIFx0fVxuQEAgLTIwMDYsOSArMjAwNSwxOCBAQCBzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbitcdGNsZWFyX2lub2RlKGlub2RlKTtcbitcdGlmIChpbm9kZS1cdTAwM2VpX3ByaXZhdGUgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfZm9wID09IFx1MDAyNmVwX2lvX29wZXJhdGlvbnMpXG4rXHRcdHB1dF9lcChpbm9kZS1cdTAwM2VpX3ByaXZhdGUpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7XG4gXHQuc3RhdGZzID1cdHNpbXBsZV9zdGF0ZnMsXG4gXHQuZHJvcF9pbm9kZSA9XHRpbm9kZV9qdXN0X2Ryb3AsXG4rXHQuZXZpY3RfaW5vZGUgPVx0Z2FkZ2V0ZnNfZXZpY3RfaW5vZGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo0OS44NjMwOTUwNTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM0NDA3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXRmcyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBzb21lIGxvdy1sZXZlbCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhcm91bmQgZW5kcG9pbnQgKGBlcGApIG9iamVjdCBoYW5kbGluZyB3aXRoaW4gdGhlIGdhZGdldGZzIGZyYW1ld29yay5cblxuRmlyc3QsIGl0IGxvb2tzIGxpa2UgYHB1dF9lcChlcClgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGVzdHJveV9lcF9maWxlcygpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IFRoYXQgZnVuY3Rpb24ncyBwcmltYXJ5IHB1cnBvc2UgaXMgdG8gY2xlYW4gdXAgcmVzb3VyY2VzLCBzbyByZW1vdmluZyBhIGBwdXRfZXAoKWAgY2FsbCB0aGVyZSBpbXBsaWVzIHRoZSByZXNwb25zaWJpbGl0eSBpcyBzaGlmdGluZyBlbHNld2hlcmUgb3IgaXQncyBwb3RlbnRpYWxseSByZWR1bmRhbnQuIEZvbGxvd2luZyB0aGF0IHRocmVhZCwgdGhlIHBhdGNoIGludHJvZHVjZXMgYGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7YCBpbiBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoKWAgdW5kZXIgYSBzcGVjaWZpYyBmYWlsdXJlIGNvbmRpdGlvbiBpbiBgc2ltcGxlX3N0YXJ0X2NyZWF0aW5nKClgLiBUaGlzIGlzIGltcG9ydGFudCDigJMgaXQncyBjcnVjaWFsIHRvIG51bGwgb3V0IHRoYXQgcG9pbnRlciB0byBwcmV2ZW50IGRhbmdsaW5nIHJlZmVyZW5jZXMgaWYgdGhlIGZpbGUgY3JlYXRpb24gZmFpbHMuXG5cblRoZSBtb3N0IHNpZ25pZmljYW50IGFkZGl0aW9uLCB0aG91Z2gsIGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZSgpYC4gVGhpcyBmdW5jdGlvbidzIHNvbGUgcHVycG9zZSBpcyB0byBjYWxsIGBwdXRfZXAoaW5vZGUtXHUwMDNlaV9wcml2YXRlKWAgaWYgYGlub2RlLVx1MDAzZWlfcHJpdmF0ZWAgaXMgbm90IG51bGwgYW5kIHRoZSBpbm9kZSdzIGZpbGUgb3BlcmF0aW9ucyBhcmUgcmVsYXRlZCB0byBhbiBlbmRwb2ludC4gVGhpcyBpcyB0aGUgaGVhcnQgb2YgdGhlIGZpeC4gSXQncyBlc3NlbnRpYWxseSBpbXBsZW1lbnRpbmcgZGVsYXllZCByZXNvdXJjZSByZWxlYXNlIGR1cmluZyBpbm9kZSBldmljdGlvbiwgd2hpY2ggaXMgcHJvYmFibHkgY3JpdGljYWwgdG8gZnJlZWluZyBlbmRwb2ludCByZXNvdXJjZXMgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgd2hlbiB0aGUgZmlsZSBpcyBubyBsb25nZXIgaW4gdXNlLiBGaW5hbGx5LCB0aGV5J3ZlIHJlZ2lzdGVyZWQgYGdhZGdldGZzX2V2aWN0X2lub2RlYCBhcyB0aGUgYC5ldmljdF9pbm9kZWAgb3BlcmF0aW9uIGluIGBnYWRnZXRfZnNfb3BlcmF0aW9uc2AuIFRoaXMgdGllcyBpdCBhbGwgdG9nZXRoZXIsIGVuc3VyaW5nIHRoYXQgb3VyIG5ldyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIHRoZSBpbm9kZSBpcyBiZWluZyBldmljdGVkIGZyb20gdGhlIGtlcm5lbCdzIGlub2RlIGNhY2hlLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBvciBhIG1lbW9yeSBsZWFrL3VzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgdGllZCB0byBob3cgYGVwYCBvYmplY3RzIGFyZSBtYW5hZ2VkIGluIGdhZGdldGZzLiBTaW5jZSBnYWRnZXRmcyBjYW4gYmUgYWNjZXNzZWQgaW4gdmlydHVhbGl6ZWQgc2NlbmFyaW9zLCBldmVuIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYSBgZHVtbXlfaGNkYCwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBnaXZlIG1vcmUgYXR0ZW50aW9uIHRvLiBJJ2Qgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyByZWxhdGVkIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIGp1c3QgdG8gYmUgc3VyZSB0aGlzIGlzIHNvbWV0aGluZyBlbmFibGVkIGluIG91ciBjb25maWd1cmF0aW9ucy4gQW5kLCB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emluZyBtYXRlcmlhbC4gV2UgbmVlZCB0byB0aHJvdyBzb21lIGNyYWZ0ZWQgcGF5bG9hZHMgYXQgdGhpcyB0byBtYWtlIHN1cmUgdGhlIGVuZHBvaW50IHJlc291cmNlcyBhcmUgbWFuYWdlZCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMjo1NS41OTc1MDU1MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMzAxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MjA2PWNvbmZpZyBVU0JfR0FER0VURlNcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMTUtXFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMTY6XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ2FkZ2V0ZnNcXFwiLlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMyOjU1LjkxMDgxMzg0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDUxNDAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEdhZGdldEZTIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBwb2ludGluZyB0b3dhcmRzIGBVU0JfR0FER0VURlNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGltZSB0byBkaWcgaW50byB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgZXhhY3RseSBob3cgYGlub2RlLmNgIGdldHMgY29tcGlsZWQgdW5kZXIgdGhpcyBjb25maWcuIE15IGd1dCB0ZWxscyBtZSBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZWAuIFRoYXQncyB1c3VhbGx5IHRoZSBnby10byBwbGFjZSBmb3IgZmlndXJpbmcgb3V0IHRoZXNlIGxlZ2FjeSBnYWRnZXQgZHJpdmVyIGRldGFpbHMgYW5kIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYW5kIGNvbXBpbGF0aW9uIHNwZWNpZmljcyByZWxhdGVkIHRvIGBpbm9kZS5jYCBoZXJlIGluIG9yZGVyIHRvIGVmZmVjdGl2ZWx5IHRyb3VibGVzaG9vdCBvciBleHRlbmQgYW55dGhpbmcgZ2FkZ2V0LXJlbGF0ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBNYWtlZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzI6NTkuMjU1OTU2NzQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc5NTM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcXHRcXHRcXHQ6PSBnbWlkaS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XFx0XFx0XFx0Oj0gaW5vZGUub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGUtMTYtZ19tYXNzX3N0b3JhZ2UteVxcdFxcdDo9IG1hc3Nfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMyOjU5LjM4Mjc1ODMxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTQ2NDU0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIEdhZGdldEZTIEFzc2Vzc21lbnQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBMaW51eCBrZXJuZWwgaXMgcHJldHR5IHNvbGlkLCBzbyBJJ20gcXVpY2tseSBwdWxsaW5nIHVwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gWWVzLCAqZ2FkZ2V0ZnMqIOKAkyB0aGUgVVNCIGdhZGdldCBmaWxlc3lzdGVtIOKAkyBpcyBmdW5kYW1lbnRhbGx5IGJ1aWx0IGFyb3VuZCBhbmQgdXRpbGl6ZXMgY29kZSBmcm9tIGBpbm9kZS5jYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBhIGZpbGVzeXN0ZW0sIGFmdGVyIGFsbCwgc28gdGhlIGNvcmUgaW5vZGUgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleS5cblxuTm93LCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBmb3IgKlVTQl9HQURHRVRGUyouIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyBpdCBoaW5nZXMgb24g4oCTIGFuZCB0aGluayBhYm91dCB3aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGluIGNhc2UgSSBuZWVkIHRvIG1vZGlmeSB0aGF0LiBNaWdodCBhbHNvIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaG9va3MgaW50byB0aGUgbGFyZ2VyIFVTQiBnYWRnZXQgZHJpdmVyIGZyYW1ld29yay4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgYmlnIHBpY3R1cmUgZm9yIGFueSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjAyLjc3NzQwNjY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4OTQ5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowMi45MzczMDczMTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxMTM3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgbGVnYWN5IFVTQiBnYWRnZXQgZHJpdmVycywgc28gdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMDYgb2YgdGhlIGZpbGUuIFRoYXQgYXJlYSBwcm9iYWJseSBkZWZpbmVzIGEga2V5IHNlY3Rpb24gb3Igb3B0aW9uIHRoYXQncyByZWxldmFudCB0byB3aGF0IEkgbmVlZCB0byBhY2NvbXBsaXNoLiBJ4oCZbSB0aGlua2luZyB0aGVyZSB3aWxsIGxpa2VseSBiZSBkZXZpY2UgZHJpdmVycyBjb25maWd1cmVkLCBtYXliZSBmZWF0dXJlcyBvciBldmVuIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHVuZWFydGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowNi41MDg0NDkwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjA2LjUwODY3MDgwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYxNjgzNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiwgYW5kIGltbWVkaWF0ZWx5LCBteSB0aG91Z2h0IHByb2Nlc3MganVtcHMgdG8gaXRzIHBhcmVudCDigJMgYFVTQl9HQURHRVRgLiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCwgdGhlIGtleXN0b25lIG9mIHRoZSB3aG9sZSBzeXN0ZW0uIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlIGEgcmFmdCBvZiBvdGhlciBmZWF0dXJlcyB0aGF0IGhpbmdlIG9uIGBVU0JfR0FER0VUYCBiZWluZyBlbmFibGVkLCBhbmQgdGhvc2UgYXJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yIHJpZ2h0IG5vdy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgYWxsIG5lY2Vzc2FyeSBwcmVyZXF1aXNpdGVzIGFyZSBtZXQgYW5kIGFzc2VzcyB3aGF0IG9wdGlvbnMgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIChvciB1bmF2YWlsYWJsZSkgYXMgYSByZXN1bHQgb2YgbWFraW5nIGNoYW5nZXMgdG8gYFVTQl9HQURHRVRgLiBJJ2xsIHN0YXJ0IGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgbm93IHRvIGF2b2lkIGFueSBuYXN0eSBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MDkuMzcwMzU3MzM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM2NDEzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTc6bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlVTQiBHYWRnZXQgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ3PWlmIFVTQl9HQURHRVRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00OC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NjM6Y29uZmlnIFVTQl9HQURHRVRfVkVSQk9TRVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTY0LVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIE1lc3NhZ2VzIChERVZFTE9QTUVOVClcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy03Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo3Nzpjb25maWcgVVNCX0dBREdFVF9ERUJVR19GSUxFU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmaWxlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy04OS1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6OTk6Y29uZmlnIFVTQl9HQURHRVRfVkJVU19EUkFXXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTAwLVxcdGludCBcXFwiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSlcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTE2OmNvbmZpZyBVU0JfR0FER0VUX1NUT1JBR0VfTlVNX0JVRkZFUlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXFx0aW50IFxcXCJOdW1iZXIgb2Ygc3RvcmFnZSBwaXBlbGluZSBidWZmZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzowOS40NzQwMDQzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTczNDE4NTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAxNy4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzbyB0aGlzIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlIFVTQiBnYWRnZXQgc3Vic3lzdGVtIGlzIGVuYWJsZWQgYW5kIHN0cnVjdHVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgVVNCIGFyY2hpdGVjdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgZGVjaXNpb25zIGdldCBtYWRlIGFib3V0IHdoYXQgZmVhdHVyZXMgd2Ugd2FudCB0byBleHBvc2UgdG8gdXNlcnNwYWNlIGFzIGEgVVNCIGRldmljZS4gRnJvbSBoZXJlLCBJIGNhbiB0cmFjZSBvdXQgdG8gcmVsZXZhbnQgY29kZSBhbmQgb3RoZXIga2NvbmZpZyBvcHRpb25zIGFzIG5lZWRlZCwgYmFzZWQgb24gdGhpcyBpbml0aWFsIGhpZ2gtbGV2ZWwgbWFwIG9mIHRoZSBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoxMi40NDc0MjgxNzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcXG4gICA0OlxcdCMgICAgKGEpIGEgcGVyaXBoZXJhbCBjb250cm9sbGVyLCBhbmRcXG4gICA1OlxcdCMgICAgKGIpIHRoZSBnYWRnZXQgZHJpdmVyIHVzaW5nIGl0LlxcbiAgIDY6XFx0I1xcbiAgIDc6XFx0IyBOT1RFOiAgR2FkZ2V0IHN1cHBvcnQgKiogRE9FUyBOT1QgKiogZGVwZW5kIG9uIGhvc3Qtc2lkZSBDT05GSUdfVVNCICEhXFxuICAgODpcXHQjXFxuICAgOTpcXHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcXFwiQVxcXCIgamFja3MpLlxcbiAgMTA6XFx0IyAgLSBQZXJpcGhlcmFscyAobGlrZSBQREFzKSBuZWVkIENPTkZJR19VU0JfR0FER0VUICh3aXRoIFxcXCJCXFxcIiBqYWNrcykuXFxuICAxMTpcXHQjICAtIFNvbWUgc3lzdGVtcyBoYXZlIGJvdGgga2luZHMgb2YgY29udHJvbGxlcnMuXFxuICAxMjpcXHQjXFxuICAxMzpcXHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcXFwiTWluaS1BQlxcXCIgamFjaywgc3lzdGVtcyB3aXRoXFxuICAxNDpcXHQjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0IFxcXCJVU0IgT24tdGhlLUdvXFxcIiAoQ09ORklHX1VTQl9PVEcpLlxcbiAgMTU6XFx0I1xcbiAgMTY6XFx0XFxuICAxNzpcXHRtZW51Y29uZmlnIFVTQl9HQURHRVRcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgMjA6XFx0XFx0c2VsZWN0IE5MU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICAgVVNCIGlzIGEgaG9zdC9kZXZpY2UgcHJvdG9jb2wsIG9yZ2FuaXplZCB3aXRoIG9uZSBob3N0IChzdWNoIGFzIGFcXG4gIDIzOlxcdFxcdCAgIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLlxcbiAgMjQ6XFx0XFx0ICAgVGhlIFVTQiBoYXJkd2FyZSBpcyBhc3ltbWV0cmljLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gc2V0IHVwOlxcbiAgMjU6XFx0XFx0ICAgeW91IGNhbid0IGNvbm5lY3QgYSBcXFwidG8tdGhlLWhvc3RcXFwiIGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgIExpbnV4IGNhbiBydW4gaW4gdGhlIGhvc3QsIG9yIGluIHRoZSBwZXJpcGhlcmFsLiAgSW4gYm90aCBjYXNlc1xcbiAgMjg6XFx0XFx0ICAgeW91IG5lZWQgYSBsb3cgbGV2ZWwgYnVzIGNvbnRyb2xsZXIgZHJpdmVyLCBhbmQgc29tZSBzb2Z0d2FyZVxcbiAgMjk6XFx0XFx0ICAgdGFsa2luZyB0byBpdC4gIFBlcmlwaGVyYWwgY29udHJvbGxlcnMgYXJlIG9mdGVuIGRpc2NyZXRlIHNpbGljb24sXFxuICAzMDpcXHRcXHQgICBvciBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBDUFUgaW4gYSBtaWNyb2NvbnRyb2xsZXIuICBUaGUgbW9yZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoxMi40NDc1MzQwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU3MzE4MTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIG9wdGlvbnMsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgVVNCIGdhZGdldCBzZXR1cDpcblxuKipNeSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gd2hhdCBJJ20gbG9va2luZyBhdCwgdGhlIGtleSBjb25maWdzIGZvciB0aGlzIGdhZGdldCBtb2RlIGltcGxlbWVudGF0aW9uIGFyZSBjbGVhcmx5IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AuIFRob3NlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBubyBxdWVzdGlvbi4gTm93LCB0byBtYWtlIHRoaXMgd29yaywgd2UncmUgZ29pbmcgdG8gbmVlZCBhIGhvc3QgY29udHJvbGxlciBkcml2ZXIgKEhDRCkgdGhhdCwgZm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgKmJlaGF2ZXMqIGxpa2UgYSBVU0IgZ2FkZ2V0LCBidXQgZG9lc24ndCBhY3R1YWxseSBuZWVkIHRvIGJlIGEgcmVhbCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBuZWVkIHRvIHNpbXVsYXRlIGl0LiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIGVuYWJsZWQgb3IgaW5jbHVkZWQgc29tZWhvdy4gVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoaXMgcnVuIHNtb290aGx5IGluIHRoZSBhYnNlbmNlIG9mIGEgcmVhbCBkZXZpY2UsIHJpZ2h0PyBHb29kLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjE4LjAyMDcyMTc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExNjUxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9EVU1NWV9IQ0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZz00MjI9c291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NkbnMyL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWctNDI5LVxcdHRyaXN0YXRlIFxcXCJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MTguMTIxODkzMTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODI1NTc5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgVVNCX0RVTU1ZX0hDRGAgUGF0Y2ggZm9yIEdhZGdldGZzIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIGFib3V0IGludGVncmF0aW5nIGBVU0JfRFVNTVlfSENEYCBmb3IgdGVzdGluZyBnYWRnZXRmcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGF0J3MgYSBzb2xpZCBhcHByb2FjaC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIG9uIHRoZSBjb3JlIGNoYW5nZXMuIExvb2tzIGxpa2Ugd2UncmUgZm9jdXNpbmcgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGRlc3Ryb3lfZXBfZmlsZXNgLCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLCBhbmQgYSBuZXcgYWRkaXRpb24sIGBnYWRnZXRmc19ldmljdF9pbm9kZWAuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIHRoZXkncmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBIbSwgdGhhdCBjb3VsZCBsaW1pdCB0aGUgc2NvcGUgb2YgdGhlaXIgaW1wYWN0LCBkZXBlbmRpbmcgb24gaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZXNlIHN0YXRpYyBvbmVzLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGV4dGVudCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgZGVzdHJveV9lcF9maWxlc2AgZmlyc3QuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQncyBiZWluZyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjIuNjA0NDUzOTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk0NTQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVzdHJveV9lcF9maWxlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEzMzM9Z2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU1My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU1NDpzdGF0aWMgdm9pZCBkZXN0cm95X2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU1NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU5MT1zdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMyLVxcdERCRyAoZGV2LCBcXFwiJXMgZW5vbWVtXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE2MzM6XFx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYzNC1cXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjUyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjUzOlxcdGRlc3Ryb3lfZXBfZmlsZXMgKGRldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NTQtXFx0Z2FkZ2V0LVxcdTAwM2VlcDAtXFx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjIuOTkzOTE3MjMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzg3ODgzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgaGFzIGEgZmV3IGtleSBmdW5jdGlvbnMgaW50ZXJhY3Rpbmcgd2l0aCBpdHMgZmlsZSBzeXN0ZW0gbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBnYWRnZXRmc191bmJpbmRgIGlzIGNhbGxpbmcgYGRlc3Ryb3lfZXBfZmlsZXNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgZmlsZXMgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gaXMgdW5tb3VudGVkLiBNYWtlcyBzZW5zZS4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgICphbHNvKiBjYWxscyBgZGVzdHJveV9lcF9maWxlc2AuIFRoYXQncyBhIGJpdCBvZiBhIHBhdHRlcm4sIGFuZCBhIHBvdGVudGlhbCBhcmVhIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gSXQgbWVhbnMgdGhpcyBgZGVzdHJveV9lcF9maWxlc2AgaXMgcHJvYmFibHkgZG9pbmcgc29tZSB2ZXJ5IGNvcmUgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGlzIGNhbGxlZCBpbiBhdCBsZWFzdCB0d28gY29udGV4dHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyB0cmlnZ2VyaW5nIGBhY3RpdmF0ZV9lcF9maWxlc2AgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBvdmVybGFwIG9yIHBvdGVudGlhbCBmb3IgZG91YmxlLWZyZWVzIG9yIG90aGVyIGlzc3VlcyB3aXRoaW4gdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgb2YgZW5kcG9pbnQgZmlsZXMuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmaWxlcyBhcmUgKmNyZWF0ZWQqIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgY29udGV4dCBmb3IgdW5kZXJzdGFuZGluZyB3aGF0IGBkZXN0cm95X2VwX2ZpbGVzYCBpcyBhY3R1YWxseSBkb2luZy4gVW5kZXJzdGFuZGluZyBob3cgdGhlIGZpbGVzIGFyZSBjcmVhdGVkIHByb3ZpZGVzIHRoZSBlc3NlbnRpYWwgY29udGV4dCBmb3Igd2hhdCBuZWVkcyB0byBiZSBkZXN0cm95ZWQuIEl0IG1pZ2h0IGludm9sdmUgYWxsb2NhdGlvbiwgd2hpY2ggaGFzIHRvIGJlIGRlYWxsb2NhdGVkLiBJdCBjb3VsZCBhbHNvIGludm9sdmVkIG1ldGFkYXRhLCB3aGljaCB3b3VsZCBiZSBpbXBvcnRhbnQgdG8gY2xlYXIgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzoyNy4zNzI3MDkyNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU0NDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19jcmVhdGVfZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1NTQ9c3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU4Ny1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU4ODpzdGF0aWMgaW50IGdhZGdldGZzX2NyZWF0ZV9maWxlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyIGNvbnN0ICpuYW1lLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNTg5LVxcdFxcdHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxODpcXHRcXHRlcnIgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoZGV2LVxcdTAwM2VzYiwgZGF0YS1cXHUwMDNlbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxOS1cXHRcXHRcXHRcXHRkYXRhLCBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTk2Mz1nYWRnZXRmc19tYWtlX2lub2RlIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5ODMtICovXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5ODQ6c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTk4NS1cXHRcXHR2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjYtXFx0ZGV2LVxcdTAwM2VzYiA9IHNiO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDY3OlxcdHJjID0gZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUoc2IsIENISVAsIGRldiwgXFx1MDAyNmVwMF9vcGVyYXRpb25zKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2OC1cXHRpZiAocmMpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6MjcuNTkwMjU5MTg1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzI3Mzk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgIENhbGxzKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgZ2FkZ2V0ZnNfZmlsbF9zdXBlcmAgaXMgY2FsbGluZyBgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGVgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHdoZXJlIHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZSBpcyBsaWtlbHkgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoZW4sIEkgYWxzbyBzZWUgdGhhdCBgYWN0aXZhdGVfZXBfZmlsZXNgIGlzICphbHNvKiBjYWxsaW5nIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHBvdGVudGlhbGx5IGEgcG9pbnQgb2YgZm9jdXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFjdGl2YXRlX2VwX2ZpbGVzYCBpcyBkb2luZyBhbmQgd2h5IGl0IG5lZWRzIHRvIGNyZWF0ZSBmaWxlcywgYXMgSSBzdXNwZWN0IHRoZXNlIGZpbGVzIGFyZSByZWxhdGVkIHRvIGVuZHBvaW50cy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBhY3RpdmF0ZV9lcF9maWxlc2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBhbHNvIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjMxLjgyMzAwMTg1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE5MDQwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWN0aXZhdGVfZXBfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNTg4PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5MC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTU5MTpzdGF0aWMgaW50IGFjdGl2YXRlX2VwX2ZpbGVzIChzdHJ1Y3QgZGV2X2RhdGEgKmRldilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTU5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTY2Nj1zdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjg5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjkwOlxcdGlmIChhY3RpdmF0ZV9lcF9maWxlcyAoZGV2KSBcXHUwMDNjIDApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2OTEtXFx0XFx0Z290byBlbm9tZW07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjMxLjkwNDkxMjAyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2NTkyNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgQmluZGluZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGdhZGdldGZzYCBtb2R1bGUgYW5kIHRyYWNpbmcgdGhlIGtleSBmdW5jdGlvbiBjYWxscy4gSXQgc2VlbXMgYGdhZGdldGZzX2JpbmRgIGlzIHRoZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgZnVuY3Rpb24gdGhlbiBjYWxscyBgYWN0aXZhdGVfZXBfZmlsZXNgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIGZvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcy4gTm93LCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBwdWJsaWMgaW50ZXJmYWNlLCBJJ2xsIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRob3NlIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGdhZGdldGZzX2JpbmRgLCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgYW5kIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gSXQncyBhIHF1aWNrIGV4ZXJjaXNlIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyBvciBhcmUgaW5kZWVkIG1lYW50IHRvIGJlIGV4cG9zZWQuIEtub3dpbmcgdGhlaXIgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsIGFuZCB3aGV0aGVyIGFueSBvdXRzaWRlIGNvbXBvbmVudHMgY2FuIGhvb2sgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzozNS45NzE1MDgzNDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjUyMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjY0PXN0YXRpYyBzdHJ1Y3QgZGV2X2RhdGFcXHRcXHQqdGhlX2RldmljZTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2NS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY2NjpzdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY2Ny1cXHRcXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ0PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzQ1LVxcdC5mdW5jdGlvblxcdD0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NDY6XFx0LmJpbmRcXHRcXHQ9IGdhZGdldGZzX2JpbmQsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDctXFx0LnVuYmluZFxcdFxcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE3OTk9ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODczLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODc0OlxcdC8qIHRyaWdnZXJzIGdhZGdldGZzX2JpbmQoKTsgdGhlbiB3ZSBjYW4gZW51bWVyYXRlLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODc1LVxcdHNwaW5fdW5sb2NrX2lycSAoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjM2LjA0Nzc2NjMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzExNTQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBHYWRnZXRGUyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzYCBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGdhZGdldGZzX2JpbmRgIGZ1bmN0aW9uLiBXYWl0IGEgbWludXRlLi4uIHRoYXQncyBkZWNsYXJlZCBgc3RhdGljYC4gUmlnaHQsIHRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSB0cmFjZSB0aGlzLiBJdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiBOb3csIGdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogYGdhZGdldGZzX2JpbmRgIGlzIGNhbGxlZC4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpZyBpbnRvIGBnYWRnZXRmc19maWxsX3N1cGVyYC4gVGhhdCdzIHdoZXJlIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gc2V0dXAgdHlwaWNhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbiBhcyBpdCBzaG91bGQgaG9sZCB0aGUga2V5IHRoYXQgbGVhZHMgdG8gdGhlIGNhbGxzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggdGhlIGBiaW5kYCBzdGF0aWMgZnVuY3Rpb24gSSBqdXN0IGlkZW50aWZpZWQuIExldCdzIHNlZSBob3cgdGhhdCBjb25uZWN0aW9uIGlzIG1hZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjM5LjgxODkyMzQyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4MDg3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjI9c3RhdGljIGludFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDIzOmdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyNC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjA5MT1zdGF0aWMgaW50IGdhZGdldGZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA5Mi17XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwOTM6XFx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgZ2FkZ2V0ZnNfZmlsbF9zdXBlcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzozOS45MTM3Mzc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODkwMzk1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBHYWRnZXRGUyBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIEdhZGdldEZTIGNvZGUsIHNwZWNpZmljYWxseSBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIEkgc2VlIHRoYXQgYGdhZGdldGZzX2ZpbGxfc3VwZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LiBTYW1lIHdpdGggYGdhZGdldGZzX2dldF90cmVlYC4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGEgcmV2aWV3IG9mIGBnYWRnZXRmc19pbml0YCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBnZXR0aW5nIHRoaXMgZmlsZXN5c3RlbSB1cCBhbmQgcnVubmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjQzLjMwMjc4MDEwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjA4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGdhZGdldGZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwOTktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMDA6c3RhdGljIGludCBnYWRnZXRmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMTIyPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMjQtXFx0Lm5hbWVcXHRcXHQ9IHNob3J0bmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjEyNTpcXHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI2LVxcdC5raWxsX3NiXFx0PSBnYWRnZXRmc19raWxsX3NiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMjg9TU9EVUxFX0FMSUFTX0ZTKFxcXCJnYWRnZXRmc1xcXCIpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMzEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMzI6c3RhdGljIGludCBfX2luaXQgZ2FkZ2V0ZnNfaW5pdCAodm9pZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEzMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjE0MS19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxNDI6bW9kdWxlX2luaXQgKGdhZGdldGZzX2luaXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTQzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozMzo0My40Nzg5OTcwMDlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODk1NDY2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgR2FkZ2V0RlMgRmlsZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gZmlsZSBvcGVyYXRpb25zIGZvciBnYWRnZXRmcy4gUmlnaHQsIHRoZSBrZXkgYXJlYXMgdG8gbG9vayBhdCBhcmUgZGVmaW5pdGVseSBgZXBfaW9fb3BlcmF0aW9uc2AgYW5kIGBlcDBfb3BlcmF0aW9uc2AuIFRoZXNlIGFyZSB0aGUgbmF0dXJhbCBlbnRyeSBwb2ludHMgd2hlcmUgdGhlIGZpbGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBoYXJkd2FyZSwgYW5kIHRoZSBidWxrIG9mIHRoZSBwcm9jZXNzaW5nIHdpbGwgaGFwcGVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBtb3ZlZCwgaG93IHJlcXVlc3RzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHRoZSBkZXZpY2UgZW11bGF0aW9uIGlzIHN0cnVjdHVyZWQgd2l0aGluIHRoZXNlIHNwZWNpZmljIG9wZXJhdGlvbnMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBhIHNvbGlkIGdyYXNwIG9mIGdhZGdldGZzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTQuMDY4NTQ2NTkxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMzM2ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfaW9fb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTYzOT1lcF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMS0vKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NzAyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwMy1cXHQub3duZXIgPVxcdFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE1OTE9c3RhdGljIGludCBhY3RpdmF0ZV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYxOC1cXHRcXHRlcnIgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoZGV2LVxcdTAwM2VzYiwgZGF0YS1cXHUwMDNlbmFtZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYxOTpcXHRcXHRcXHRcXHRkYXRhLCBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjAtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDA4PXN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAxMS1cXHRjbGVhcl9pbm9kZShpbm9kZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTI6XFx0aWYgKGlub2RlLVxcdTAwM2VpX3ByaXZhdGUgXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfZm9wID09IFxcdTAwMjZlcF9pb19vcGVyYXRpb25zKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDEzLVxcdFxcdHB1dF9lcChpbm9kZS1cXHUwMDNlaV9wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTQuMjEzNzg1ODUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjcxMTgzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgZXAwX29wZXJhdGlvbnNgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgZXAwX29wZXJhdGlvbnNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoYXQgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBjb2RlIGJhc2UuIEknbSBhc3N1bWluZyBpdCBoYW5kbGVzIHRoZSBlc3NlbnRpYWwgb3BlcmF0aW9ucyBmb3IgZXBpc29kZSB6ZXJvLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHJvbGUgYW5kIHN0cnVjdHVyZSBiZWZvcmUgZ2V0dGluZyBkZWVwIGludG8gc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCdzIGEga2V5IHBpZWNlLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gdXAgdG8gc3BlZWQgYmVmb3JlIEkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBiZWdpbiBkZWJ1Z2dpbmcgYW55dGhpbmcgaW4gdGhlIGNvZGUuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzM6NTcuNTgwOTA2NzYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk5MjU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcDBfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5MTI9Z2FkZ2V0X2Rldl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkyOC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkyOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDIzPWdhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDY2LVxcdGRldi1cXHUwMDNlc2IgPSBzYjtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjA2NzpcXHRyYyA9IGdhZGdldGZzX2NyZWF0ZV9maWxlKHNiLCBDSElQLCBkZXYsIFxcdTAwMjZlcDBfb3BlcmF0aW9ucyk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjgtXFx0aWYgKHJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjMzOjU3LjY2OTkwNTUzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY0MDY5NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBlcF9pb19vcGVyYXRpb25zYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGVwX2lvX29wZXJhdGlvbnNgIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgdGhleSdyZSBkb2luZywgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBJL08sIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIG9wdGltaXphdGlvbiBvciBpbXByb3ZlbWVudC4gQXJlIHdlIGhhbmRsaW5nIGVycm9ycyBncmFjZWZ1bGx5PyBXaGF0J3MgdGhlIHRocmVhZGluZyBtb2RlbCBoZXJlLCBhbmQgaG93IGlzIGl0IGltcGFjdGluZyBwZXJmb3JtYW5jZT8gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIGltcGxlbWVudGF0aW9uIC0gbGV0J3MgZmluZCB0aGF0LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4gS25vd2luZyB0aGUgY3VycmVudCBzdHJhdGVneSB3aWxsIGhlbHAgbWUgZGVjaWRlIG9uIGNoYW5nZXMgb3IgcmVmYWN0b3JpbmcgaWYgdGhlcmUgYXJlIHBlcmZvcm1hbmNlIGdhaW5zIHRvIGJlIGhhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowMS4wMzM5Nzc5MDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFxuIDcwMTpcXHQvKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi9cXG4gNzAyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuIDcwMzpcXHRcXHQub3duZXIgPVxcdFRISVNfTU9EVUxFLFxcbiA3MDQ6XFx0XFxuIDcwNTpcXHRcXHQub3BlbiA9XFx0XFx0ZXBfb3BlbixcXG4gNzA2OlxcdFxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbiA3MDc6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXFxuIDcwODpcXHRcXHQucmVhZF9pdGVyID1cXHRlcF9yZWFkX2l0ZXIsXFxuIDcwOTpcXHRcXHQud3JpdGVfaXRlciA9XFx0ZXBfd3JpdGVfaXRlcixcXG4gNzEwOlxcdH07XFxuIDcxMTpcXHRcXG4gNzEyOlxcdC8qIEVORFBPSU5UIElOSVRJQUxJWkFUSU9OXFxuIDcxMzpcXHQgKlxcbiA3MTQ6XFx0ICogICAgIGZkID0gb3BlbiAoXFxcIi9kZXYvZ2FkZ2V0LyRFTkRQT0lOVFxcXCIsIE9fUkRXUilcXG4gNzE1OlxcdCAqICAgICBzdGF0dXMgPSB3cml0ZSAoZmQsIGRlc2NyaXB0b3JzLCBzaXplb2YgZGVzY3JpcHRvcnMpXFxuIDcxNjpcXHQgKlxcbiA3MTc6XFx0ICogVGhhdCB3cml0ZSBlc3RhYmxpc2hlcyB0aGUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgY29uZmlndXJpbmdcXG4gNzE4OlxcdCAqIHRoZSBjb250cm9sbGVyIHRvIHByb2Nlc3MgYnVsaywgaW50ZXJydXB0LCBvciBpc29jaHJvbm91cyB0cmFuc2ZlcnNcXG4gNzE5OlxcdCAqIGF0IHRoZSByaWdodCBtYXhwYWNrZXQgc2l6ZSwgYW5kIHNvIG9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowMS4wMzQxNTAzNTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDM1MTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgZXBvbGwgRmlsZSBPcGVyYXRpb25zKipcblxuUmlnaHQsIEknbSBsb29raW5nIGF0IHRoZSBjb3JlIGZpbGUgb3BlcmF0aW9uIGVudHJ5IHBvaW50cyBmb3IgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGZ1bmN0aW9ucywgdGhlIG9uZXMgdGhhdCBkZWZpbmUgdGhlIGVwb2xsJ3MgYmVoYXZpb3IgYXJlIGBlcF9vcGVuYCwgYGVwX3JlbGVhc2VgLCBgZXBfaW9jdGxgLCBgZXBfcmVhZF9pdGVyYCwgYW5kIGBlcF93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcmVhbGx5IG1hdHRlci4gTm93LCBob2xkIG9uLCBJIGp1c3Qgbm90aWNlZCBzb21ldGhpbmcuIGBlcF9vcGVuYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzICpzdGlsbCogdXNlZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBwcm9ibGVtLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQmVzdCB0byBjaGVjayB0aGUgYGVwMF9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXTigJlzIHRoZSByZWFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGltcGxlbWVudGVkIGZpbGUgb3BlcmF0aW9ucywgYW5kIEkgZXhwZWN0IGBlcF9vcGVuYCB3aWxsIGJlIGFtb25nIHRoZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGV0YWlscyBhcmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MDQuOTM4NTA0NTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkyNTpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTkyNjpcXHRcXHRyZXR1cm4gdmFsdWU7XFxuMTkyNzpcXHR9XFxuMTkyODpcXHRcXG4xOTI5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xcbjE5MzA6XFx0XFxuMTkzMTpcXHRcXHQub3BlbiA9XFx0XFx0Z2FkZ2V0X2Rldl9vcGVuLFxcbjE5MzI6XFx0XFx0LnJlYWQgPVxcdFxcdGVwMF9yZWFkLFxcbjE5MzM6XFx0XFx0LndyaXRlID1cXHRkZXZfY29uZmlnLFxcbjE5MzQ6XFx0XFx0LmZhc3luYyA9XFx0ZXAwX2Zhc3luYyxcXG4xOTM1OlxcdFxcdC5wb2xsID1cXHRcXHRlcDBfcG9sbCxcXG4xOTM2OlxcdFxcdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXFxuMTkzNzpcXHRcXHQucmVsZWFzZSA9XFx0ZGV2X3JlbGVhc2UsXFxuMTkzODpcXHR9O1xcbjE5Mzk6XFx0XFxuMTk0MDpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjE5NDE6XFx0XFxuMTk0MjpcXHQvKiBGSUxFU1lTVEVNIEFORCBTVVBFUkJMT0NLIE9QRVJBVElPTlNcXG4xOTQzOlxcdCAqXFxuMTk0NDpcXHQgKiBNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBjcmVhdGVzIGEgY29udHJvbGxlciBmaWxlLCB1c2VkIGZpcnN0IGZvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDowNC45Mzg3NzU1MDhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1OTA0MDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgRnVuY3Rpb25zIGluIHRoZSBVU0IgR2FkZ2V0IERyaXZlciBDb250ZXh0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zOiBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwMF9yZWFkYCwgYGRldl9jb25maWdgLCBgZXAwX2Zhc3luY2AsIGBlcDBfcG9sbGAsIGBnYWRnZXRfZGV2X2lvY3RsYCwgYW5kIGBkZXZfcmVsZWFzZWAuIFRoZXNlIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciwgdGhlIG9uZXMgdGhhdCBoYW5kbGUgdGhlIGRldmljZSBzZXR1cCwgZW5kcG9pbnQgY29tbXVuaWNhdGlvbiwgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBhc3luY2hyb25vdXMgSS9PLCBwb2xsaW5nLCBJT0NUTCBoYW5kbGluZywgYW5kIGRldmljZSByZWxlYXNlIHJlc3BlY3RpdmVseS4gVGhlIHN0YW5kYXJkIG9wZXJhdGlvbnMsIHRoZSBidWlsZGluZyBibG9ja3MuXG5cblRoZW4gdGhlcmUncyB0aGlzIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBhZGRlZCBieSB0aGlzIHBhdGNoIHdlJ3JlIHJldmlld2luZy4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aHkgdGhpcyBpcyBoZXJlLCBzbyB0aGF0J3MgdGhlIG9uZSB0aGF0IHJlcXVpcmVzIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGRldmljZSBub2RlIG1hbmFnZW1lbnQuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MTEuNDk3ODE4NTkzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM5ODM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTg0PXN0YXRpYyBpbnQgZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAwNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAwODpzdGF0aWMgdm9pZCBnYWRnZXRmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDA5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnYWRnZXRfZnNfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDE4LVxcdC5kcm9wX2lub2RlID1cXHRpbm9kZV9qdXN0X2Ryb3AsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwMTk6XFx0LmV2aWN0X2lub2RlID1cXHRnYWRnZXRmc19ldmljdF9pbm9kZSxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjAyMC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDoxMS44NDE4MDg5NjFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTMyNjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBGaXggaW4gR2FkZ2V0RlMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGFsbCBhYm91dCBmaXhpbmcgc29tZXRoaW5nIGluIGBnYWRnZXRmc19ldmljdF9pbm9kZWAgYW5kIGBkZXN0cm95X2VwX2ZpbGVzYC4gVGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGZyZWVpbmcgYGVwYCBvYmplY3RzLCB3aGljaCBpcyBhIGNvbW1vbiBhcmVhIGZvciBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzLiBTaW5jZSBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBgZ2FkZ2V0ZnNgIHN1YnN5c3RlbSwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IHRoaXMgYWRkcmVzc2VzLlxuXG5UbyBzdGFydCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgd2hpY2ggdGhlIHBhdGNoIGFkZGVkLCBhbmQgdGhlIG1vZGlmaWVkIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgYW5kIGBkZXN0cm95X2VwX2ZpbGVzYC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGVzZSBhcmUgYWxsIGRlY2xhcmVkIHN0YXRpYy4gSG1tLCB0aGF0IHN1Z2dlc3RzIHRoZXnigJlyZSBub3QgZGlyZWN0bHkgZXhwb3NlZCB0byB0aGUgZ2VuZXJhbCBzeXN0ZW0sIHRoZXkgYXJlIGludGVybmFsIGhlbHBlcnMuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAgYSBiaXQgYW5kIGNvbnNpZGVyIHRoZSBlbnRyeSBwb2ludHMgdGhhdCAqY2FsbCogdGhlc2UgZnVuY3Rpb25zLiAgVGhhdOKAmWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuIFdlIGhhdmUgYGdhZGdldGZzX2ZpbGxfc3VwZXJgIGNhbGxpbmcgYGdhZGdldGZzX2NyZWF0ZV9maWxlYCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIGJlaW5nIG1vdW50ZWQuIFRoZW4gd2UgaGF2ZSBgYWN0aXZhdGVfZXBfZmlsZXNgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGJ5IGBnYWRnZXRmc19iaW5kYC4gT24gdGhlIHVuYmluZCBzaWRlLCBgZGVzdHJveV9lcF9maWxlc2AgaXMgY2FsbGVkIGJ5IGBnYWRnZXRmc191bmJpbmRgLiBBbmQgdGhlcmUncyBhbHNvIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGBnYWRnZXRmc19raWxsX3NiYCBpcyBpbnZvbHZlZCBoZXJlLCB3aGljaCBJIG5lZWQgdG8gY2hlY2suICBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBkZXZpY2UgZmlsZSBvcGVyYXRpb25zIHBvdGVudGlhbGx5IGludm9sdmVkOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGRldl9yZWxlYXNlYCwgYW5kIGBnYWRnZXRfZGV2X29wZW5gLCB3aGljaCBjb3VsZCBhbHNvIGluZGlyZWN0bHkgdHJpZ2dlciBvciBiZSBpbXBhY3RlZCBieSB0aGlzIGJ1Zy5cblxuUmlnaHQsIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIGBnYWRnZXRmc19raWxsX3NiYCBmaXJzdC4gSXQncyBhIHByaW1lIHN1c3BlY3QgZm9yIGNsZWFuaW5nIHVwIHJlc291cmNlcywgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDoxOC41NDcxMzkxMDdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkzNDIwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19raWxsX3NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEwNj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTA3OmdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMDgte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMjI9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdhZGdldGZzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjEyNS1cXHQuaW5pdF9mc19jb250ZXh0ID0gZ2FkZ2V0ZnNfaW5pdF9mc19jb250ZXh0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMTI2OlxcdC5raWxsX3NiXFx0PSBnYWRnZXRmc19raWxsX3NiLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTI3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjE4LjY3NTA3ODc1OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg1MzQ2MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZ2FkZ2V0ZnNfa2lsbF9zYmAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVubW91bnRpbmcgYW5kIGNsZWFuaW5nIHVwIGEgZ2FkZ2V0ZnMgZmlsZXN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBzY2hlbWUgb2YgdGhpbmdzLiBJcyBpdCBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBhIGB1bW91bnRgIGNhbGwsIG9yIHRyaWdnZXJlZCBieSBzb21lIG90aGVyIGV2ZW50PyBXaGF0IHJlc291cmNlcyBkb2VzIGl0IG5lZWQgdG8gcmVsZWFzZT8gTWVtb3J5LCBmaWxlIGRlc2NyaXB0b3JzLCBwZXJoYXBzPyBNb3JlIGltcG9ydGFudGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzPyBEZWFkbG9ja3M/IERhdGEgY29ycnVwdGlvbj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBtdXRleGVzIG9yIGxvY2tzIGJlaW5nIGhlbGQgYW5kIGVuc3VyZSB0aGV5J3JlIHJlbGVhc2VkIGluIGEgc2FmZSBhbmQgcHJlZGljdGFibGUgb3JkZXIuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nIHRvby4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyByZXR1cm5lZCBhbmQgaG93IGFyZSB0aGV5IGhhbmRsZWQgdXBzdHJlYW0/IElzIHRoZXJlIGFueSBvcHBvcnR1bml0eSBmb3IgcmVzb3VyY2UgbGVha3MsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvICdzdWNjZWVkJz8gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgaXMga2V5IGhlcmUuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHBvaW50IHdoZXJlIHRoZSBmaWxlc3lzdGVtIGRpc2FwcGVhcnMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgZXZlcnl0aGluZyBpdCBkb2VzLiBJIHdhbnQgdG8gcmVhZCB0aGUgY29kZSB3aXRoIGEgY3JpdGljYWwgZXllLCBsb29raW5nIGZvciBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBpZiB0aGUgZ2FkZ2V0IGZpbGVzeXN0ZW0gaXMgY3JpdGljYWwgZm9yIHNvbWUgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjIzLjY2MDQyOTcxMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMDY6XFx0c3RhdGljIHZvaWRcXG4yMTA3OlxcdGdhZGdldGZzX2tpbGxfc2IgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMjEwODpcXHR7XFxuMjEwOTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzYl9tdXRleCk7XFxuMjExMDpcXHRcXHRraWxsX2Fub25fc3VwZXIgKHNiKTtcXG4yMTExOlxcdFxcdGlmICh0aGVfZGV2aWNlKSB7XFxuMjExMjpcXHRcXHRcXHRwdXRfZGV2ICh0aGVfZGV2aWNlKTtcXG4yMTEzOlxcdFxcdFxcdHRoZV9kZXZpY2UgPSBOVUxMO1xcbjIxMTQ6XFx0XFx0fVxcbjIxMTU6XFx0XFx0a2ZyZWUoQ0hJUCk7XFxuMjExNjpcXHRcXHRDSElQID0gTlVMTDtcXG4yMTE3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JfbXV0ZXgpO1xcbjIxMTg6XFx0fVxcbjIxMTk6XFx0XFxuMjEyMDpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjIxMjE6XFx0XFxuMjEyMjpcXHRzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2FkZ2V0ZnNfdHlwZSA9IHtcXG4yMTIzOlxcdFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuMjEyNDpcXHRcXHQubmFtZVxcdFxcdD0gc2hvcnRuYW1lLFxcbjIxMjU6XFx0XFx0LmluaXRfZnNfY29udGV4dCA9IGdhZGdldGZzX2luaXRfZnNfY29udGV4dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MjMuNjYwNTk0NzYxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc5ODY4NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXBseSBmYW1pbGlhciB3aXRoIHRoZSByZWxldmFudCB0ZWNobmljYWwgZG9tYWluIGFuZCBjb250ZXh0LlxuXG4qKkNoZWNraW5nIGBwdXRfZGV2YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGBwdXRfZGV2YC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGRldmljZSBtYW5hZ2VtZW50IG9yIHNvbWUgZm9ybSBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29tcG9uZW50IG9yIGludGVyZmFjZS4gSXQgc3VnZ2VzdHMgYW4gYWN0aW9uLCBsaWtlbHkgYSBjb21tYW5kLCBmdW5jdGlvbiwgb3IgbWV0aG9kIGNhbGwsIHRoYXQncyBjZW50cmFsIHRvIHdoYXRldmVyIHRhc2sgSSdtIGN1cnJlbnRseSBmb2N1c2VkIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nICp3aXRoKiB0aGF0IGZ1bmN0aW9uIG9yIHZhcmlhYmxlLiBJcyBpdCBiZWhhdmluZyBhcyBleHBlY3RlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGlzc3VlcyBvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG9wZXJhdGlvbnM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyB3b3JraW5nIGFzIGl0IHNob3VsZCwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MjcuMTk4NTg1MjEyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE2NjI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXRfZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTU4PXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTYyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjM6c3RhdGljIHZvaWQgcHV0X2RldiAoc3RydWN0IGRldl9kYXRhICpkYXRhKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjQte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxNz1zdGF0aWMgdm9pZCBwdXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIyMC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIyMTpcXHRwdXRfZGV2IChkYXRhLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMjItXFx0LyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MT1kZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTEyMTQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjEyMTU6XFx0cHV0X2RldiAoZGV2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTIxNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNTkxPXN0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2MjgtZW5vbWVtMTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTYyOTpcXHRwdXRfZGV2IChkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjMwLVxcdGtmcmVlIChkYXRhKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM4PWdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNjYwLVxcdERCRyAoZGV2LCBcXFwiJXMgZG9uZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjYxOlxcdHB1dF9kZXYgKGRldik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NjItfVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMjM9Z2FkZ2V0ZnNfZmlsbF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNjgtXFx0aWYgKHJjKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjk6XFx0XFx0cHV0X2RldihkZXYpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDcwLVxcdFxcdGdvdG8gRW5vbWVtO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIxMDc9Z2FkZ2V0ZnNfa2lsbF9zYiAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMTExLVxcdGlmICh0aGVfZGV2aWNlKSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIxMTI6XFx0XFx0cHV0X2RldiAodGhlX2RldmljZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxMTMtXFx0XFx0dGhlX2RldmljZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjI3LjI3Njc1NjYwOFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTE5MDExNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgYHB1dF9lcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEknbSB0aGlua2luZyBpcywgXCJMZXQncyBjaGVjayBgcHV0X2VwYC5cIiBJJ20gbm90IGdvaW5nIHRvIGdldCBib2dnZWQgZG93biBpbiBwcmVsaW1pbmFyaWVzOyBJIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBtaW5kIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBmdW5jdGlvbmFsaXR5LiBXaGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQncyB0aGUgaW1wbGVtZW50YXRpb24/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIGl0IGhhbmRsZXMsIG9yIGZhaWxzIHRvIGhhbmRsZT8gQXJlIHRoZXJlIHJlY2VudCBjaGFuZ2VzLCBjb21taXRzLCBvciBidWcgcmVwb3J0cyBhc3NvY2lhdGVkIHdpdGggYHB1dF9lcGAgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbSBnb2luZyB0byBxdWlja2x5IHJlY2FsbCBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IuIERvZXMgaXQgYWRoZXJlIHRvIHRoZSBBUEkgc3BlY3Mgb3IgaXMgdGhlcmUgc29tZSBkZXZpYXRpb24/IElzIGl0IHVzZWQgaW4gdGhlIGNvZGUgcHJvcGVybHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgdGhhdCBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlcj8gSW4gZXNzZW5jZSwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIEknbGwgbmVlZCB0byBhbnN3ZXIgdG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBhbmQgY29uZGl0aW9uLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBjcml0aWNhbCBjaGVja3BvaW50IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjMyLjc5NTc3MzI4NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyNjI0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjE3OnN0YXRpYyB2b2lkIHB1dF9lcCAoc3RydWN0IGVwX2RhdGEgKmRhdGEpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MzgxPWVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0zOTctXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkYXRhLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6Mzk4OlxcdHB1dF9lcCAoZGF0YSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM5OS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz00ODg9c3RhdGljIHZvaWQgZXBfYWlvX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjMtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVwZGF0YS1cXHUwMDNlZGV2LVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NTI0OlxcdHB1dF9lcChlcGRhdGEpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01MjUtfVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTUyNz1zdGF0aWMgc3NpemVfdCBlcF9haW8oc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3NC1cXHRrZnJlZShwcml2KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6NTc1OlxcdHB1dF9lcChlcGRhdGEpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy01NzYtXFx0cmV0dXJuIHZhbHVlO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMDg9c3RhdGljIHZvaWQgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDEyLVxcdGlmIChpbm9kZS1cXHUwMDNlaV9wcml2YXRlIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX2ZvcCA9PSBcXHUwMDI2ZXBfaW9fb3BlcmF0aW9ucylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxMzpcXHRcXHRwdXRfZXAoaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNDozMi44OTUwNDQ3MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI3NDU3NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRW5kcG9pbnQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBuYXN0eSBidWc6IGBwdXRfZXBgIGJlaW5nIGNhbGxlZCBhdCB0aGUgd3JvbmcgdGltZSDigJMgc3BlY2lmaWNhbGx5LCBpbnNpZGUgYGRlc3Ryb3lfZXBfZmlsZXNgIGluc3RlYWQgb2YgZHVyaW5nIGlub2RlIGV2aWN0aW9uLiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiB0aGUgaW5vZGUgc3RpY2tzIGFyb3VuZC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZW5kcG9pbnQgYW5kIG1ha2luZyBzdXJlIHRoYXQgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBtYW5hZ2VkLlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IExldCdzIHNlZS4uLiB0aGUgcHJpbWFyeSBzdXNwZWN0cyBhcmUgYGVwX3JlbGVhc2VgLCBgZXBfYWlvYCwgYGVwX2Fpb19jb21wbGV0ZWAsIGBnYWRnZXRfZGV2X29wZW5gLCBgZGV2X3JlbGVhc2VgLCBgZXBfb3BlbmAsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBgZXBfd3JpdGVfaXRlcmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBhbmQgYGdhZGdldF9kZXZfaW9jdGxgLiBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgZW50cnkgcG9pbnRzIGludG8gdGhlIHN5c3RlbSwgbm90IGp1c3QgaW50ZXJuYWwgaGVscGVycy5cblxuV2FpdCBhIHNlY29uZCwgdGhlcmUncyBhIG5vdGUgYWJvdXQgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEJ1dC4uLiBhbGwgZmlsZSBvcGVyYXRpb25zIGFyZSBzdGF0aWMgaW4gdGhpcyBmaWxlLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHN0aWxsIGVudHJ5IHBvaW50cyB0aGF0IGdldCB0aGVpciBhZGRyZXNzZXMgdGFrZW4sIGFuZCAqc2hvdWxkbid0KiBiZSBpbmxpbmVkLiBTbywgYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgdGhleSdyZSBsaWtlbHkgbm90IGlubGluZWQgYW5kIHRodXMgd2UgY2FuIHN0aWxsIHNlZSB0aGVtLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyB0cnVlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBhcyBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6MzkuMzIyNTA0NjkzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkyNjQ4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxPU1PRFVMRV9MSUNFTlNFIChcXFwiR1BMXFxcIik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo4MzpzdGF0aWMgaW50IGVwX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy04NC1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz03MDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy03MDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjcwNTpcXHQub3BlbiA9XFx0XFx0ZXBfb3BlbixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA2LVxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTgxNz1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjgxODplcF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTgxOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjM5LjQ2MTc3NTAxNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU4MDg1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyB0aGUgYWRkcmVzc2VzIGFyZSB0YWtlbiwgbWVhbmluZyB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGJlaW5nIGlubGluZWQuIFRoYXQncyBnb29kOyBpdCBtYWtlcyB0aGVtIGRpc3RpbmN0IHRhcmdldHMuIExldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGZpbGUgb3BlcmF0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuLi4gKkRlZXAgYnJlYXRoKi4uLiBoZXJlIHRoZXkgYXJlOiBgZXBfb3BlbmAsIGBlcF9yZWxlYXNlYCwgYGVwX2lvY3RsYCwgYGVwX3JlYWRfaXRlcmAsIGBlcF93cml0ZV9pdGVyYCwgYGdhZGdldF9kZXZfb3BlbmAsIGBlcDBfcmVhZGAsIGBkZXZfY29uZmlnYCwgYGVwMF9mYXN5bmNgLCBgZXAwX3BvbGxgLCBgZ2FkZ2V0X2Rldl9pb2N0bGAsIGFuZCBgZGV2X3JlbGVhc2VgLiBSaWdodCwgYSBwcmV0dHkgY29tcHJlaGVuc2l2ZSBsaXN0LlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIHRoZXNlIHdvdWxkIGJlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHRvIHN0YXJ0IGZ1enppbmcuIEknbGwgbmVlZCB0byBwcmlvcml0aXplIHRob3VnaDsgbGV0J3MgcGljayBhIHNtYWxsZXIsIG1vcmUgbWFuYWdlYWJsZSBzdWJzZXQgZm9yIHRoZSBpbml0aWFsIHRlc3RzLiBJJ20gdGhpbmtpbmcuLi4gYGVwX29wZW5gLCBgZXBfcmVsZWFzZWAsIGBnYWRnZXRfZGV2X29wZW5gLCBgZGV2X3JlbGVhc2VgLCBhbmQgYGRldl9jb25maWdgIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcgb25lcyB0byBzdGFydCB3aXRoLlxuXG5JIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgZXBfcmVsZWFzZWAgZm9yIG15IGluaXRpYWwgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzI1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjQ0LjIxOTg2NDIyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5ODU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTM4MD1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjM4MTplcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTM4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA1LVxcdC5vcGVuID1cXHRcXHRlcF9vcGVuLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDY6XFx0LnJlbGVhc2UgPVxcdGVwX3JlbGVhc2UsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwNy1cXHQudW5sb2NrZWRfaW9jdGwgPSBlcF9pb2N0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzQ6NDQuMzk3ODU1OTRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4Njk0MDg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipDaGVja2luZyB0aGUgUmVsZWFzZSBQaXBlbGluZSoqXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZ2V0IHN0cmFpZ2h0IHRvIGl0LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgZGV2X3JlbGVhc2VgLiBObyBuZWVkIHRvIGJlYXQgYXJvdW5kIHRoZSBidXNoOyBJJ3ZlIGdvdCBhIHNwZWNpZmljIHB1cnBvc2UuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgcGlwZWxpbmUgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbG9va3MgYXMgZXhwZWN0ZWQgYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjU3LjI2NzI2NzM1NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjg0OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MD1zdGF0aWMgaW50XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExOTE6ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM2LVxcdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5Mzc6XFx0LnJlbGVhc2UgPVxcdGRldl9yZWxlYXNlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM0OjU3LjQxMDk2MTI5NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU5MTQyODg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gYW55IHRyb3VibGVzaG9vdGluZyBvciBmZWF0dXJlIGRlcGxveW1lbnQsIGl0J3MgYWx3YXlzIHNtYXJ0IHRvIHN0YXJ0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZC4gTXkgaW5zdGluY3QgaGVyZSBpcyB0byBiZWdpbiBieSBleGFtaW5pbmcgdGhlIGBkZXZfY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgcHJvcGVybHkgc2V0IHVwLiBBcmUgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBpbiBwbGFjZT8gSGF2ZSBJIGFkZHJlc3NlZCBwb3RlbnRpYWwgY29uZmxpY3RzPyBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gdW5leHBlY3RlZCBvdXRjb21lIGZ1cnRoZXIgZG93biB0aGUgbGluZT8gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYSBtaXNjb25maWd1cmVkIGVudmlyb25tZW50IGNhbiB3YXN0ZSBob3VycyBjaGFzaW5nIHBoYW50b21zLiBJIHdhbnQgdG8gcnVsZSBvdXQgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBlcnJvciBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgcmVxdWlyZWQgc2V0dGluZ3MsIGRlcGVuZGVuY2llcywgYW5kIGNvbm5lY3Rpb25zIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQgd2l0aGluIHRoZSBkZXZlbG9wbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHVwZnJvbnQgY2hlY2sgd2lsbCBzYXZlIG1lIGEgd29ybGQgb2YgcG90ZW50aWFsIGhlYWRhY2hlcyBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjE0LjAwMjM5MzU5WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU3ODU2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU1LSAqXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjU2OiAqIC0gRmlyc3QsIGRldl9jb25maWcoKSBpcyBjYWxsZWQgd2hlbiAvZGV2L2dhZGdldC8kQ0hJUCBpcyBjb25maWd1cmVkXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTU3LSAqICAgKGJ5IHdyaXRpbmcgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlIGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgaXRcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzk4PXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3OTk6ZGV2X2NvbmZpZyAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cilcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTgwMC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMyLVxcdC5yZWFkID1cXHRcXHRlcDBfcmVhZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMzpcXHQud3JpdGUgPVxcdGRldl9jb25maWcsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzQtXFx0LmZhc3luYyA9XFx0ZXAwX2Zhc3luYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MTQuMTk4MTg0Nzk4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgzMDA4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEdhZGdldCBEZXZpY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gemVybyBpbiBvbiBgZ2FkZ2V0X2Rldl9vcGVuYC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBpbW1lZGlhdGVseSBjb25jZXJuZWQgd2l0aCB0aGUgZGV2aWNlJ3Mgb3BlbiBvcGVyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBhIHBlcmZlY3RseSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgKm9wZW4qIHJvdXRpbmUgaXMgb2Z0ZW4gdGhlIGdhdGV3YXkgZm9yIGFsbCBzb3J0cyBvZiBzdWJzZXF1ZW50IGludGVyYWN0aW9uLCBzbyBjaGVja2luZyBpdCBpcyBhIGZ1bmRhbWVudGFsIGZpcnN0IHN0ZXAuIFVuZGVyc3RhbmRpbmcgaG93IGEgZGV2aWNlIGhhbmRsZXMgYW4gb3BlbiBjYWxsIGhlbHBzIHRvIGRpYWdub3NlIHRoZSB3YXkgdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXJyb3JzIGFyZSBoYW5kbGVkLCBhbmQgdGhlIGRldmljZSBpcyBpbml0aWFsaXplZCBmb3IgdXNlLiBLbm93aW5nIHRoaXMgYWxzbyBzZXRzIHRoZSBzdGFnZSBmb3IgY2hlY2tpbmcgaG93IHRoZSBkZXZpY2UgaXMgaGFuZGxlZCBmb3Igc3Vic2VxdWVudCByZWFkIGFuZCB3cml0ZSBjYWxscy4gSXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlIHdoZW4gdHJvdWJsZXNob290aW5nLCBkZWJ1Z2dpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGEgZ2FkZ2V0IGRldmljZSdzIGJlaGF2aW9yLiBUaGUgYGdhZGdldF9kZXZfb3BlbmAgZnVuY3Rpb24gZW5jYXBzdWxhdGVzIHRoZSBzZXR1cCBwaGFzZSwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgKmhvdyogdGhhdCBoYXBwZW5zIGFyZSB2YXN0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5MDAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToxNy42NTY0ODg3OTRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkzNDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRfZGV2X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTExPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkxMjpnYWRnZXRfZGV2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkxMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkyOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzMTpcXHQub3BlbiA9XFx0XFx0Z2FkZ2V0X2Rldl9vcGVuLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMyLVxcdC5yZWFkID1cXHRcXHRlcDBfcmVhZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MTcuODA4NDI4ODU1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzQ2NTcyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBlcF9pb2N0bGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGluIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZXBfaW9jdGxgLiBHb3R0YSB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFdoYXQncyB0aGUgcGxhbj9cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjIxLjE4MzA5MDUzNloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyOTM0NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MzgxPWVwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy00MDEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjQwMjpzdGF0aWMgbG9uZyBlcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTQwMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9NzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtNzA2LVxcdC5yZWxlYXNlID1cXHRlcF9yZWxlYXNlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzo3MDc6XFx0LnVubG9ja2VkX2lvY3RsID0gZXBfaW9jdGwsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTcwOC1cXHQucmVhZF9pdGVyID1cXHRlcF9yZWFkX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjIxLjI4NjAzMDk1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNjI3MDQ5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgKipcblxuT2theSwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYyBhZ2FpbiwgcGFydGljdWxhcmx5IGluIGxpZ2h0IG9mIFtpbnNlcnQgcmVsZXZhbnQgY29udGV4dCBoZXJlLCBlLmcuLCB0aGUgcmVjZW50IGlzc3VlIHdpdGggcGVyc2lzdGVudCBzdG9yYWdlLCBhIG5ldyBmZWF0dXJlIHdlJ3JlIGltcGxlbWVudGluZywgb3IgYSBwYXJ0aWN1bGFyIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tdLiBJIHdhbnQgdG8gZW5zdXJlIGl0J3MgaGFuZGxpbmcgaW5vZGUgZXZpY3Rpb24gY29ycmVjdGx5IHVuZGVyIGFsbCB0aGUgZWRnZSBjYXNlcyBhbmQgY29uY3VycmVudCBhY2Nlc3MgcGF0dGVybnMgd2UndmUgZGlzY3Vzc2VkLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlcXVlbmNpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBkb3VibGUtY2hlY2tpbmcgdGhlIGxvY2tzIGl0IHV0aWxpemVzLCBhbmQgY29uZmlybWluZyB0aGF0IHRoZSBjbGVhbnVwIG9mIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50LiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludHJpY2FjaWVzIG9mIGBnYWRnZXRmc2DigJlzIGlub2RlIG1hbmFnZW1lbnQg4oCTIHRoZSBzaGFyZWQgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgbWFuYWdlZCB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIEknbGwgYWxzbyB3YW50IHRvIHF1aWNrbHkgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggYW55IHJlbGF0ZWQgVkZTIG9wZXJhdGlvbnMuIFRoaXMgd2lsbCBpbmNsdWRlIHJlbWVtYmVyaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBnZW5lcmFsIFZGUyBpbm9kZSBsaWZlY3ljbGUgYW5kIGZpbGUgc3lzdGVtIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNToyNS40NDg3MzkyNDNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTUwMzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYWRnZXRmc19ldmljdF9pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE5ODQ9c3RhdGljIGludCBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY2hhciBjb25zdCAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDA3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDA4OnN0YXRpYyB2b2lkIGdhZGdldGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMDkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTIwMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdhZGdldF9mc19vcGVyYXRpb25zID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwMTgtXFx0LmRyb3BfaW5vZGUgPVxcdGlub2RlX2p1c3RfZHJvcCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MjAxOTpcXHQuZXZpY3RfaW5vZGUgPVxcdGdhZGdldGZzX2V2aWN0X2lub2RlLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDIwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjI1LjgzMDI0ODc2OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQwNzY4NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQncyBsYXkgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJ3JlIGxvb2tpbmcgYXQgaGVyZTogYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBhbmQgYGRldl9jb25maWdgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb25maWd1cmF0aW9ucyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMgYXMgZXhwZWN0ZWQuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBVU0JfR0FER0VURlNgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAgYXJlIGFsbCBwcm9wZXJseSBzZXQuXG5cblJpZ2h0LCBgVVNCX0dBREdFVEZTYCwgSSByZW1lbWJlciB0aGF0J3MgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AuIFNvIGl0J3MgcHJvYmFibHkgb2xkZXIgY29kZS4gTm93LCBpcyBgVVNCX0dBREdFVGAgbWFuZGF0b3J5PyBPZiBjb3Vyc2UsIGl0IGlzIOKAkyBpdOKAmXMgdGhlIG1haW4gbWVudWNvbmZpZyBvcHRpb24gZm9yIHRoZSBlbnRpcmUgZ2FkZ2V0IHN1YnN5c3RlbS4gQW5kIGBVU0JfRFVNTVlfSENEYD8gWWVzLCBJIG5lZWQgdGhhdCBvbmUgZm9yIHRlc3RpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LiBFc3NlbnRpYWwgZm9yIG91ciBkZXZlbG9wbWVudCB3b3JrIVxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBVU0JfR0FER0VURlNgIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjc1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjMxLjA3MTAyMTE0NVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwNzQwMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MzEuMzgxNzcwNTY2WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzA0NTQ0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBVU0IgR2FkZ2V0IEZpbGUgU3lzdGVtIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIHJldmlzaXQgdGhlIGBLY29uZmlnYCBmb3IgYFVTQl9HQURHRVRGU2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIFttZW50aW9uIHNwZWNpZmljIGFyZWFzIHlvdSBtaWdodCBmb2N1cyBvbiwgZS5nLiwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGdhZGdldCBkcml2ZXJzLCB0aGUgYXZhaWxhYmxlIGZlYXR1cmVzLCBhbnkgcmVjZW50IGNoYW5nZXMsIG9yIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZXNdLiBJIHdhbnQgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgbnVhbmNlcyBpbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsJ3MgVVNCIHN0YWNrIG9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgVVNCIGRyaXZlcnMgSSdtIHdvcmtpbmcgd2l0aC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBpbXBhY3RzIHRoZSBhdmFpbGFibGUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIGltcGxpY2F0aW9ucyBvbiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZS4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgY3VycmVudCBzdGF0ZSBjb21wbGV0ZWx5IGFuZCBlbnN1cmUgdGhpcyBvcHRpb24gaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGRlc2lnbiByZXF1aXJlbWVudHMgYW5kIGZ1dHVyZSBleHBhbnNpb24gcG9zc2liaWxpdGllcy4gVGhlcmUgbWlnaHQgYWxzbyBiZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGlzIGZpbGUgc3lzdGVtIGFuZCB0aGUgcG93ZXItbWFuYWdlbWVudCBvcHRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgYWxzbyByZXF1aXJlcyBhIHF1aWNrIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNS4zNTIyMjkwN1oiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuIDIyMDpcXHRcXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbiAyMjE6XFx0XFx0c2VsZWN0IFVTQl9GX0ZTXFxuIDIyMjpcXHRcXHRzZWxlY3QgVVNCX0ZVTkNUSU9ORlNfR0VORVJJQyBpZiAhKFVTQl9GVU5DVElPTkZTX0VUSCB8fCBVU0JfRlVOQ1RJT05GU19STkRJUylcXG4gMjIzOlxcdFxcdGhlbHBcXG4gMjI0OlxcdFxcdCAgVGhlIEZ1bmN0aW9uIEZpbGVzeXN0ZW0gKEZ1bmN0aW9uRlMpIGxldHMgb25lIGNyZWF0ZSBVU0JcXG4gMjI1OlxcdFxcdCAgY29tcG9zaXRlIGZ1bmN0aW9ucyBpbiB1c2VyIHNwYWNlIGluIHRoZSBzYW1lIHdheSBHYWRnZXRGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTozNS4zNTIzNTE1M1oiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY2NTE0NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBEZXBlbmRlbmN5IHdpdGhpbiBVU0IgR2FkZ2V0IENvZGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBJIHNlZSBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGRlcGVuZGVudCBvbiBhbnl0aGluZyBlbHNlLCBhdCBsZWFzdCBub3QgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LiBCdXQgSSBub3RpY2UgaXQncyBuZXN0ZWQgKmluc2lkZSogYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIFwiSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuXCIgVGhhdCBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnQgaXMgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYSAqY29uZGl0aW9uYWwqIGRlcGVuZGVuY3kuIEl0IG1lYW5zIHRoaXMgcGFydGljdWxhciBjb2RlIHNlY3Rpb24gb25seSBnZXRzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpZiB0aGUgYFVTQl9HQURHRVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBub3QgYSBkaXJlY3QsIGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnQsIGJ1dCBpdCdzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gSXQgaXMgZGVwZW5kZW50IG9uIGBVU0JfR0FER0VUYCBiZWluZyBjb25maWd1cmVkLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6MzkuOTE4ODY5NDI4WiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM4MjI1NDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIFVTQl9HQURHRVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0MC4xMjI3MDMyMTZaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDkwNjMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBTb3VyY2UqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZSBhY3R1YWxseSBnZXRzIHB1bGxlZCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEl0J3Mgbm90IGp1c3Qgc2l0dGluZyB0aGVyZSwgb3JwaGFuZWQ7IGl0ICpoYXMqIHRvIGJlIHNvdXJjZWQgZnJvbSBzb21ld2hlcmUgaGlnaGVyIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIHRyZWUuIEkgbmVlZCB0byB0cmFjZSBpdHMgaW5jbHVzaW9uIHBhdGggdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxvZ2ljIGZvciB0aGUgbGVnYWN5IFVTQiBnYWRnZXQgZHJpdmVyLiBMZXQgbWUgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIEtjb25maWcgZmlsZXMgYW5kIE1ha2VmaWxlcywgbWF5YmUgdXNlIHNvbWUgZ3JlcC1mdSwgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGdldHMgbGlua2VkIGludG8gdGhlIGJyb2FkZXIgVVNCIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbiBmaWxlcyBpcyBjcml0aWNhbCBmb3IgY29ycmVjdGx5IGVuYWJsaW5nLCBkaXNhYmxpbmcsIGFuZCBjdXN0b21pemluZyB0aGUgZ2FkZ2V0IGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncy4gUmlnaHQsIGxldCdzIHN0YXJ0IHRoZSBodW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTczOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDA4OjM1OjQ0LjMzMzYxMjc2NVoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MTQwNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxlZ2FjeS9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ5NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfVENNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NTA5OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NDQuNDUyNzU4OTk4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjU4NDM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFVTQiBHYWRnZXQgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTA5LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNvcmUgZmVhdHVyZSBvciBvcHRpb24gaXMgZGVmaW5lZC4gSSdtIGd1ZXNzaW5nIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGlzIGluIHRoYXQgZ2VuZXJhbCBhcmVhLCBhbmQgaXQnbGwgc2VydmUgYXMgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJdCdzIG9mdGVuIHdoZXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGRldGFpbGVkLCB3aGljaCBjb3VsZCBiZSBoZWxwZnVsLiBJJ2xsIHByb2JhYmx5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gTGluZSA1MDkuLi4gcmlnaHQsIHRoYXQgc2hvdWxkIGdldCB0aGUgaW52ZXN0aWdhdGlvbiBtb3ZpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NDguMDc4NjA2NzY0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0OTA6XFx0XFx0ICB0aGUgZGV2aWNlIGZpbGUgdG8gZ2V0IG9yIHNldCBwcmludGVyIHN0YXR1cy5cXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldF9wcmludGVyLnJzdFxcbiA0OTM6XFx0XFx0ICB3aGljaCBpbmNsdWRlcyBzYW1wbGUgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UgZmlsZS5cXG4gNDk0OlxcdFxcbiA0OTU6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxcbiA0OTY6XFx0XFx0Ym9vbCBcXFwiVVNCIEdhZGdldCBUYXJnZXQgRmFicmljXFxcIlxcbiA0OTc6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRVxcbiA0OTg6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfQ09ORklHRlNcXG4gNDk5OlxcdFxcdHNlbGVjdCBVU0JfTElCQ09NUE9TSVRFXFxuIDUwMDpcXHRcXHRzZWxlY3QgVVNCX0ZfVENNXFxuIDUwMTpcXHRcXHRoZWxwXFxuIDUwMjpcXHRcXHQgIFRoaXMgZmFicmljIGlzIGEgVVNCIGdhZGdldCBjb21wb25lbnQuIFR3byBVU0IgcHJvdG9jb2xzIGFyZVxcbiA1MDM6XFx0XFx0ICBzdXBwb3J0ZWQgdGhhdCBpcyBCQkIgb3IgQk9UIChCdWxrIE9ubHkgVHJhbnNwb3J0KSBhbmQgVUFTXFxuIDUwNDpcXHRcXHQgIChVU0IgQXR0YWNoZWQgU0NTSSkuIEJPVCBpcyBhZHZlcnRpc2VkIG9uIGFsdGVybmF0aXZlXFxuIDUwNTpcXHRcXHQgIGludGVyZmFjZSAwIChwcmltYXJ5KSBhbmQgVUFTIGlzIG9uIGFsdGVybmF0aXZlIGludGVyZmFjZSAxLlxcbiA1MDY6XFx0XFx0ICBCb3RoIHByb3RvY29scyBjYW4gd29yayBvbiBVU0IyLjAgYW5kIFVTQjMuMC5cXG4gNTA3OlxcdFxcdCAgVUFTIHV0aWxpemVzIHRoZSBVU0IgMy4wIGZlYXR1cmUgY2FsbGVkIHN0cmVhbXMgc3VwcG9ydC5cXG4gNTA4OlxcdFxcbiA1MDk6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcXFwiXFxuIDUxMDpcXHRcXG4gNTExOlxcdGVuZGlmICMgVVNCX0dBREdFVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwODozNTo0OC4wNzg3NzIxNDRaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5MzkzMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgSSdtIGxvb2tpbmcgYXQgaXMgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGAgYmVpbmcgZGVmaW5lZC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgYnV0IHRvIGVtdWxhdGUgdGhlIGdhZGdldCBjb250cm9sbGVyLCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGl0ZW0uIEFuZCwgdG8gYmUgY29tcGxldGUsIGBVU0JfR0FER0VURlNgIG5lZWRzIHRvIGJlIGRlZmluZWQgdG9vLlxuXG5TbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogSSBoYXZlOiBgVVNCX0dBREdFVGAsIGBVU0JfR0FER0VURlNgLCBhbmQgYFVTQl9EVU1NWV9IQ0RgLlxuXG5Ob3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIEkndmUgaWRlbnRpZmllZCBhIGxpc3QgdGhhdCBzZWVtIHByb21pc2luZzogYGdhZGdldGZzX2V2aWN0X2lub2RlYCwgYGVwX3JlbGVhc2VgLCBgZGV2X3JlbGVhc2VgLCBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBgZGV2X2NvbmZpZ2AsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBhbmQgYGVwX3dyaXRlX2l0ZXJgLlxuXG5IbW0sIG5vdywgYWJvdXQgYGdhZGdldGZzX2V2aWN0X2lub2RlYC4uLiBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgZ2FkZ2V0X2ZzX29wZXJhdGlvbnNgLiBUaGF0IG1ha2VzIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIG15IGZvY3VzLCBlc3BlY2lhbGx5IHNpbmNlIHRoZSBidWcgZml4IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBpdC4gSSB3YW50IHRvIGtlZXAgaXQuXG5cbkknbSBza2lwcGluZyBgZGVzdHJveV9lcF9maWxlc2AgYmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgaXRzIGFkZHJlc3MgaXNuJ3QgdGFrZW4uIEl0J3MgY2FsbGVkIGJ5IGBnYWRnZXRmc191bmJpbmRgIGFuZCBgYWN0aXZhdGVfZXBfZmlsZXNgLCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSB0byBiZSBpbmxpbmVkLiBJIHdpbGwgc2tpcCBpdCBmb3Igbm93LlxuXG5JJ20gYWxzbyBnb2luZyB0byBza2lwIGBnYWRnZXRmc19jcmVhdGVfZmlsZWAgZm9yIHRoZSBzYW1lIHJlYXNvbi4gSXQncyBzdGF0aWMsIGl0cyBhZGRyZXNzIGlzbid0IHRha2VuLCBhbmQgaXQncyBjYWxsZWQgYnkgYGFjdGl2YXRlX2VwX2ZpbGVzYCBhbmQgYGdhZGdldGZzX2ZpbGxfc3VwZXJgLiBBZ2FpbiwgcHJvYmFibHkgaW5saW5lZC5cblxuTm93LCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBub3QgZ2V0dGluZyBpbmxpbmVkLiBJJ2xsIGNoZWNrIGVhY2ggc3ltYm9sOiBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgLiBBc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHRoZXJlZm9yZSBpdCB3b24ndCBiZSBpbmxpbmVkLiBHb29kISBgZXBfcmVsZWFzZWAuIEFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIC0gZGVmaW5pdGVseSBub3QgaW5saW5lZC4gYGRldl9yZWxlYXNlYC4gU2FtZSBzdG9yeTogZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50LiBgZ2FkZ2V0X2Rldl9vcGVuYCwgYGVwX29wZW5gLCBgZGV2X2NvbmZpZ2AsIGBlcF9pb2N0bGAsIGBlcF9yZWFkX2l0ZXJgLCBhbmQgYGVwX3dyaXRlX2l0ZXJgLiBBbGwgb2YgdGhlbS4gVGhleSBhcmUgYWxsIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB3aGljaCBtZWFucyB0aGV5IHdvbid0IGJlIGlubGluZWQuXG5cbk9rYXksIHRoYXQncyBpdC4gSSBoYXZlIHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NjUsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDg6MzU6NTcuOTcyNzA1NzEzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3Mzg3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIixcbiAgICBcIlVTQl9EVU1NWV9IQ0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRmc19ldmljdF9pbm9kZVwiLFxuICAgIFwiZXBfcmVsZWFzZVwiLFxuICAgIFwiZGV2X3JlbGVhc2VcIixcbiAgICBcImdhZGdldF9kZXZfb3BlblwiLFxuICAgIFwiZXBfb3BlblwiLFxuICAgIFwiZGV2X2NvbmZpZ1wiLFxuICAgIFwiZXBfaW9jdGxcIixcbiAgICBcImVwX3JlYWRfaXRlclwiLFxuICAgIFwiZXBfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGlzc3VlIGluIHRoZSBVU0IgZ2FkZ2V0ZnMgZHJpdmVyIGJ5IG1vdmluZyB0aGUgYHB1dF9lcGAgY2FsbCBmcm9tIGBkZXN0cm95X2VwX2ZpbGVzYCB0byBhIG5ldyBgZ2FkZ2V0ZnNfZXZpY3RfaW5vZGVgIGNhbGxiYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBkcml2ZXIgKGdhZGdldGZzIGNhbiBiZSB0ZXN0ZWQgdmlhIGR1bW15X2hjZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldGZzX2V2aWN0X2lub2RlXCIsXG4gICAgXCJlcF9yZWxlYXNlXCIsXG4gICAgXCJkZXZfcmVsZWFzZVwiLFxuICAgIFwiZ2FkZ2V0X2Rldl9vcGVuXCIsXG4gICAgXCJlcF9vcGVuXCIsXG4gICAgXCJkZXZfY29uZmlnXCIsXG4gICAgXCJlcF9pb2N0bFwiLFxuICAgIFwiZXBfcmVhZF9pdGVyXCIsXG4gICAgXCJlcF93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gdGhlIFVTQiBnYWRnZXRmcyBkcml2ZXIgYnkgbW92aW5nIHRoZSBgcHV0X2VwYCBjYWxsIGZyb20gYGRlc3Ryb3lfZXBfZmlsZXNgIHRvIGEgbmV3IGBnYWRnZXRmc19ldmljdF9pbm9kZWAgY2FsbGJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGRyaXZlciAoZ2FkZ2V0ZnMgY2FuIGJlIHRlc3RlZCB2aWEgZHVtbXlfaGNkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowt2mk6[1] Phase: Succeeded StartedAt: 2026-07-31 08:36:11 +0000 UTC FinishedAt: 2026-07-31 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 08:36:11 +0000 UTC FinishedAt: 2026-07-31 08:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2] Phase: Succeeded StartedAt: 2026-07-31 08:36:11 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 08:36:12 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 08:36:12 +0000 UTC FinishedAt: 2026-07-31 08:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 08:36:12 +0000 UTC FinishedAt: 2026-07-31 08:36:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowt2mk6/series-workflowt2mk6-convert-artifact-310919547/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 08:36:35 +0000 UTC FinishedAt: 2026-07-31 08:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 08:36:35 +0000 UTC FinishedAt: 2026-07-31 08:58:37 +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:*a61e4d54-85ed-4cba-8d48-ea4e513b28a3,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-workflowt2mk6/series-workflowt2mk6-convert-artifact-310919547/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8498b80c-c559-4bd9-a57f-8190b1909193", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-646639801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 08:36:35 +0000 UTC FinishedAt: 2026-07-31 08:58:22 +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:*a61e4d54-85ed-4cba-8d48-ea4e513b28a3,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-workflowt2mk6/series-workflowt2mk6-convert-artifact-310919547/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8498b80c-c559-4bd9-a57f-8190b1909193", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-646639801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 08:58:37 +0000 UTC FinishedAt: 2026-07-31 08:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 08:58:37 +0000 UTC FinishedAt: 2026-07-31 08:58:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 08:58:37 +0000 UTC FinishedAt: 2026-07-31 08:59:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 08:58:37 +0000 UTC FinishedAt: 2026-07-31 08:58:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowt2mk6/series-workflowt2mk6-convert-artifact-3528774354/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 08:59:10 +0000 UTC FinishedAt: 2026-07-31 09:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 08:59:10 +0000 UTC FinishedAt: 2026-07-31 09:01:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8498b80c-c559-4bd9-a57f-8190b1909193,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-646639801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 09:01:13 +0000 UTC FinishedAt: 2026-07-31 09:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:01:13 +0000 UTC FinishedAt: 2026-07-31 09:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 09:01:13 +0000 UTC FinishedAt: 2026-07-31 09:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 09:01:13 +0000 UTC FinishedAt: 2026-07-31 09:29:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a61e4d54-85ed-4cba-8d48-ea4e513b28a3,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-workflowt2mk6/series-workflowt2mk6-convert-artifact-3528774354/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a5e139ce-7546-4cfc-b5bc-aefb2eacb2b7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-380850534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 09:01:13 +0000 UTC FinishedAt: 2026-07-31 09:29:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a61e4d54-85ed-4cba-8d48-ea4e513b28a3,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-workflowt2mk6/series-workflowt2mk6-convert-artifact-3528774354/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "a5e139ce-7546-4cfc-b5bc-aefb2eacb2b7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-380850534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 09:29:30 +0000 UTC FinishedAt: 2026-07-31 09:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 09:29:30 +0000 UTC FinishedAt: 2026-07-31 09:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 09:29:30 +0000 UTC FinishedAt: 2026-07-31 09:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 09:29:30 +0000 UTC FinishedAt: 2026-07-31 09:31:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a5e139ce-7546-4cfc-b5bc-aefb2eacb2b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-380850534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8498b80c-c559-4bd9-a57f-8190b1909193,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a5e139ce-7546-4cfc-b5bc-aefb2eacb2b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-646639801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-380850534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 09:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 09:31:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-convert-artifact-3388774951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 09:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 09:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 09:31:19 +0000 UTC FinishedAt: 2026-07-31 09:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 09:31:31 +0000 UTC FinishedAt: 2026-07-31 12:34:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt2mk6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_evict_inode","ep_release","dev_release","gadget_dev_open","ep_open","dev_config","ep_ioctl","ep_read_iter","ep_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"98cdbede-dc32-42a0-8b11-707715055a8f","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 09:31:31 +0000 UTC FinishedAt: 2026-07-31 12:33:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8498b80c-c559-4bd9-a57f-8190b1909193,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a5e139ce-7546-4cfc-b5bc-aefb2eacb2b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-646639801/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-build-action-380850534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt2mk6/series-workflowt2mk6-convert-artifact-3388774951/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,}