Name: series-workflow7q6fq Phase: Succeeded StartedAt: 2026-09-04 20:57:44 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[0] Phase: Succeeded StartedAt: 2026-09-04 20:57:44 +0000 UTC FinishedAt: 2026-09-04 21:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 20:57:44 +0000 UTC FinishedAt: 2026-09-04 21:00:28 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB", "USB_MDC800" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB", "USB_MDC800" ], "series_id": "c5d1cca9-64ec-4eba-bfc7-c34a103127be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mdc800_usb_probe", "mdc800_device_open", "mdc800_device_read", "mdc800_device_write", "mdc800_device_release", "mdc800_usb_disconnect" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtVU0JfTURDODAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRjODAwX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX29wZW4mIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWFkJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O21kYzgwMF91c2JfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gc2VxdWVuY2UgaW4gbWRjODAwX3VzYl9wcm9iZSBpbiB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZHJpdmVyLCBtb3ZpbmcgdXNiX3JlZ2lzdGVyX2RldiBhZnRlciBVUkIgc2V0dXAgYW5kIGFkZGluZyBwcm9wZXIgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoRHVtbXkgSENEIC8gUmF3IEdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YmZiZmE2OWFmYzdmMzVhMmQ2ODc2NWMxN2NlZjcxMTVhMDU0ODNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMDo1ODo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5pbmRleCBjYTI4N2I3NzBlOGNiLi4wMTkzMTQ3MDJlMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5AQCAtNDgyLDEzICYjNDM7NDgyLDYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIFxuLVx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuLVx0aWYgKHJldHZhbCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4tXG4gXHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiBcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gXG5AQCAtNTI3LDYgJiM0Mzs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbiYjNDM7XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuJiM0MztcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiBcdFxuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1VTQl9NREM4MDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGM4MDBfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfb3BlbiYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlYWQmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV93cml0ZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bWRjODAwX3VzYl9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC00ODIsMTMgJiM0Mzs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCiAJbXV0ZXhfbG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiAKLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhbXA7bWRjODAwX2NsYXNzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmFtcDtpbnRmLSZndDtkZXYsICYjMzQ7Tm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuJiMzNDspOwotCQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAltZGM4MDAtJmd0O2Rldj1kZXY7CiAJbWRjODAwLSZndDtvcGVuPTA7CiAKQEAgLTUyNyw2ICYjNDM7NTIwLDE2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJbWRjODAwLSZndDtzdGF0ZT1SRUFEWTsKIAogCW11dGV4X3VubG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpOwomIzQzOwlpZiAocmV0dmFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiYjMzQ7KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJbWRjODAwLSZndDtkZXYgPSBOVUxMOwomIzQzOwkJbWRjODAwLSZndDtzdGF0ZSA9IE5PVF9DT05ORUNURUQ7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KIAkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBldmFsdWF0ZSBhIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIExldCYjMzk7cyBkaXZlIHJpZ2h0IGluIGFuZCBsb29rIGF0IHRoZSBkaWZmLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpYCB3YXMgbW92ZWQgKmFmdGVyKiBgbXV0ZXhfdW5sb2NrKCZhbXA7bWRjODAwLSZndDtpb19sb2NrKWAgaW4gdGhlIGBtZGM4MDBfdXNiX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgb3JkZXJpbmcgb2YgbXV0ZXggb3BlcmF0aW9ucyBhbmQgcmVnaXN0cmF0aW9uIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyBob3cgYG1kYzgwMC5jYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGJvdGggYG1kYzgwMC5jYCBpdHNlbGYgYW5kIGl0cyBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZS4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFjY2Vzc2libGUgaXQgaXMgZm9yIHRlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCB0byBpdCB0aHJvdWdoIHN5emthbGxlciwgcGVyaGFwcyB2aWEgcmF3IFVTQiBnYWRnZXQgZW11bGF0aW9uLgoKSSYjMzk7bSBnb2luZyB0byBncmFiIHRob3NlIGZpbGVzIG5vdywgZWl0aGVyIHdpdGggYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIGFuZCBnZXQgdGhlIG5lZWRlZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTQl9NREM4MDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCKVx0XHQmIzQzOz0gc3RvcmFnZS9cbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ2LVxuZHJpdmVycy91c2IvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1VTQl9NREM4MDApXHQmIzQzOz0gaW1hZ2UvXG5kcml2ZXJzL3VzYi9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKVx0JiM0Mzs9IGltYWdlL1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWc9NT1jb21tZW50IFwmIzM0O1VTQiBJbWFnaW5nIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWctNi1cbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWc6Nzpjb25maWcgVVNCX01EQzgwMFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL01ha2VmaWxlLTUtXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfTURDODAwKVx0JiM0Mzs9IG1kYzgwMC5vXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19VU0JfTUlDUk9URUspXHQmIzQzOz0gbWljcm90ZWsub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgVVNCIEltYWdpbmcgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBVU0IgaW1hZ2luZyBkZXZpY2VzIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEkmIzM5O2xsIGJlIHF1aWNrbHkgYXNzZXNzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzLCB0aGUgc3ltYm9scyB1c2VkLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGludm9sdmVkLiBUaGlzIGluaXRpYWwgc2NhbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaGlnaC1sZXZlbCBkZXNpZ24gY2hvaWNlcyBtYWRlIGZvciB0aGVzZSBkcml2ZXJzOiBIb3cgYXJlIGRpZmZlcmVudCBVU0IgaW1hZ2luZyBkZXZpY2VzIHN1cHBvcnRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgbGF0ZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBJbWFnaW5nIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O1VTQiBJbWFnaW5nIGRldmljZXNcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRjb25maWcgVVNCX01EQzgwMFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEgc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHN0aWxsIGNhbWVyYSB0b1xuICAxMTpcdFx0ICB5b3VyIGNvbXB1dGVyJiMzOTtzIFVTQiBwb3J0LiBUaGlzIGRyaXZlciBjYW4gYmUgdXNlZCB3aXRoIGdwaG90byAwLjQuM1xuICAxMjpcdFx0ICBhbmQgaGlnaGVyIChsb29rIGF0IFx1MDAzY2h0dHA6Ly93d3cuZ3Bob3RvLm9yZy9cdTAwM2UpLlxuICAxMzpcdFx0ICBUbyB1c2UgaXQgY3JlYXRlIGEgZGV2aWNlIG5vZGUgd2l0aCBcJiMzNDtta25vZCAvZGV2L211c3RlayBjIDE4MCAzMlwmIzM0OyBhbmRcbiAgMTQ6XHRcdCAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWRjODAwLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBVU0JfTUlDUk9URUtcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvdGVrIFg2VVNCIHNjYW5uZXIgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBTQ1NJXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdGVrIFg2VVNCIGFuZFxuICAyNDpcdFx0ICBwb3NzaWJseSB0aGUgUGhhbnRvbSAzMzZDWCwgUGhhbnRvbSBDNiBhbmQgU2Nhbk1ha2VyIFY2VShTKUwuXG4gIDI1Olx0XHQgIFN1cHBvcnQgZm9yIGFueXRoaW5nIGJ1dCB0aGUgWDYgaXMgZXhwZXJpbWVudGFsLlxuICAyNjpcdFx0ICBQbGVhc2UgcmVwb3J0IGZhaWx1cmVzIGFuZCBzdWNjZXNzZXMuXG4gIDI3Olx0XHQgIFRoZSBzY2FubmVyIHdpbGwgYXBwZWFyIGFzIGEgc2NzaSBnZW5lcmljIGRldmljZSB0byB0aGUgcmVzdFxuICAyODpcdFx0ICBvZiB0aGUgc3lzdGVtLiBTY3NpIHN1cHBvcnQgaXMgcmVxdWlyZWQuXG4gIDI5Olx0XHQgIFRoaXMgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgY2FsbGVkIG1pY3JvdGVrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFVTQiBNREM4MDAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBVU0JfTURDODAwYCBpcyB0aGUga2V5IGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB3aXRoaW4gdGhlIFVTQiBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZXMuIEkmIzM5O2QgaGVhZCBzdHJhaWdodCBmb3IgdGhlIGNvcmU6IGVpdGhlciBgZHJpdmVycy91c2IvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL01ha2VmaWxlYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIG9iamVjdCBmaWxlIGluY2x1c2lvbiB3aWxsIHJlc2lkZS4gQnV0LCBnaXZlbiB0aGF0IHRoaXMgaXMgYSAqY29uZmlndXJhdGlvbiogaXRlbSwgcmF0aGVyIHRoYW4gYSBidWlsZCAqdGFyZ2V0KiwgbXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gcHJpb3JpdGl6ZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlyc3QuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGBjb25maWdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvciB0aGUgYE1EQzgwMGAgZGV2aWNlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGRyaXZlcnMvdXNiL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ltYWdlL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnPTExNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExNy1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTE4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbWRjODAwLmNgIGZvciBVU0IgSW5zaWdodCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYG1kYzgwMF91c2JfcHJvYmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXTigJlsbCB0ZWxsIG1lIGhvdyB0aGlzIHBhcnRpY3VsYXIgVVNCIGRldmljZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgaW5pdGlhbGl6YXRpb24gc3RlcHMgdGhleSYjMzk7cmUgdGFraW5nLCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZGV2aWNlIGRldGVjdGlvbiwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBNREM4MDAgdGhleSYjMzk7cmUgYWRkcmVzc2luZyByaWdodCBvZmYgdGhlIGJhdC4gQmV5b25kIHRoYXQgaW5pdGlhbCBwcm9iZSwgSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNraW0gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGBtZGM4MDBfdXNiX3Byb2JlYCwgYW5kIGxvb2sgZm9yIGFueSBpbnRlcmVzdGluZyBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjdXN0b20gZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0bz8gVGhlIGJpZ2dlciBwaWN0dXJlIG1hdHRlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueXRoaW5nIG5ldyBvciBkaWZmZXJlbnQgY29tcGFyZWQgdG8gcHJldmlvdXMgdmVyc2lvbnMuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2MDpcdFx0e1xuIDQ2MTpcdFx0XHRtZGM4MDAtXHUwMDNlZW5kcG9pbnRbaV09LTE7XG4gNDYyOlx0XHRcdGZvciAoaj0wOyBqXHUwMDNjNDsgaiYjNDM7JiM0MzspXG4gNDYzOlx0XHRcdHtcbiA0NjQ6XHRcdFx0XHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXHUwMDI2aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxuIDQ2NTpcdFx0XHRcdHtcbiA0NjY6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT1pbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA7XG4gNDY3Olx0XHRcdFx0XHRpZiAoaT09MSlcbiA0Njg6XHRcdFx0XHRcdHtcbiA0Njk6XHRcdFx0XHRcdFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iSW50ZXJ2YWw7XG4gNDcwOlx0XHRcdFx0XHR9XG4gNDcxOlx0XHRcdFx0fVxuIDQ3MjpcdFx0XHR9XG4gNDczOlx0XHRcdGlmIChtZGM4MDAtXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXG4gNDc0Olx0XHRcdHtcbiA0NzU6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIFdyb25nIEVuZHBvaW50cy5cXG5cJiMzNDspO1xuIDQ3NjpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ3NzpcdFx0XHR9XG4gNDc4Olx0XHR9XG4gNDc5Olx0XG4gNDgwOlx0XG4gNDgxOlx0XHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7Rm91bmQgTXVzdGVrIE1EQzgwMCBvbiBVU0IuXFxuXCYjMzQ7KTtcbiA0ODI6XHRcbiA0ODM6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0bWRjODAwLVx1MDAzZWRldj1kZXY7XG4gNDg2Olx0XHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIDQ4NzpcdFxuIDQ4ODpcdFx0LyogU2V0dXAgVVJCIFN0cnVjdHMgKi9cbiA0ODk6XHRcdHVzYl9maWxsX2ludF91cmIgKFxuIDQ5MDpcdFx0XHRtZGM4MDAtXHUwMDNlaXJxX3VyYixcbiA0OTE6XHRcdFx0bWRjODAwLVx1MDAzZWRldixcbiA0OTI6XHRcdFx0dXNiX3JjdmludHBpcGUgKG1kYzgwMC1cdTAwM2VkZXYsbWRjODAwLVx1MDAzZWVuZHBvaW50IFsxXSksXG4gNDkzOlx0XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiX2J1ZmZlcixcbiA0OTQ6XHRcdFx0OCxcbiA0OTU6XHRcdFx0bWRjODAwX3VzYl9pcnEsXG4gNDk2Olx0XHRcdG1kYzgwMCxcbiA0OTc6XHRcdFx0aXJxX2ludGVydmFsXG4gNDk4Olx0XHQpO1xuIDQ5OTpcdFxuIDUwMDpcdFx0dXNiX2ZpbGxfYnVsa191cmIgKFxuIDUwMTpcdFx0XHRtZGM4MDAtXHUwMDNld3JpdGVfdXJiLFxuIDUwMjpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDUwMzpcdFx0XHR1c2Jfc25kYnVsa3BpcGUgKG1kYzgwMC1cdTAwM2VkZXYsIG1kYzgwMC1cdTAwM2VlbmRwb2ludFswXSksXG4gNTA0Olx0XHRcdG1kYzgwMC1cdTAwM2V3cml0ZV91cmJfYnVmZmVyLFxuIDUwNTpcdFx0XHQ4LFxuIDUwNjpcdFx0XHRtZGM4MDBfdXNiX3dyaXRlX25vdGlmeSxcbiA1MDc6XHRcdFx0bWRjODAwXG4gNTA4Olx0XHQpO1xuIDUwOTpcdFxuIDUxMDpcdFx0dXNiX2ZpbGxfYnVsa191cmIgKFxuIDUxMTpcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLFxuIDUxMjpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDUxMzpcdFx0XHR1c2JfcmN2YnVsa3BpcGUgKG1kYzgwMC1cdTAwM2VkZXYsIG1kYzgwMC1cdTAwM2VlbmRwb2ludCBbM10pLFxuIDUxNDpcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiX2J1ZmZlcixcbiA1MTU6XHRcdFx0NjQsXG4gNTE2Olx0XHRcdG1kYzgwMF91c2JfZG93bmxvYWRfbm90aWZ5LFxuIDUxNzpcdFx0XHRtZGM4MDBcbiA1MTg6XHRcdCk7XG4gNTE5Olx0XG4gNTIwOlx0XHRtZGM4MDAtXHUwMDNlc3RhdGU9UkVBRFk7XG4gNTIxOlx0XG4gNTIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDUyMzpcdFxuIDUyNDpcdFx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuIDUyNTpcdFx0aWYgKHJldHZhbCkge1xuIDUyNjpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbiA1Mjc6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTI4Olx0XHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuIDUyOTpcdFx0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuIDUzMDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDUzMTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1MzI6XHRcdH1cbiA1MzM6XHRcdFxuIDUzNDpcdFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIDUzNTpcdFx0cmV0dXJuIDA7XG4gNTM2Olx0fVxuIDUzNzpcdFxuIDUzODpcdFxuIDUzOTpcdC8qXG4gNTQwOlx0ICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKVxuIDU0MTpcdCAqL1xuIDU0MjpcdHN0YXRpYyB2b2lkIG1kYzgwMF91c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gNTQzOlx0e1xuIDU0NDpcdFx0c3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIDU0NTpcdFxuIDU0NjpcdFx0ZGV2X2RiZyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7KCVzKSBjYWxsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiA1NDc6XHRcbiA1NDg6XHRcdGlmIChtZGM4MDApIHtcbiA1NDk6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njg5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbWRjODAwLmNgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgaW5pdGlhbCBzbmlwcGV0cyBvZiBgbWRjODAwLmNgLCBidXQgdG8gKnJlYWxseSogZ3Jhc3AgdGhpcyBkcml2ZXImIzM5O3MgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgdGhpbmcuIFRoZSBwYXJ0aWFsIHZpZXdzIGFyZSBoZWxwZnVsIGZvciBjb250ZXh0LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZHJpdmVyIGxpZmVjeWNsZSwgdGhlIGludGVycnVwdCBoYW5kbGluZywgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9ucyDigJMgYWxsIG9mIHRoYXQgcmVxdWlyZXMgYSBjb21wcmVoZW5zaXZlIHZpZXcuIEkgY2FuIHByb2JhYmx5IGluZmVyIGEgbG90IGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCBidXQgdGhlIG51YW5jZXMgYXJlIG9mdGVuIGhpZGRlbiB1bnRpbCB0aGUgY29kZSBpcyBmdWxseSB2aXNpYmxlLiBXaGF0IGFyZSB0aGUgc3VidGxlIGludGVyYWN0aW9ucz8gSG93IGRvZXMgZXJyb3IgaGFuZGxpbmcgd29yayBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8/IEdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbnkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9ucywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBzdWdnZXN0IGltcHJvdmVtZW50cyB0byB0aGUgYXJjaGl0ZWN0dXJlIHdpdGggY29uZmlkZW5jZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBjb3B5cmlnaHQgKEMpIDE5OTkvMjAwMCBieSBIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVxuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdFxuICAgNzpcdC8qXG4gICA4Olx0ICpcdFVTQi1LZXJuZWwgRHJpdmVyIGZvciB0aGUgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYVxuICAgOTpcdCAqXHQoYykgMTk5OS8yMDAwIEhlbm5pbmcgWmFiZWwgXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXHUwMDNlXG4gIDEwOlx0ICpcbiAgMTE6XHQgKlxuICAxMjpcdCAqIFRoZSBkcml2ZXIgYnJpbmdzIHRoZSBVU0IgZnVuY3Rpb25zIG9mIHRoZSBNREM4MDAgdG8gTGludXguXG4gIDEzOlx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcbiAgMTQ6XHQgKiB0byB0aGUgS2VybmVsIE5vZGUuXG4gIDE1Olx0ICogVGhlIERyaXZlciB1c2VzIGEgbWlzYyBkZXZpY2UgTm9kZS4gQ3JlYXRlIGl0IHdpdGggOlxuICAxNjpcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXG4gIDE3Olx0ICpcbiAgMTg6XHQgKiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgb25lIGNhbWVyYS5cbiAgMTk6XHQgKiBcbiAgMjA6XHQgKiBGaXg6IG1kYzgwMCB1c2VkIHNsZWVwX29uIGFuZCBzbGVwdCB3aXRoIGlvX2xvY2sgaGVsZC5cbiAgMjE6XHQgKiBDb252ZXJ0ZWQgc2xlZXBfb24gdG8gd2FpdHF1ZXVlcyB3aXRoIHNjaGVkdWxlX3RpbWVvdXQgYW5kIG1hZGUgaW9fbG9ja1xuICAyMjpcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cbiAgMjM6XHQgKiBieSBPbGl2ZXIgTmV1a3VtIFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVx1MDAzZVxuICAyNDpcdCAqICgwMi8xMi8yMDAxKVxuICAyNTpcdCAqIFxuICAyNjpcdCAqIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuXG4gIDI3Olx0ICogKDA4LzA0LzIwMDEpIGdiXG4gIDI4Olx0ICpcbiAgMjk6XHQgKiB2ZXJzaW9uIDAuNy41XG4gIDMwOlx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cbiAgMzE6XHQgKiBUaGFua3MgdG8gT2xpdmVyIE5ldWt1bSBcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcdTAwM2Ugd2hvIFxuICAzMjpcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cbiAgMzM6XHQgKiAoMzAvMTAvMjAwMClcbiAgMzQ6XHQgKlxuICAzNTpcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cdTAwM2VkZXYgYmVmb3JlIHN1Ym1pdHRpbmcgdXJiLlxuICAzNjpcdCAqIGJ5IEdyZWcgS0ggXHUwMDNjZ3JlZ0Brcm9haC5jb21cdTAwM2VcbiAgMzc6XHQgKiAoMTMvMTAvMjAwMClcbiAgMzg6XHQgKlxuICAzOTpcdCAqIHZlcnNpb24gMC43LjNcbiAgNDA6XHQgKiBidWdmaXggOiBUaGUgbWRjODAwLVx1MDAzZXN0YXRlIGZpZWxkIGdldHMgc2V0IHRvIFJFQURZIGFmdGVyIHRoZVxuICA0MTpcdCAqIGRpc2Nvbm5lY3QgZnVuY3Rpb24gc2V0cyBpdCB0byBOT1RfQ09OTkVDVEVELiBUaGlzIG1ha2VzIHRoZVxuICA0MjpcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXG4gIDQzOlx0ICogaGFuZyB1cHMuXG4gIDQ0Olx0ICpcbiAgNDU6XHQgKiB2ZXJzaW9uIDAuNy4xXG4gIDQ2Olx0ICogTU9EX0lOQyBhbmQgTU9EX0RFQyBhcmUgY2hhbmdlZCBpbiB1c2JfcHJvYmUgdG8gcHJldmVudCBsb2FkL3VubG9hZFxuICA0NzpcdCAqIHByb2JsZW1zIHdoZW4gY29tcGlsZWQgYXMgTW9kdWxlLlxuICA0ODpcdCAqICgwNC8wNC8yMDAwKVxuICA0OTpcdCAqXG4gIDUwOlx0ICogVGhlIG1kYzgwMCBkcml2ZXIgZ2V0cyBhc3NpZ25lZCB0aGUgVVNCIE1pbm9yIDMyLTQ3LiBUaGUgUmVnaXN0cmF0aW9uXG4gIDUxOlx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cbiAgNTI6XHQgKiAoMjYvMDMvMjAwMClcbiAgNTM6XHQgKlxuICA1NDpcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cbiAgNTU6XHQgKiAoMDEvMDMvMjAwMClcbiAgNTY6XHQgKlxuICA1NzpcdCAqIHZlcnNpb24gMC43LjBcbiAgNTg6XHQgKiBSZXdyaXRlIG9mIHRoZSBkcml2ZXIgOiBUaGUgZHJpdmVyIG5vdyB1c2VzIFVSQiYjMzk7cy4gVGhlIG9sZCBzdHVmZlxuICA1OTpcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXG4gIDYwOlx0ICpcbiAgNjE6XHQgKiB2ZXJzaW9uIDAuNi4wXG4gIDYyOlx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXG4gIDYzOlx0ICogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkcml2ZXIuIEEgc3BlY2lhbCBleGVjdXRlQ29tbWFuZCBmdW5jdGlvblxuICA2NDpcdCAqIGZvciB0aGlzIGRyaXZlciBpcyBpbmNsdWRlZCB0byBncGhvdG8uXG4gIDY1Olx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxuICA2NjpcdCAqIEVpdGhlciB3aXRoIHRoZSBkZXYtXHUwMDNlYnVzLVx1MDAzZW9wcy1cdTAwM2VidWxrLi4uIG9yIHdpdGggY2FsbGJhY2sgZnVuY3Rpb24uXG4gIDY3Olx0ICogKDA5LzExLzE5OTkpXG4gIDY4Olx0ICpcbiAgNjk6XHQgKiB2ZXJzaW9uIDAuNS4wOlxuICA3MDpcdCAqIGZpcnN0IFZlcnNpb24gdGhhdCBnZXRzIGEgdmVyc2lvbiBudW1iZXIuIE1vc3Qgb2YgdGhlIG5lZWRlZFxuICA3MTpcdCAqIGZ1bmN0aW9ucyB3b3JrLlxuICA3MjpcdCAqICgyMC8xMC8xOTk5KVxuICA3MzpcdCAqL1xuICA3NDpcdFxuICA3NTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDc2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAgNzc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gIDc4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICA3OTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4gIDgwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gIDgxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDgyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDgzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgODQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAgODU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gIDg2Olx0XG4gIDg3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiLmhcdTAwM2VcbiAgODg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDg5Olx0XG4gIDkwOlx0LypcbiAgOTE6XHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXG4gIDkyOlx0ICovXG4gIDkzOlx0I2RlZmluZSBEUklWRVJfVkVSU0lPTiBcJiMzNDt2MC43LjUgKDMwLzEwLzIwMDApXCYjMzQ7XG4gIDk0Olx0I2RlZmluZSBEUklWRVJfQVVUSE9SIFwmIzM0O0hlbm5pbmcgWmFiZWwgXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXHUwMDNlXCYjMzQ7XG4gIDk1Olx0I2RlZmluZSBEUklWRVJfREVTQyBcJiMzNDtVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXCYjMzQ7XG4gIDk2Olx0XG4gIDk3Olx0LyogVmVuZG9yIGFuZCBQcm9kdWN0IEluZm9ybWF0aW9uICovXG4gIDk4Olx0I2RlZmluZSBNREM4MDBfVkVORE9SX0lEIFx0MHgwNTVmXG4gIDk5Olx0I2RlZmluZSBNREM4MDBfUFJPRFVDVF9JRFx0MHhhODAwXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRpdmluZyBpbnRvIHRoZSBtZGM4MDAuYyBVU0IgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGJldHRlci4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBVU0IgaW1hZ2UgY2xhc3MgYW5kIGhvdyBpdCBnZW5lcmFsbHkgd29ya3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc2VlaW5nIGhvdyB0aGUgYG1kYzgwMGAgaW1wbGVtZW50YXRpb24gZGV2aWF0ZXMgZnJvbSB0aGUgc3RhbmRhcmQuIFdoYXQgYXJlIGl0cyBzcGVjaWZpYyBxdWlya3MgYW5kIG9wdGltaXphdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgb3IgcG90ZW50aWFsIGJ1Z3MgbHVya2luZz8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgdGhlIGVuZHBvaW50cyBmaXJzdCBhbmQgdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZW4gaW52ZXN0aWdhdGUgdGhlIHVudXN1YWwgYXNwZWN0cyBvZiB0aGUgZGV2aWNlJiMzOTtzIGNvbnRyb2wgaW50ZXJmYWNlLCBhbmQgZmluYWxseSB0cnkgYW5kIGlkZW50aWZ5IGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciByZWFkcyBvciB3cml0ZXMuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGUgZGV2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAxO1xuIDQwMTpcdFx0d2FrZV91cCAoXHUwMDI2bWRjODAwLVx1MDAzZWRvd25sb2FkX3dhaXQpO1xuIDQwMjpcdH1cbiA0MDM6XHRcbiA0MDQ6XHRcbiA0MDU6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gNDA2Olx0XHRQcm9iaW5nIGZvciB0aGUgQ2FtZXJhXG4gNDA3Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA0MDg6XHRcbiA0MDk6XHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWRjODAwX3VzYl9kcml2ZXI7XG4gNDEwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XG4gNDExOlx0c3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHtcbiA0MTI6XHRcdC5uYW1lID1cdFx0XCYjMzQ7bWRjODAwJWRcJiMzNDssXG4gNDEzOlx0XHQuZm9wcyA9XHRcdFx1MDAyNm1kYzgwMF9kZXZpY2Vfb3BzLFxuIDQxNDpcdFx0Lm1pbm9yX2Jhc2UgPVx0TURDODAwX0RFVklDRV9NSU5PUl9CQVNFLFxuIDQxNTpcdH07XG4gNDE2Olx0XG4gNDE3Olx0XG4gNDE4Olx0LypcbiA0MTk6XHQgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXNcbiA0MjA6XHQgKi9cbiA0MjE6XHRzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIDQyMjpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0aW50IGksajtcbiA0MjU6XHRcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGZfZGVzYztcbiA0MjY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTtcbiA0Mjc6XHRcdGludCBpcnFfaW50ZXJ2YWw9MDtcbiA0Mjg6XHRcdGludCByZXR2YWw7XG4gNDI5Olx0XG4gNDMwOlx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZC5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiA0MzE6XHRcbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChtZGM4MDAtXHUwMDNlZGV2ICE9IE5VTEwpXG4gNDM0Olx0XHR7XG4gNDM1Olx0XHRcdGRldl93YXJuKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuIDQzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0Mzc6XHRcdH1cbiA0Mzg6XHRcbiA0Mzk6XHRcdGlmIChkZXYtXHUwMDNlZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSlcbiA0NDA6XHRcdHtcbiA0NDE6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldixcbiA0NDI6XHRcdFx0XHRcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiA0NDM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpbnRmX2Rlc2MgPSBpbnRmLVx1MDAzZWN1cl9hbHRzZXR0aW5nO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKFxuIDQ0ODpcdFx0XHRcdCggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4ZmYgKVxuIDQ0OTpcdFx0XHR8fFx0KCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCApXG4gNDUwOlx0XHRcdHx8ICggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKVxuIDQ1MTpcdFx0XHR8fCAoIGludGZfZGVzYy1cdTAwM2VkZXNjLmJOdW1FbmRwb2ludHMgIT0gNClcbiA0NTI6XHRcdClcbiA0NTM6XHRcdHtcbiA0NTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7cHJvYmUgZmFpbHMgLVx1MDAzZSB3cm9uZyBJbnRlcmZhY2VcXG5cJiMzNDspO1xuIDQ1NTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NTY6XHRcdH1cbiA0NTc6XHRcbiA0NTg6XHRcdC8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi9cbiA0NTk6XHRcdGZvciAoaT0wOyBpXHUwMDNjNDsgaSYjNDM7JiM0MzspXG4gNDYwOlx0XHR7XG4gNDYxOlx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT0tMTtcbiA0NjI6XHRcdFx0Zm9yIChqPTA7IGpcdTAwM2M0OyBqJiM0MzsmIzQzOylcbiA0NjM6XHRcdFx0e1xuIDQ2NDpcdFx0XHRcdGlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzIChcdTAwMjZpbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXHUwMDI2bWRjODAwX2VkIFtpXSkpXG4gNDY1Olx0XHRcdFx0e1xuIDQ2NjpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcbiA0Njc6XHRcdFx0XHRcdGlmIChpPT0xKVxuIDQ2ODpcdFx0XHRcdFx0e1xuIDQ2OTpcdFx0XHRcdFx0XHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJJbnRlcnZhbDtcbiA0NzA6XHRcdFx0XHRcdH1cbiA0NzE6XHRcdFx0XHR9XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcbiA0NzQ6XHRcdFx0e1xuIDQ3NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2UgV3JvbmcgRW5kcG9pbnRzLlxcblwmIzM0Oyk7XG4gNDc2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcdH1cbiA0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1EQzgwMCBVU0IgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBVU0JfTURDODAwYCBkcml2ZXIgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBnYWRnZXQgZW11bGF0aW9uIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBnb29kIG5ld3MgaXMsIGl0IHNlZW1zIGxpa2UgYFVTQl9NREM4MDBgICppcyogcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIGV4Y2VsbGVudC4gU3l6a2FsbGVyIGxldmVyYWdlcyB0aGUgVVNCIFJhdyBHYWRnZXQgYW5kIER1bW15IEhDRCB0byBlbXVsYXRlIHRoZXNlIGRldmljZXMsIGFuZCB0YXJnZXRzIGRyaXZlcnMgd2l0aCBwcm9iZXMsIGZ1bmN0aW9uIHBvaW50ZXJzIChmb3BzKSwgYW5kIHNvIG9uLCB3aGljaCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIHN5emthbGxlciB1dGlsaXplcyBwcmltaXRpdmVzIGxpa2UgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfdXNiX2NvbnRyb2xfaW9gIHRvIGludGVyYWN0IHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMsIHdoaWNoIGlzIGtleS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBtZGM4MDBfdXNiX3Byb2JlYC4gVGhlIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhpcyBmdW5jdGlvbiBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBjYWxsZWQgYHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpYCAqYmVmb3JlKiBpbml0aWFsaXppbmcgVVJCIHN0cnVjdHMgYW5kIHNldHRpbmcgdGhlIGBtZGM4MDAtJmd0O2RldmAgYW5kIGBtZGM4MDAtJmd0O3N0YXRlYCBtZW1iZXJzLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gSWYsIGZvciBpbnN0YW5jZSwgYG9wZW5gLCBgcmVhZGAsIG9yIGB3cml0ZWAgd2VyZSBjYWxsZWQgKmR1cmluZyogdGhpcyB2dWxuZXJhYmxlIHBlcmlvZCwgb3IgaWYgdGhlIHJlZ2lzdHJhdGlvbiBpdHNlbGYgZmFpbGVkLCB0aGUgc3lzdGVtIGNvdWxkIGVudGVyIGFuIHVuZGVmaW5lZCBzdGF0ZS4gVGhlIHBhdGNoJiMzOTtzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBgdXNiX3JlZ2lzdGVyX2RldmAgY2FsbCB0byB0aGUgKmVuZCogb2YgYG1kYzgwMF91c2JfcHJvYmVgLCBhZnRlciBhbGwgdGhlIFVSQnMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgbXV0ZXggaXMgdW5sb2NrZWQuIENydWNpYWxseSwgaXQgYWxzbyBoYW5kbGVzIHRoZSBlcnJvciBjYXNlIHdoZW4gYHVzYl9yZWdpc3Rlcl9kZXZgIGZhaWxzLCByZXNldHRpbmcgYG1kYzgwMC0mZ3Q7ZGV2YCBhbmQgYG1kYzgwMC0mZ3Q7c3RhdGVgIHRvIGluZGljYXRlIHRoYXQgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLgoKVG8gZ2V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIGVudGlyZSBgbWRjODAwLmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgYWxsIHRoZSBzeW1ib2xzLCBmdW5jdGlvbiBwb2ludGVycywgYW5kIGZpbGUgb3BlcmF0aW9ucyAoYGZvcHNgKSBhc3NvY2lhdGVkIHdpdGggdGhlIGRyaXZlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHQgKiBEaXNjb25uZWN0IFVTQiBkZXZpY2UgKG1heWJlIHRoZSBNREM4MDApXG4gNTQxOlx0ICovXG4gNTQyOlx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1kYzgwMCkge1xuIDU0OTpcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNTUwOlx0XHRcdFx0cmV0dXJuO1xuIDU1MTpcdFxuIDU1MjpcdFx0XHR1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbiA1NTM6XHRcbiA1NTQ6XHRcdFx0LyogbXVzdCBiZSB1bmRlciBsb2NrIHRvIG1ha2Ugc3VyZSBubyBVUkJcbiA1NTU6XHRcdFx0ICAgaXMgc3VibWl0dGVkIGFmdGVyIHVzYl9raWxsX3VyYigpICovXG4gNTU2Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDU1NzpcdFx0XHRtZGM4MDAtXHUwMDNlc3RhdGU9Tk9UX0NPTk5FQ1RFRDtcbiA1NTg6XHRcbiA1NTk6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2VpcnFfdXJiKTtcbiA1NjA6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2V3cml0ZV91cmIpO1xuIDU2MTpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYik7XG4gNTYyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuIDU2NTpcdFx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpO1xuIDU2NjpcdFx0fVxuIDU2NzpcdFx0ZGV2X2luZm8oXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O011c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxcblwmIzM0Oyk7XG4gNTY4Olx0fVxuIDU2OTpcdFxuIDU3MDpcdFxuIDU3MTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiA1NzI6XHRcdFRoZSBNaXNjIGRldmljZSBQYXJ0IChmaWxlX29wZXJhdGlvbnMpXG4gNTczOlx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA1NzQ6XHRcbiA1NzU6XHQvKlxuIDU3NjpcdCAqIFRoaXMgRnVuY3Rpb24gY2FsYyB0aGUgQW5zd2Vyc2l6ZSBmb3IgYSBjb21tYW5kLlxuIDU3NzpcdCAqL1xuIDU3ODpcdHN0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZClcbiA1Nzk6XHR7XG4gNTgwOlx0XHRzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBjb21tYW5kKVxuIDU4MTpcdFx0e1xuIDU4MjpcdFx0XHRjYXNlIDB4MmE6XG4gNTgzOlx0XHRcdGNhc2UgMHg0OTpcbiA1ODQ6XHRcdFx0Y2FzZSAweDUxOlxuIDU4NTpcdFx0XHRjYXNlIDB4MGQ6XG4gNTg2Olx0XHRcdGNhc2UgMHgyMDpcbiA1ODc6XHRcdFx0Y2FzZSAweDA3OlxuIDU4ODpcdFx0XHRjYXNlIDB4MDE6XG4gNTg5Olx0XHRcdGNhc2UgMHgyNTpcbiA1OTA6XHRcdFx0Y2FzZSAweDAwOlxuIDU5MTpcdFx0XHRcdHJldHVybiA4O1xuIDU5MjpcdFxuIDU5MzpcdFx0XHRjYXNlIDB4MDU6XG4gNTk0Olx0XHRcdGNhc2UgMHgzZTpcbiA1OTU6XHRcdFx0XHRyZXR1cm4gbWRjODAwLVx1MDAzZXBpY19sZW47XG4gNTk2Olx0XG4gNTk3Olx0XHRcdGNhc2UgMHgwOTpcbiA1OTg6XHRcdFx0XHRyZXR1cm4gNDA5NjtcbiA1OTk6XHRcbiA2MDA6XHRcdFx0ZGVmYXVsdDpcbiA2MDE6XHRcdFx0XHRyZXR1cm4gMDtcbiA2MDI6XHRcdH1cbiA2MDM6XHR9XG4gNjA0Olx0XG4gNjA1Olx0XG4gNjA2Olx0LypcbiA2MDc6XHQgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLlxuIDYwODpcdCAqL1xuIDYwOTpcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9vcGVuIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA2MTA6XHR7XG4gNjExOlx0XHRpbnQgcmV0dmFsPTA7XG4gNjEyOlx0XHRpbnQgZXJybj0wO1xuIDYxMzpcdFxuIDYxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjE1Olx0XHRcbiA2MTY6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcbiA2MTc6XHRcdHtcbiA2MTg6XHRcdFx0ZXJybj0tRUJVU1k7XG4gNjE5Olx0XHRcdGdvdG8gZXJyb3Jfb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBVU0IgRHJpdmVyIGZvciB0aGUgTURDODAwIENhbWVyYSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBtZGM4MDAuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3VzYi9pbWFnZWAgZGlyZWN0b3J5LiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGluaXRpYWwgcGFydHMgb2YgdGhlIGZ1bmN0aW9uIEkgd2FzIGV4YW1pbmluZy4gQnV0LCBhcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IFVTQiBkZXZpY2UgZHJpdmVycywgSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY2FuIHRoZSByZXN0IG9mIHRoaXMgYG1kYzgwMC5jYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgcm91dGluZXMsIHVuZGVyc3RhbmQgZGF0YSBmbG93LCBhbmQgbWF5YmUgZXZlbiBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiwgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgYW5kIGltYWdlIGNhcHR1cmUgcHJvY2Vzc2VzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlci4gRnJvbSB0aGVyZSwgSSBjYW4gY29ubmVjdCB0aGUgZG90cyB3aXRoIHRoZSB3aWRlciBVU0Igc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0fVxuIDYyMTpcdFx0aWYgKG1kYzgwMC1cdTAwM2VvcGVuKVxuIDYyMjpcdFx0e1xuIDYyMzpcdFx0XHRlcnJuPS1FQlVTWTtcbiA2MjQ6XHRcdFx0Z290byBlcnJvcl9vdXQ7XG4gNjI1Olx0XHR9XG4gNjI2Olx0XG4gNjI3Olx0XHRtZGM4MDAtXHUwMDNlaW5fY291bnQ9MDtcbiA2Mjg6XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA2Mjk6XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNjMwOlx0XHRtZGM4MDAtXHUwMDNlcGljX2luZGV4PTA7XG4gNjMxOlx0XHRtZGM4MDAtXHUwMDNlcGljX2xlbj0tMTtcbiA2MzI6XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XG4gNjMzOlx0XG4gNjM0Olx0XHRtZGM4MDAtXHUwMDNlY2FtZXJhX2J1c3k9MDtcbiA2MzU6XHRcdG1kYzgwMC1cdTAwM2VjYW1lcmFfcmVxdWVzdF9yZWFkeT0wO1xuIDYzNjpcdFxuIDYzNzpcdFx0bWRjODAwLVx1MDAzZWlycV91cmItXHUwMDNlZGV2ID0gbWRjODAwLVx1MDAzZWRldjtcbiA2Mzg6XHRcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtXHUwMDNlaXJxX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNjM5Olx0XHRpZiAocmV0dmFsKSB7XG4gNjQwOlx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNjQxOlx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXG5cJiMzNDssIHJldHZhbCk7XG4gNjQyOlx0XHRcdGVycm4gPSAtRUlPO1xuIDY0MzpcdFx0XHRnb3RvIGVycm9yX291dDtcbiA2NDQ6XHRcdH1cbiA2NDU6XHRcbiA2NDY6XHRcdG1kYzgwMC1cdTAwM2VvcGVuPTE7XG4gNjQ3Olx0XHRkZXZfZGJnKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxuXCYjMzQ7KTtcbiA2NDg6XHRcbiA2NDk6XHRlcnJvcl9vdXQ6XG4gNjUwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY1MTpcdFx0cmV0dXJuIGVycm47XG4gNjUyOlx0fVxuIDY1MzpcdFxuIDY1NDpcdFxuIDY1NTpcdC8qXG4gNjU2Olx0ICogQ2xvc2UgdGhlIENhbWVyYSBhbmQgcmVsZWFzZSBNZW1vcnlcbiA2NTc6XHQgKi9cbiA2NTg6XHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2VfcmVsZWFzZSAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNjU5Olx0e1xuIDY2MDpcdFx0aW50IHJldHZhbD0wO1xuIDY2MTpcdFxuIDY2MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjYzOlx0XHRpZiAobWRjODAwLVx1MDAzZW9wZW4gXHUwMDI2XHUwMDI2IChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXG4gNjY0Olx0XHR7XG4gNjY1Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNlaXJxX3VyYik7XG4gNjY2Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNld3JpdGVfdXJiKTtcbiA2Njc6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDY2ODpcdFx0XHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIDY2OTpcdFx0fVxuIDY3MDpcdFx0ZWxzZVxuIDY3MTpcdFx0e1xuIDY3MjpcdFx0XHRyZXR2YWw9LUVJTztcbiA2NzM6XHRcdH1cbiA2NzQ6XHRcbiA2NzU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjc2Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDY3NzpcdH1cbiA2Nzg6XHRcbiA2Nzk6XHRcbiA2ODA6XHQvKlxuIDY4MTpcdCAqIFRoZSBEZXZpY2UgcmVhZCBjYWxsYmFjayBGdW5jdGlvblxuIDY4MjpcdCAqL1xuIDY4MzpcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHNpemVfdCBsZWZ0PWxlbiwgc3RzPWxlbjsgLyogc2luZ2xlIHRyYW5zZmVyIHNpemUgKi9cbiA2ODY6XHRcdGNoYXIgX191c2VyICpwdHIgPSBidWY7XG4gNjg3Olx0XHRpbnQgcmV0dmFsO1xuIDY4ODpcdFxuIDY4OTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjkwOlx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNjkxOlx0XHR7XG4gNjkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjk0Olx0XHR9XG4gNjk1Olx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IFdPUktJTkcpXG4gNjk2Olx0XHR7XG4gNjk3Olx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7bWRjODAwOiBJbGxlZ2FsIFN0YXRlIFxcXCYjMzQ7d29ya2luZ1xcXCYjMzQ7XCYjMzQ7XG4gNjk4Olx0XHRcdCAgICAgICBcJiMzNDtyZWFjaGVkIGR1cmluZyByZWFkID8hXFxuXCYjMzQ7KTtcbiA2OTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3MDA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3MDE6XHRcdH1cbiA3MDI6XHRcdGlmICghbWRjODAwLVx1MDAzZW9wZW4pXG4gNzAzOlx0XHR7XG4gNzA0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzA1Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzA2Olx0XHR9XG4gNzA3Olx0XG4gNzA4Olx0XHR3aGlsZSAobGVmdClcbiA3MDk6XHRcdHtcbiA3MTA6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgXG4gNzExOlx0XHRcdHtcbiA3MTI6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDcxMzpcdFx0XHRcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdHN0cz1sZWZ0IFx1MDAzZSAobWRjODAwLVx1MDAzZW91dF9jb3VudC1tZGM4MDAtXHUwMDNlb3V0X3B0cik/bWRjODAwLVx1MDAzZW91dF9jb3VudC1tZGM4MDAtXHUwMDNlb3V0X3B0cjpsZWZ0O1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAoc3RzIFx1MDAzYz0gMClcbiA3MTk6XHRcdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRGlnaXRhbCBMYW5kc2NhcGU6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55IGRlZXAgYW5hbHlzaXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBjbGVhciBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpCZWZvcmUgSSBnZXQgdG9vIGludm9sdmVkIGluIHNwZWNpZmljcywgaXQmIzM5O3MgcHJ1ZGVudCB0byBjb25kdWN0IGEgc3dlZXAgb2YgdGhlIGVudGlyZSBmaWxlKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcG90ZW50aWFsIHJlZCBmbGFncyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGxhcmdlciBjb250ZXh0IGlzIGNydWNpYWwgdG8gY29udGV4dHVhbGl6aW5nIGRldGFpbHMuIFRoaXMgaW5pdGlhbCBwYXNzIHdpbGwgaW5mb3JtIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3IgYSBtZWFuaW5nZnVsIGJyZWFrZG93biBhbmQgYXNzZXNzbWVudCwgYW5kIHdoZXRoZXIgdG8gcmVmaW5lIG15IGFwcHJvYWNoIHRvIHRoZSBkYXRhLiBObyBhc3N1bXB0aW9ucywganVzdCBhIG1ldGhvZGljYWwgc2NvcGluZyBleGVyY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzIwOlx0XHRcdFx0LyogVG9vIGxlc3MgRGF0YSBpbiBidWZmZXIgKi9cbiA3MjE6XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IERPV05MT0FEKVxuIDcyMjpcdFx0XHRcdHtcbiA3MjM6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA3MjQ6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNzI1Olx0XG4gNzI2Olx0XHRcdFx0XHQvKiBEb3dubG9hZCAtXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXG4gNzI3Olx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNzI4Olx0XHRcdFx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNzI5Olx0XHRcdFx0XHRpZiAocmV0dmFsKSB7XG4gNzMwOlx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzMxOlx0XHRcdFx0XHRcdFx0XCYjMzQ7Q2FuJiMzOTt0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXCYjMzQ7XG4gNzMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7KHJldHZhbD0laSlcXG5cJiMzNDssIHJldHZhbCk7XG4gNzMzOlx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzM0Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3MzU6XHRcdFx0XHRcdH1cbiA3MzY6XHRcdFx0XHRcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCxcbiA3Mzc6XHRcdFx0XHRcdCAgICAgbWRjODAwLVx1MDAzZWRvd25sb2FkZWQsXG4gNzM4Olx0XHRcdFx0XHQgICAgIG1zZWNzX3RvX2ppZmZpZXMoVE9fRE9XTkxPQURfR0VUX1JFQURZKSk7XG4gNzM5Olx0XHRcdFx0XHRpZiAoIXJldHZhbClcbiA3NDA6XHRcdFx0XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDc0MTpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAwO1xuIDc0MjpcdFx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmItXHUwMDNlc3RhdHVzICE9IDApXG4gNzQzOlx0XHRcdFx0XHR7XG4gNzQ0Olx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzQ1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyBcJiMzNDtcbiA3NDY6XHRcdFx0XHRcdFx0XHRcJiMzNDsoc3RhdHVzPSVpKVxcblwmIzM0OyxcbiA3NDc6XHRcdFx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZXN0YXR1cyk7XG4gNzQ4Olx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzQ5Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3NTA6XHRcdFx0XHRcdH1cbiA3NTE6XHRcdFx0XHR9XG4gNzUyOlx0XHRcdFx0ZWxzZVxuIDc1MzpcdFx0XHRcdHtcbiA3NTQ6XHRcdFx0XHRcdC8qIE5vIG1vcmUgYnl0ZXMgLVx1MDAzZSB0aGF0JiMzOTtzIGFuIGVycm9yKi9cbiA3NTU6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA3NTc6XHRcdFx0XHR9XG4gNzU4Olx0XHRcdH1cbiA3NTk6XHRcdFx0ZWxzZVxuIDc2MDpcdFx0XHR7XG4gNzYxOlx0XHRcdFx0LyogQ29weSBCeXRlcyAqL1xuIDc2MjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcdTAwMjZtZGM4MDAtXHUwMDNlb3V0IFttZGM4MDAtXHUwMDNlb3V0X3B0cl0sXG4gNzYzOlx0XHRcdFx0XHRcdFx0c3RzKSkge1xuIDc2NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3NjU6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc2NjpcdFx0XHRcdH1cbiA3Njc6XHRcdFx0XHRwdHImIzQzOz1zdHM7XG4gNzY4Olx0XHRcdFx0bGVmdC09c3RzO1xuIDc2OTpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyJiM0Mzs9c3RzO1xuIDc3MDpcdFx0XHR9XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDc3NDpcdFx0cmV0dXJuIGxlbi1sZWZ0O1xuIDc3NTpcdH1cbiA3NzY6XHRcbiA3Nzc6XHRcbiA3Nzg6XHQvKlxuIDc3OTpcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cbiA3ODA6XHQgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLlxuIDc4MTpcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcbiA3ODI6XHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cbiA3ODM6XHQgKi9cbiA3ODQ6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4gNzg1Olx0e1xuIDc4NjpcdFx0c2l6ZV90IGk9MDtcbiA3ODc6XHRcdGludCByZXR2YWw7XG4gNzg4Olx0XG4gNzg5Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTA6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gUkVBRFkpXG4gNzkxOlx0XHR7XG4gNzkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzk0Olx0XHR9XG4gNzk1Olx0XHRpZiAoIW1kYzgwMC1cdTAwM2VvcGVuIClcbiA3OTY6XHRcdHtcbiA3OTc6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNREM4MDAgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVVNCX01EQzgwMGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnYCwgaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gdGhlIGBVU0JgIGFuZCBgVVNCX1NVUFBPUlRgIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyBkZXZpY2UgaXMgVVNCLWJhc2VkIGFuZCB1c2VzIHRoYXQgc3VwcG9ydCwgd2hpY2ggZ2l2ZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgcmVhY2hhYmxlIGFuZCBmdXp6LXdvcnRoeT8gTGV0JiMzOTtzIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgZW1waGFzaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLiBTZWN0aW9uIDMgcmVpbmZvcmNlcyB0aGlzLCBoaWdobGlnaHRpbmcgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzIGxpa2UgVVNCIGdhZGdldC4gU2VjdGlvbiA0IHRoZW4gcG9pbnRzIHRvIHRhcmdldGluZyBzcGVjaWZpYyBsb2dpYyBhbmQgZW50cnlwb2ludHMuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgbW9kaWZpZXMgYG1kYzgwMF91c2JfcHJvYmVgLCB3aGljaCBsb29rcyBsaWtlIHRoZSBpbml0aWFsIHByb2JlIGZ1bmN0aW9uLiBPdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgYG1kYzgwMGAgZHJpdmVyIGFyZSBhbHNvIGltcG9ydGFudDogYG1kYzgwMF9kZXZpY2Vfb3BlbmAsIGBtZGM4MDBfZGV2aWNlX3JlbGVhc2VgLCBgbWRjODAwX2RldmljZV9yZWFkYCwgYG1kYzgwMF9kZXZpY2Vfd3JpdGVgLCBhbmQgYG1kYzgwMF91c2JfZGlzY29ubmVjdGAuIFNpbmNlIGBtZGM4MDBfdXNiX3Byb2JlYCBpcyBkaXJlY3RseSBhbHRlcmVkLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiBgbWRjODAwLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IGl0cyBmZWF0dXJlcy4gVGhpcyBicm9hZGVyIHZpZXcgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgcHJlc2VudCBpbiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYz0xMjQ9c3RydWN0IG1kYzgwMF9kYXRhXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTcwLS8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MTcxOnN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgbWRjODAwX2VkIFs0XSA9XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0xNzIte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIxNS0vKiBUaGUgVmFyaWFibGUgdXNlZCBieSB0aGUgZHJpdmVyICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyMTY6c3RhdGljIHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjE3LVxuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIyMi1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIyMzpzdGF0aWMgaW50IG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYSxzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmIpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMjQte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIzNS0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIzNjpzdGF0aWMgaW50IG1kYzgwMF9pc0J1c3kgKGNoYXIqIGNoKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjM3LXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTEtICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyNTI6c3RhdGljIGludCBtZGM4MDBfaXNSZWFkeSAoY2hhciAqY2gpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTMte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTI2OC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI2OTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2lycSAoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjcwLXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zMzItICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzozMzM6c3RhdGljIGludCBtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKGludCBtb2RlLCBpbnQgbXNlYylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTMzNC17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzYyLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MzYzOnN0YXRpYyB2b2lkIG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5IChzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zNjQte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM4MC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjM4MTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzgyLXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MDgtXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo0MDk6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDEwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDExOnN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBtZGM4MDBfY2xhc3MgPSB7XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MTItXHQubmFtZSA9XHRcdFwmIzM0O21kYzgwMCVkXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTQyMC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjQyMTpzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDIyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNTQxLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NTQyOnN0YXRpYyB2b2lkIG1kYzgwMF91c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01NDMte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTU3Ny0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjU3ODpzdGF0aWMgaW50IG1kYzgwMF9nZXRBbnN3ZXJTaXplIChjaGFyIGNvbW1hbmQpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01Nzkte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTYwOC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjYwOTpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02MTAte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1Ny0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjY1ODpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2VfcmVsZWFzZSAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02NTkte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4Mi0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjY4MzpzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4NC17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNzgzLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6Nzg0OnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTc4NS17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTUwLS8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcyA9XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NTIte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk2Mi1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk2MzpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWRjODAwX3RhYmxlW10gPSB7XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjQtXHR7IFVTQl9ERVZJQ0UoTURDODAwX1ZFTkRPUl9JRCwgTURDODAwX1BST0RVQ1RfSUQpIH0sXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9OTY4PU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbWRjODAwX3RhYmxlKTtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NzEtICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NzI6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyID1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk3My17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg1LVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6OTg2OnN0YXRpYyBpbnQgX19pbml0IHVzYl9tZGM4MDBfaW5pdCAodm9pZClcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk4Ny17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTA1OC1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjEwNTk6c3RhdGljIHZvaWQgX19leGl0IHVzYl9tZGM4MDBfY2xlYW51cCAodm9pZClcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NQoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1EQzgwMCBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IFVTQiBhbmQgc3BlY2lmaWNhbGx5IGBVU0JfTURDODAwYCBhcmUgZW5hYmxlZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBUaGVuLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIHByZXNlbnQ6IGBtZGM4MDBfdXNiX3Byb2JlYCwgYG1kYzgwMF9kZXZpY2Vfb3BlbmAsIGBtZGM4MDBfZGV2aWNlX3JlYWRgLCBgbWRjODAwX2RldmljZV93cml0ZWAsIGBtZGM4MDBfZGV2aWNlX3JlbGVhc2VgLCBhbmQgYG1kYzgwMF91c2JfZGlzY29ubmVjdGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIE1EQzgwMCBkcml2ZXIgZnVuY3Rpb25hbGl0eSwgc28gaXQmIzM5O3MgZXNzZW50aWFsIHRob3NlIGFyZSBhbGwgYXZhaWxhYmxlLgoKVGhlIHJlYXNvbiB0aGlzIGlzIHdvcnRoIGZ1enppbmcgaXMgY2xlYXIuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgYG1kYzgwMF91c2JfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpbml0aWFsaXplcyB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZGlnaXRhbCBjYW1lcmEgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSwgc2hpZnRpbmcgdGhlIGB1c2JfcmVnaXN0ZXJfZGV2KClgIGNhbGwgYWZ0ZXIgdGhlIFVSQiBzZXR1cC4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gcHJldmVudGlvbiBtb3ZlIOKAkyBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIHByb3BlciBjbGVhbnVwIG9uIGZhaWx1cmUuCgpBbmQgdGhlIGJlc3QgcGFydCBpcywgdGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGRldmljZSBlbXVsYXRpb24sIG1lYW5pbmcgSSBjYW4gdXNlIHRvb2xzIGxpa2UgcmF3IGdhZGdldCBvciB0aGUgRHVtbXkgSENEIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciB0byByZWFjaCB0aGlzIGRyaXZlciBhbmQgdGVzdCBpdCBlZmZlY3RpdmVseS4KClJpZ2h0LCBzbyB3aXRoIHRob3NlIGNvbmZpcm1lZCwgSSYjMzk7bSByZWFkeS4gVGltZSB0byB0cmlnZ2VyIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtVU0JfTURDODAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRjODAwX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX29wZW4mIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWFkJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O21kYzgwMF91c2JfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZSBpbiBtZGM4MDBfdXNiX3Byb2JlIGluIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkcml2ZXIsIG1vdmluZyB1c2JfcmVnaXN0ZXJfZGV2IGFmdGVyIFVSQiBzZXR1cCBhbmQgYWRkaW5nIHByb3BlciBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChEdW1teSBIQ0QgLyBSYXcgR2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1VTQl9NREM4MDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGM4MDBfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfb3BlbiYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlYWQmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV93cml0ZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bWRjODAwX3VzYl9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1kYzgwMF91c2JfcHJvYmUoKWAgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYCBieSBtb3ZpbmcgYHVzYl9yZWdpc3Rlcl9kZXYoKWAgdG8gYWZ0ZXIgdGhlIFVSQiBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSBmaWVsZHMgYXJlIGZ1bGx5IGNvbmZpZ3VyZWQgYW5kIGBpb19sb2NrYCBpcyByZWxlYXNlZCwgd2l0aCBwcm9wZXIgY2xlYW51cCAoYGRldiA9IE5VTExgLCBgc3RhdGUgPSBOT1RfQ09OTkVDVEVEYCkgb24gZXJyb3IuXG5cblRoaXMgaXMgYSBwcm9iZSBvcmRlcmluZyAvIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW4gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbG9ja2luZywgb3IgY29uY3VycmVuY3kgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC00ODIsMTMgJiM0Mzs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCiAJbXV0ZXhfbG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiAKLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhbXA7bWRjODAwX2NsYXNzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmFtcDtpbnRmLSZndDtkZXYsICYjMzQ7Tm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuJiMzNDspOwotCQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAltZGM4MDAtJmd0O2Rldj1kZXY7CiAJbWRjODAwLSZndDtvcGVuPTA7CiAKQEAgLTUyNyw2ICYjNDM7NTIwLDE2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJbWRjODAwLSZndDtzdGF0ZT1SRUFEWTsKIAogCW11dGV4X3VubG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpOwomIzQzOwlpZiAocmV0dmFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiYjMzQ7KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJbWRjODAwLSZndDtkZXYgPSBOVUxMOwomIzQzOwkJbWRjODAwLSZndDtzdGF0ZSA9IE5PVF9DT05ORUNURUQ7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KIAkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBGaXJzdCwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBwYXRjaCBhbmQgdGhlIHN1cnJvdW5kaW5nIHNvdXJjZSB1c2luZyB0aGUgc3RhbmRhcmQgdG9vbHMgSSYjMzk7dmUgZ290IGF0IG15IGRpc3Bvc2FsIOKAkyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4KCkZyb20gYSByaXNrIGFuYWx5c2lzIHBlcnNwZWN0aXZlLCB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIHJlYWxtIG9mIGJlbmlnbiBrZXJuZWwgbWFpbnRlbmFuY2Ugb3IgZGVmZW5zaXZlIFFBLiBUaGUgcmVxdWVzdCBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSBpZiBhIHNhbml0aXplciDigJMgS01TQU4gaW4gdGhpcyBjYXNlIOKAkyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBNeSBhY3Rpb24gaXMgdG8gZnVsZmlsbCB0aGlzIHJlcXVlc3QgZGlyZWN0bHkgYW5kIHByb3ZpZGUgYSBoZWxwZnVsLCBleHBlcnQgZXZhbHVhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgY29kZSB3aXRoaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHR7XG4gNDYxOlx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT0tMTtcbiA0NjI6XHRcdFx0Zm9yIChqPTA7IGpcdTAwM2M0OyBqJiM0MzsmIzQzOylcbiA0NjM6XHRcdFx0e1xuIDQ2NDpcdFx0XHRcdGlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzIChcdTAwMjZpbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXHUwMDI2bWRjODAwX2VkIFtpXSkpXG4gNDY1Olx0XHRcdFx0e1xuIDQ2NjpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcbiA0Njc6XHRcdFx0XHRcdGlmIChpPT0xKVxuIDQ2ODpcdFx0XHRcdFx0e1xuIDQ2OTpcdFx0XHRcdFx0XHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJJbnRlcnZhbDtcbiA0NzA6XHRcdFx0XHRcdH1cbiA0NzE6XHRcdFx0XHR9XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcbiA0NzQ6XHRcdFx0e1xuIDQ3NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2UgV3JvbmcgRW5kcG9pbnRzLlxcblwmIzM0Oyk7XG4gNDc2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcdH1cbiA0Nzk6XHRcbiA0ODA6XHRcbiA0ODE6XHRcdGRldl9pbmZvKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cXG5cJiMzNDspO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNDg0Olx0XG4gNDg1Olx0XHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiA0ODY6XHRcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gNDg3Olx0XG4gNDg4Olx0XHQvKiBTZXR1cCBVUkIgU3RydWN0cyAqL1xuIDQ4OTpcdFx0dXNiX2ZpbGxfaW50X3VyYiAoXG4gNDkwOlx0XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiLFxuIDQ5MTpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDQ5MjpcdFx0XHR1c2JfcmN2aW50cGlwZSAobWRjODAwLVx1MDAzZWRldixtZGM4MDAtXHUwMDNlZW5kcG9pbnQgWzFdKSxcbiA0OTM6XHRcdFx0bWRjODAwLVx1MDAzZWlycV91cmJfYnVmZmVyLFxuIDQ5NDpcdFx0XHQ4LFxuIDQ5NTpcdFx0XHRtZGM4MDBfdXNiX2lycSxcbiA0OTY6XHRcdFx0bWRjODAwLFxuIDQ5NzpcdFx0XHRpcnFfaW50ZXJ2YWxcbiA0OTg6XHRcdCk7XG4gNDk5Olx0XG4gNTAwOlx0XHR1c2JfZmlsbF9idWxrX3VyYiAoXG4gNTAxOlx0XHRcdG1kYzgwMC1cdTAwM2V3cml0ZV91cmIsXG4gNTAyOlx0XHRcdG1kYzgwMC1cdTAwM2VkZXYsXG4gNTAzOlx0XHRcdHVzYl9zbmRidWxrcGlwZSAobWRjODAwLVx1MDAzZWRldiwgbWRjODAwLVx1MDAzZWVuZHBvaW50WzBdKSxcbiA1MDQ6XHRcdFx0bWRjODAwLVx1MDAzZXdyaXRlX3VyYl9idWZmZXIsXG4gNTA1Olx0XHRcdDgsXG4gNTA2Olx0XHRcdG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LFxuIDUwNzpcdFx0XHRtZGM4MDBcbiA1MDg6XHRcdCk7XG4gNTA5Olx0XG4gNTEwOlx0XHR1c2JfZmlsbF9idWxrX3VyYiAoXG4gNTExOlx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIsXG4gNTEyOlx0XHRcdG1kYzgwMC1cdTAwM2VkZXYsXG4gNTEzOlx0XHRcdHVzYl9yY3ZidWxrcGlwZSAobWRjODAwLVx1MDAzZWRldiwgbWRjODAwLVx1MDAzZWVuZHBvaW50IFszXSksXG4gNTE0Olx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmJfYnVmZmVyLFxuIDUxNTpcdFx0XHQ2NCxcbiA1MTY6XHRcdFx0bWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnksXG4gNTE3Olx0XHRcdG1kYzgwMFxuIDUxODpcdFx0KTtcbiA1MTk6XHRcbiA1MjA6XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiA1MjE6XHRcbiA1MjI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTIzOlx0XG4gNTI0Olx0XHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4gNTI1Olx0XHRpZiAocmV0dmFsKSB7XG4gNTI2Olx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cXG5cJiMzNDspO1xuIDUyNzpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA1Mjg6XHRcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4gNTI5Olx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XG4gNTMwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTMxOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDUzMjpcdFx0fVxuIDUzMzpcdFx0XG4gNTM0Olx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XG4gNTM1Olx0XHRyZXR1cm4gMDtcbiA1MzY6XHR9XG4gNTM3Olx0XG4gNTM4Olx0XG4gNTM5Olx0LypcbiA1NDA6XHQgKiBEaXNjb25uZWN0IFVTQiBkZXZpY2UgKG1heWJlIHRoZSBNREM4MDApXG4gNTQxOlx0ICovXG4gNTQyOlx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1kYzgwMCkge1xuIDU0OTpcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtZGM4MDAuY2AqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2tpbmcgYXJvdW5kIGluIHRoaXMgYG1kYzgwMC5jYCBkcml2ZXIsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgbW9yZSBob2xpc3RpYyB2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIHRoaW5nLCBmcm9tIHRvcCB0byBib3R0b20uIFNpbXBseSBwdXQsIEkgbmVlZCB0byBzZWUgbW9yZSBvZiB0aGUgY29kZSB0byByZWFsbHkgZ3Jhc3Agd2hhdCB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBkby4gR290dGEgZXhhbWluZSB0aGUgY29tcGxldGUgc291cmNlIGZpbGUuIFdpdGhvdXQgY29udGV4dCwgaXQmIzM5O3MganVzdCBhIGJ1bmNoIG9mIGxpbmVzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSByZXN0IG9mIGBtZGM4MDAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVsbCBwaWN0dXJlIGlzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRlZCA9IDE7XG4gNDAxOlx0XHR3YWtlX3VwIChcdTAwMjZtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCk7XG4gNDAyOlx0fVxuIDQwMzpcdFxuIDQwNDpcdFxuIDQwNTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiA0MDY6XHRcdFByb2JpbmcgZm9yIHRoZSBDYW1lcmFcbiA0MDc6XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcbiA0MTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcztcbiA0MTE6XHRzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0ge1xuIDQxMjpcdFx0Lm5hbWUgPVx0XHRcJiMzNDttZGM4MDAlZFwmIzM0OyxcbiA0MTM6XHRcdC5mb3BzID1cdFx0XHUwMDI2bWRjODAwX2RldmljZV9vcHMsXG4gNDE0Olx0XHQubWlub3JfYmFzZSA9XHRNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsXG4gNDE1Olx0fTtcbiA0MTY6XHRcbiA0MTc6XHRcbiA0MTg6XHQvKlxuIDQxOTpcdCAqIENhbGxiYWNrIHRvIHNlYXJjaCB0aGUgTXVzdGVrIE1EQzgwMCBvbiB0aGUgVVNCIEJ1c1xuIDQyMDpcdCAqL1xuIDQyMTpcdHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gNDIyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA0MjM6XHR7XG4gNDI0Olx0XHRpbnQgaSxqO1xuIDQyNTpcdFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjO1xuIDQyNjpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpO1xuIDQyNzpcdFx0aW50IGlycV9pbnRlcnZhbD0wO1xuIDQyODpcdFx0aW50IHJldHZhbDtcbiA0Mjk6XHRcbiA0MzA6XHRcdGRldl9kYmcoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0OyglcykgY2FsbGVkLlxcblwmIzM0OywgX19mdW5jX18pO1xuIDQzMTpcdFxuIDQzMjpcdFxuIDQzMzpcdFx0aWYgKG1kYzgwMC1cdTAwM2VkZXYgIT0gTlVMTClcbiA0MzQ6XHRcdHtcbiA0MzU6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O29ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG4gNDM2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQzNzpcdFx0fVxuIDQzODpcdFxuIDQzOTpcdFx0aWYgKGRldi1cdTAwM2VkZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKVxuIDQ0MDpcdFx0e1xuIDQ0MTpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LFxuIDQ0MjpcdFx0XHRcdFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2Ugd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cXG5cJiMzNDspO1xuIDQ0MzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NDQ6XHRcdH1cbiA0NDU6XHRcdGludGZfZGVzYyA9IGludGYtXHUwMDNlY3VyX2FsdHNldHRpbmc7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoXG4gNDQ4Olx0XHRcdFx0KCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhmZiApXG4gNDQ5Olx0XHRcdHx8XHQoIGludGZfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAwIClcbiA0NTA6XHRcdFx0fHwgKCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gMCApXG4gNDUxOlx0XHRcdHx8ICggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYk51bUVuZHBvaW50cyAhPSA0KVxuIDQ1MjpcdFx0KVxuIDQ1MzpcdFx0e1xuIDQ1NDpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIHdyb25nIEludGVyZmFjZVxcblwmIzM0Oyk7XG4gNDU1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ1NjpcdFx0fVxuIDQ1NzpcdFxuIDQ1ODpcdFx0LyogQ2hlY2sgdGhlIEVuZHBvaW50cyAqL1xuIDQ1OTpcdFx0Zm9yIChpPTA7IGlcdTAwM2M0OyBpJiM0MzsmIzQzOylcbiA0NjA6XHRcdHtcbiA0NjE6XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPS0xO1xuIDQ2MjpcdFx0XHRmb3IgKGo9MDsgalx1MDAzYzQ7IGomIzQzOyYjNDM7KVxuIDQ2MzpcdFx0XHR7XG4gNDY0Olx0XHRcdFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFx1MDAyNmludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYyxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOgoKKipQZWVyaW5nIGludG8gbWRjODAwLmMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGVsdmUgaW50byB0aGUgYG1kYzgwMC5jYCBzb3VyY2UgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGF0IGdsb2JhbCBgbWRjODAwYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCogdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gVGhhdCBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBhbmQgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGluIGZpZ3VyaW5nIG91dCBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuICAgMjpcdC8qXG4gICAzOlx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcdTAwM2NoZW5uaW5nQHVuaS1wYWRlcmJvcm4uZGVcdTAwM2VcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHRcbiAgIDc6XHQvKlxuICAgODpcdCAqXHRVU0ItS2VybmVsIERyaXZlciBmb3IgdGhlIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmFcbiAgIDk6XHQgKlx0KGMpIDE5OTkvMjAwMCBIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVxuICAxMDpcdCAqXG4gIDExOlx0ICpcbiAgMTI6XHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxuICAxMzpcdCAqIFRvIHVzZSB0aGUgQ2FtZXJhIHlvdSBtdXN0IHN1cHBvcnQgdGhlIFVTQiBQcm90b2NvbCBvZiB0aGUgY2FtZXJhXG4gIDE0Olx0ICogdG8gdGhlIEtlcm5lbCBOb2RlLlxuICAxNTpcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcbiAgMTY6XHQgKiBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMlxuICAxNzpcdCAqXG4gIDE4Olx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXG4gIDE5Olx0ICogXG4gIDIwOlx0ICogRml4OiBtZGM4MDAgdXNlZCBzbGVlcF9vbiBhbmQgc2xlcHQgd2l0aCBpb19sb2NrIGhlbGQuXG4gIDIxOlx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcbiAgMjI6XHQgKiBhIHNlbWFwaG9yZSBmcm9tIGEgc3BpbmxvY2suXG4gIDIzOlx0ICogYnkgT2xpdmVyIE5ldWt1bSBcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcdTAwM2VcbiAgMjQ6XHQgKiAoMDIvMTIvMjAwMSlcbiAgMjU6XHQgKiBcbiAgMjY6XHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxuICAyNzpcdCAqICgwOC8wNC8yMDAxKSBnYlxuICAyODpcdCAqXG4gIDI5Olx0ICogdmVyc2lvbiAwLjcuNVxuICAzMDpcdCAqIEZpeGVkIHBvdGVudGlhbCBTTVAgcmFjZXMgd2l0aCBTcGlubG9ja3MuXG4gIDMxOlx0ICogVGhhbmtzIHRvIE9saXZlciBOZXVrdW0gXHUwMDNjb2xpdmVyQG5ldWt1bS5uYW1lXHUwMDNlIHdobyBcbiAgMzI6XHQgKiBub3RpY2VkIHRoZSByYWNlIGNvbmRpdGlvbnMuXG4gIDMzOlx0ICogKDMwLzEwLzIwMDApXG4gIDM0Olx0ICpcbiAgMzU6XHQgKiBGaXhlZDogU2V0dGluZyB1cmItXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cbiAgMzY6XHQgKiBieSBHcmVnIEtIIFx1MDAzY2dyZWdAa3JvYWguY29tXHUwMDNlXG4gIDM3Olx0ICogKDEzLzEwLzIwMDApXG4gIDM4Olx0ICpcbiAgMzk6XHQgKiB2ZXJzaW9uIDAuNy4zXG4gIDQwOlx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cdTAwM2VzdGF0ZSBmaWVsZCBnZXRzIHNldCB0byBSRUFEWSBhZnRlciB0aGVcbiAgNDE6XHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcbiAgNDI6XHQgKiBkcml2ZXIgcnVubmluZyBsaWtlIHRoZSBjYW1lcmEgaXMgY29ubmVjdGVkIGFuZCBjYXVzZXMgc29tZVxuICA0MzpcdCAqIGhhbmcgdXBzLlxuICA0NDpcdCAqXG4gIDQ1Olx0ICogdmVyc2lvbiAwLjcuMVxuICA0NjpcdCAqIE1PRF9JTkMgYW5kIE1PRF9ERUMgYXJlIGNoYW5nZWQgaW4gdXNiX3Byb2JlIHRvIHByZXZlbnQgbG9hZC91bmxvYWRcbiAgNDc6XHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cbiAgNDg6XHQgKiAoMDQvMDQvMjAwMClcbiAgNDk6XHQgKlxuICA1MDpcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxuICA1MTpcdCAqIHdhcyB1cGRhdGVkIHRvIHVzZSB0aGVzZSB2YWx1ZXMuXG4gIDUyOlx0ICogKDI2LzAzLzIwMDApXG4gIDUzOlx0ICpcbiAgNTQ6XHQgKiBUaGUgSW5pdCB1bmQgRXhpdCBNb2R1bGUgRnVuY3Rpb24gYXJlIHVwZGF0ZWQuXG4gIDU1Olx0ICogKDAxLzAzLzIwMDApXG4gIDU2Olx0ICpcbiAgNTc6XHQgKiB2ZXJzaW9uIDAuNy4wXG4gIDU4Olx0ICogUmV3cml0ZSBvZiB0aGUgZHJpdmVyIDogVGhlIGRyaXZlciBub3cgdXNlcyBVUkImIzM5O3MuIFRoZSBvbGQgc3R1ZmZcbiAgNTk6XHQgKiBoYXMgYmVlbiByZW1vdmVkLlxuICA2MDpcdCAqXG4gIDYxOlx0ICogdmVyc2lvbiAwLjYuMFxuICA2MjpcdCAqIFJld3JpdGUgb2YgdGhpcyBkcml2ZXI6IFRoZSBFbXVsYXRpb24gb2YgdGhlIHJzMjMyIHByb3RvY29sbFxuICA2MzpcdCAqIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZHJpdmVyLiBBIHNwZWNpYWwgZXhlY3V0ZUNvbW1hbmQgZnVuY3Rpb25cbiAgNjQ6XHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxuICA2NTpcdCAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgdHdvIGtpbmQgb2YgY29tbXVuaWNhdGlvbiB0byBidWxrIGVuZHBvaW50cy5cbiAgNjY6XHQgKiBFaXRoZXIgd2l0aCB0aGUgZGV2LVx1MDAzZWJ1cy1cdTAwM2VvcHMtXHUwMDNlYnVsay4uLiBvciB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICA2NzpcdCAqICgwOS8xMS8xOTk5KVxuICA2ODpcdCAqXG4gIDY5Olx0ICogdmVyc2lvbiAwLjUuMDpcbiAgNzA6XHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcbiAgNzE6XHQgKiBmdW5jdGlvbnMgd29yay5cbiAgNzI6XHQgKiAoMjAvMTAvMTk5OSlcbiAgNzM6XHQgKi9cbiAgNzQ6XHRcbiAgNzU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICA3NjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gIDc3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICA3ODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgNzk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICA4MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICA4MTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICA4MjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICA4MzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDg0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gIDg1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICA4NjpcdFxuICA4NzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi5oXHUwMDNlXG4gIDg4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICA4OTpcdFxuICA5MDpcdC8qXG4gIDkxOlx0ICogVmVyc2lvbiBJbmZvcm1hdGlvblxuICA5MjpcdCAqL1xuICA5MzpcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXCYjMzQ7djAuNy41ICgzMC8xMC8yMDAwKVwmIzM0O1xuICA5NDpcdCNkZWZpbmUgRFJJVkVSX0FVVEhPUiBcJiMzNDtIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVwmIzM0O1xuICA5NTpcdCNkZWZpbmUgRFJJVkVSX0RFU0MgXCYjMzQ7VVNCIERyaXZlciBmb3IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYVwmIzM0O1xuICA5NjpcdFxuICA5NzpcdC8qIFZlbmRvciBhbmQgUHJvZHVjdCBJbmZvcm1hdGlvbiAqL1xuICA5ODpcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcdDB4MDU1ZlxuICA5OTpcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcdDB4YTgwMFxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY29kZSBleHBsb3JhdGlvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNREM4MDAgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG1kYzgwMGAgZHJpdmVyLiBJJiMzOTt2ZSBnb3QgYSBncmFzcCBvZiB0aGUgYmFzaWMgYXJjaGl0ZWN0dXJlLCBidXQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBtZGM4MDAuY2AgYW5kIHRyYWNlIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoZSBVU0IgZGV2aWNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBmdW5jdGlvbnM6IEkgd2FudCB0byBzZWUgaG93IGBtZGM4MDBfdXNiX3Byb2JlYCBzZXRzIHRoaW5ncyB1cCBpbml0aWFsbHksIHJpZ2h0IGZyb20gdGhlIGRldmljZSBkZXRlY3Rpb24uIFRoZW4sIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBtZGM4MDBfaW5pdGAsIHdoYXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIGhvdy4gT2YgY291cnNlLCBgbWRjODAwX2V4aXRgIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciB0ZWFyZG93bjogSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjbGVhbnVwIHByb2NlZHVyZXMgaXQgcGVyZm9ybXMgdG8gbWFpbnRhaW4gc3lzdGVtIGludGVncml0eS4gRmluYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZmlsZSBvcGVyYXRpb24gaGFuZGxlcnMg4oCTIHRoZSBgb3BlbmAsIGByZWFkYCwgYW5kIGB3cml0ZWAgZnVuY3Rpb25zLiBJIGV4cGVjdCB0aGVzZSB3aWxsIHJldmVhbCBob3cgZGF0YSBpcyB0cmFuc2ZlcnJlZCB0byBhbmQgZnJvbSB0aGUgZGV2aWNlIGFuZCBtYXAgdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgdG8gdGhlIHVzZXIgc3BhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBsb2dpYyBhbmQgd2hlcmUgSSBtaWdodCBlbmNvdW50ZXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGVkZ2UtY2FzZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0LyogVGltZW91dHMgKG1zZWMpICovXG4gMTAyOlx0I2RlZmluZSBUT19ET1dOTE9BRF9HRVRfUkVBRFlcdFx0MTUwMFxuIDEwMzpcdCNkZWZpbmUgVE9fRE9XTkxPQURfR0VUX0JVU1lcdFx0MTUwMFxuIDEwNDpcdCNkZWZpbmUgVE9fV1JJVEVfR0VUX1JFQURZXHRcdDEwMDBcbiAxMDU6XHQjZGVmaW5lIFRPX0RFRkFVTFRfQ09NTUFORFx0XHQ1MDAwXG4gMTA2Olx0I2RlZmluZSBUT19SRUFEX0ZST01fSVJRIFx0XHRUT19ERUZBVUxUX0NPTU1BTkRcbiAxMDc6XHQjZGVmaW5lIFRPX0dFVF9SRUFEWVx0XHRcdFRPX0RFRkFVTFRfQ09NTUFORFxuIDEwODpcdFxuIDEwOTpcdC8qIE1pbm9yIE51bWJlciBvZiB0aGUgZGV2aWNlIChjcmVhdGUgd2l0aCBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMikgKi9cbiAxMTA6XHQjZGVmaW5lIE1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSAzMlxuIDExMTpcdFxuIDExMjpcdFxuIDExMzpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDExNDpcdFx0RGF0YSBhbmQgc3RydWN0c1xuIDExNTpcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAxMTY6XHRcbiAxMTc6XHRcbiAxMTg6XHR0eXBlZGVmIGVudW0ge1xuIDExOTpcdFx0Tk9UX0NPTk5FQ1RFRCwgUkVBRFksIFdPUktJTkcsIERPV05MT0FEXG4gMTIwOlx0fSBtZGM4MDBfc3RhdGU7XG4gMTIxOlx0XG4gMTIyOlx0XG4gMTIzOlx0LyogRGF0YSBmb3IgdGhlIGRyaXZlciAqL1xuIDEyNDpcdHN0cnVjdCBtZGM4MDBfZGF0YVxuIDEyNTpcdHtcbiAxMjY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICpcdGRldjtcdFx0XHQvLyBEZXZpY2UgRGF0YVxuIDEyNzpcdFx0bWRjODAwX3N0YXRlIFx0XHRzdGF0ZTtcbiAxMjg6XHRcbiAxMjk6XHRcdHVuc2lnbmVkIGludFx0XHRlbmRwb2ludCBbNF07XG4gMTMwOlx0XG4gMTMxOlx0XHRzdHJ1Y3QgdXJiICpcdFx0aXJxX3VyYjtcbiAxMzI6XHRcdHdhaXRfcXVldWVfaGVhZF90XHRpcnFfd2FpdDtcbiAxMzM6XHRcdGludFx0XHRcdGlycV93b2tlbjtcbiAxMzQ6XHRcdGNoYXIqXHRcdFx0aXJxX3VyYl9idWZmZXI7XG4gMTM1Olx0XG4gMTM2Olx0XHRpbnRcdFx0XHRjYW1lcmFfYnVzeTsgICAgICAgICAgLy8gaXMgY2FtZXJhIGJ1c3kgP1xuIDEzNzpcdFx0aW50IFx0XHRcdGNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnFcbiAxMzg6XHRcdGNoYXIgXHRcdFx0Y2FtZXJhX3Jlc3BvbnNlIFs4XTsgIC8vIGxhc3QgQnl0ZXMgc2VuZCBhZnRlciBidXN5XG4gMTM5Olx0XG4gMTQwOlx0XHRzdHJ1Y3QgdXJiICogICBcdFx0d3JpdGVfdXJiO1xuIDE0MTpcdFx0Y2hhcipcdFx0XHR3cml0ZV91cmJfYnVmZmVyO1xuIDE0MjpcdFx0d2FpdF9xdWV1ZV9oZWFkX3RcdHdyaXRlX3dhaXQ7XG4gMTQzOlx0XHRpbnRcdFx0XHR3cml0dGVuO1xuIDE0NDpcdFxuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IHVyYiAqICAgXHRcdGRvd25sb2FkX3VyYjtcbiAxNDc6XHRcdGNoYXIqXHRcdFx0ZG93bmxvYWRfdXJiX2J1ZmZlcjtcbiAxNDg6XHRcdHdhaXRfcXVldWVfaGVhZF90XHRkb3dubG9hZF93YWl0O1xuIDE0OTpcdFx0aW50XHRcdFx0ZG93bmxvYWRlZDtcbiAxNTA6XHRcdGludFx0XHRcdGRvd25sb2FkX2xlZnQ7XHRcdC8vIEJ5dGVzIGxlZnQgdG8gZG93bmxvYWQgP1xuIDE1MTpcdFxuIDE1MjpcdFxuIDE1MzpcdFx0LyogRGV2aWNlIERhdGEgKi9cbiAxNTQ6XHRcdGNoYXJcdFx0XHRvdXQgWzY0XTtcdC8vIEFuc3dlciBCdWZmZXJcbiAxNTU6XHRcdGludCBcdFx0XHRvdXRfcHRyO1x0Ly8gSW5kZXggdG8gdGhlIGZpcnN0IG5vdCByZWFkZW4gYnl0ZVxuIDE1NjpcdFx0aW50XHRcdFx0b3V0X2NvdW50O1x0Ly8gQnl0ZXMgaW4gdGhlIGJ1ZmZlclxuIDE1NzpcdFxuIDE1ODpcdFx0aW50XHRcdFx0b3BlbjtcdFx0Ly8gQ2FtZXJhIGRldmljZSBvcGVuID9cbiAxNTk6XHRcdHN0cnVjdCBtdXRleFx0XHRpb19sb2NrO1x0Ly8gSU8gLWxvY2tcbiAxNjA6XHRcbiAxNjE6XHRcdGNoYXIgXHRcdFx0aW4gWzhdO1x0XHQvLyBDb21tYW5kIElucHV0IEJ1ZmZlclxuIDE2MjpcdFx0aW50ICBcdFx0XHRpbl9jb3VudDtcbiAxNjM6XHRcbiAxNjQ6XHRcdGludFx0XHRcdHBpY19pbmRleDtcdC8vIENhY2hlIGZvciB0aGUgSW1hZ2VzaXplICgtMSBmb3Igbm90aGluZyBjYWNoZWQgKVxuIDE2NTpcdFx0aW50XHRcdFx0cGljX2xlbjtcbiAxNjY6XHRcdGludFx0XHRcdG1pbm9yO1xuIDE2NzpcdH07XG4gMTY4Olx0XG4gMTY5Olx0XG4gMTcwOlx0LyogU3BlY2lmaWNhdGlvbiBvZiB0aGUgRW5kcG9pbnRzICovXG4gMTcxOlx0c3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBtZGM4MDBfZWQgWzRdID1cbiAxNzI6XHR7XG4gMTczOlx0XHR7IFxuIDE3NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE3NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID1cdDAsXG4gMTc2Olx0XHRcdC5iRW5kcG9pbnRBZGRyZXNzID1cdDB4MDEsXG4gMTc3Olx0XHRcdC5ibUF0dHJpYnV0ZXMgPSBcdDB4MDIsXG4gMTc4Olx0XHRcdC53TWF4UGFja2V0U2l6ZSA9XHRjcHVfdG9fbGUxNig4KSxcbiAxNzk6XHRcdFx0LmJJbnRlcnZhbCA9IFx0XHQwLFxuIDE4MDpcdFx0XHQuYlJlZnJlc2ggPSBcdFx0MCxcbiAxODE6XHRcdFx0LmJTeW5jaEFkZHJlc3MgPSBcdDAsXG4gMTgyOlx0XHR9LFxuIDE4MzpcdFx0e1xuIDE4NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE4NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID0gXHQwLFxuIDE4NjpcdFx0XHQuYkVuZHBvaW50QWRkcmVzcyA9IFx0MHg4MixcbiAxODc6XHRcdFx0LmJtQXR0cmlidXRlcyA9IFx0MHgwMyxcbiAxODg6XHRcdFx0LndNYXhQYWNrZXRTaXplID0gXHRjcHVfdG9fbGUxNig4KSxcbiAxODk6XHRcdFx0LmJJbnRlcnZhbCA9IFx0XHQwLFxuIDE5MDpcdFx0XHQuYlJlZnJlc2ggPSBcdFx0MCxcbiAxOTE6XHRcdFx0LmJTeW5jaEFkZHJlc3MgPSBcdDAsXG4gMTkyOlx0XHR9LFxuIDE5MzpcdFx0e1xuIDE5NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE5NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID0gXHQwLFxuIDE5NjpcdFx0XHQuYkVuZHBvaW50QWRkcmVzcyA9IFx0MHgwMyxcbiAxOTc6XHRcdFx0LmJtQXR0cmlidXRlcyA9IFx0MHgwMixcbiAxOTg6XHRcdFx0LndNYXhQYWNrZXRTaXplID0gXHRjcHVfdG9fbGUxNig2NCksXG4gMTk5Olx0XHRcdC5iSW50ZXJ2YWwgPSBcdFx0MCxcbiAyMDA6XHRcdFx0LmJSZWZyZXNoID0gXHRcdDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MzkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE1EQzgwMCBVU0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtZGM4MDBgIFVTQiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBsaW5lcyA2MDAgdGhyb3VnaCA4MDAgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gVGhhdCBzZWN0aW9uIHNob3VsZCBjb3ZlciB0aGUgbW9kdWxlJiMzOTtzIGBpbml0YCBhbmQgYGV4aXRgIHJvdXRpbmVzIOKAkyBhbGwgdGhlIGNyaXRpY2FsIHNldHVwIGFuZCBjbGVhbnVwIGZ1bmN0aW9ucy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBzdHVmZjogcmVzb3VyY2UgYWxsb2NhdGlvbiwgcHJvYmUgYW5kIGRpc2Nvbm5lY3QgcmVnaXN0cmF0aW9ucywgcGVyaGFwcyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgYW5kIG9mIGNvdXJzZSwgcHJvcGVyIHVuYmluZGluZyBkdXJpbmcgbW9kdWxlIHJlbW92YWwuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSBjbGVhbiB1cCByZXNvdXJjZXMgaW4gdGhlIGBleGl0YCBwYXRoLiBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgb3Zlcmx5IGNvbnZvbHV0ZWQgb3IsIEdvZCBmb3JiaWQsIHJlc291cmNlIGxlYWtzLi4uIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRcdGRlZmF1bHQ6XG4gNjAxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNjAyOlx0XHR9XG4gNjAzOlx0fVxuIDYwNDpcdFxuIDYwNTpcdFxuIDYwNjpcdC8qXG4gNjA3Olx0ICogSW5pdCB0aGUgZGV2aWNlOiAoMSkgYWxsb2MgbWVtICgyKSBJbmNyZWFzZSBNT0QgQ291bnQgLi5cbiA2MDg6XHQgKi9cbiA2MDk6XHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNjEwOlx0e1xuIDYxMTpcdFx0aW50IHJldHZhbD0wO1xuIDYxMjpcdFx0aW50IGVycm49MDtcbiA2MTM6XHRcbiA2MTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDYxNTpcdFx0XG4gNjE2Olx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNjE3Olx0XHR7XG4gNjE4Olx0XHRcdGVycm49LUVCVVNZO1xuIDYxOTpcdFx0XHRnb3RvIGVycm9yX291dDtcbiA2MjA6XHRcdH1cbiA2MjE6XHRcdGlmIChtZGM4MDAtXHUwMDNlb3BlbilcbiA2MjI6XHRcdHtcbiA2MjM6XHRcdFx0ZXJybj0tRUJVU1k7XG4gNjI0Olx0XHRcdGdvdG8gZXJyb3Jfb3V0O1xuIDYyNTpcdFx0fVxuIDYyNjpcdFxuIDYyNzpcdFx0bWRjODAwLVx1MDAzZWluX2NvdW50PTA7XG4gNjI4Olx0XHRtZGM4MDAtXHUwMDNlb3V0X2NvdW50PTA7XG4gNjI5Olx0XHRtZGM4MDAtXHUwMDNlb3V0X3B0cj0wO1xuIDYzMDpcdFx0bWRjODAwLVx1MDAzZXBpY19pbmRleD0wO1xuIDYzMTpcdFx0bWRjODAwLVx1MDAzZXBpY19sZW49LTE7XG4gNjMyOlx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xuIDYzMzpcdFxuIDYzNDpcdFx0bWRjODAwLVx1MDAzZWNhbWVyYV9idXN5PTA7XG4gNjM1Olx0XHRtZGM4MDAtXHUwMDNlY2FtZXJhX3JlcXVlc3RfcmVhZHk9MDtcbiA2MzY6XHRcbiA2Mzc6XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNjM4Olx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWlycV91cmIsIEdGUF9LRVJORUwpO1xuIDYzOTpcdFx0aWYgKHJldHZhbCkge1xuIDY0MDpcdFx0XHRkZXZfZXJyKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LFxuIDY0MTpcdFx0XHRcdFwmIzM0O3JlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuXFxuXCYjMzQ7LCByZXR2YWwpO1xuIDY0MjpcdFx0XHRlcnJuID0gLUVJTztcbiA2NDM6XHRcdFx0Z290byBlcnJvcl9vdXQ7XG4gNjQ0Olx0XHR9XG4gNjQ1Olx0XG4gNjQ2Olx0XHRtZGM4MDAtXHUwMDNlb3Blbj0xO1xuIDY0NzpcdFx0ZGV2X2RiZyhcdTAwMjZtZGM4MDAtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7TXVzdGVrIE1EQzgwMCBkZXZpY2Ugb3BlbmVkLlxcblwmIzM0Oyk7XG4gNjQ4Olx0XG4gNjQ5Olx0ZXJyb3Jfb3V0OlxuIDY1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA2NTE6XHRcdHJldHVybiBlcnJuO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRcbiA2NTU6XHQvKlxuIDY1NjpcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XG4gNjU3Olx0ICovXG4gNjU4Olx0c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDY1OTpcdHtcbiA2NjA6XHRcdGludCByZXR2YWw9MDtcbiA2NjE6XHRcbiA2NjI6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY2MzpcdFx0aWYgKG1kYzgwMC1cdTAwM2VvcGVuIFx1MDAyNlx1MDAyNiAobWRjODAwLVx1MDAzZXN0YXRlICE9IE5PVF9DT05ORUNURUQpKVxuIDY2NDpcdFx0e1xuIDY2NTpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZWlycV91cmIpO1xuIDY2NjpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZXdyaXRlX3VyYik7XG4gNjY3Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiKTtcbiA2Njg6XHRcdFx0bWRjODAwLVx1MDAzZW9wZW49MDtcbiA2Njk6XHRcdH1cbiA2NzA6XHRcdGVsc2VcbiA2NzE6XHRcdHtcbiA2NzI6XHRcdFx0cmV0dmFsPS1FSU87XG4gNjczOlx0XHR9XG4gNjc0Olx0XG4gNjc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY3NjpcdFx0cmV0dXJuIHJldHZhbDtcbiA2Nzc6XHR9XG4gNjc4Olx0XG4gNjc5Olx0XG4gNjgwOlx0LypcbiA2ODE6XHQgKiBUaGUgRGV2aWNlIHJlYWQgY2FsbGJhY2sgRnVuY3Rpb25cbiA2ODI6XHQgKi9cbiA2ODM6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiA2ODQ6XHR7XG4gNjg1Olx0XHRzaXplX3QgbGVmdD1sZW4sIHN0cz1sZW47IC8qIHNpbmdsZSB0cmFuc2ZlciBzaXplICovXG4gNjg2Olx0XHRjaGFyIF9fdXNlciAqcHRyID0gYnVmO1xuIDY4NzpcdFx0aW50IHJldHZhbDtcbiA2ODg6XHRcbiA2ODk6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY5MDpcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxuIDY5MTpcdFx0e1xuIDY5MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY5MzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDY5NDpcdFx0fVxuIDY5NTpcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBXT1JLSU5HKVxuIDY5NjpcdFx0e1xuIDY5NzpcdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HIFwmIzM0O21kYzgwMDogSWxsZWdhbCBTdGF0ZSBcXFwmIzM0O3dvcmtpbmdcXFwmIzM0O1wmIzM0O1xuIDY5ODpcdFx0XHQgICAgICAgXCYjMzQ7cmVhY2hlZCBkdXJpbmcgcmVhZCA/IVxcblwmIzM0Oyk7XG4gNjk5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOgoKKipEaXNzZWN0aW5nIHRoZSBFbmRnYW1lIG9mIG1kYzgwMC5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgdGFpbCBlbmQgb2YgYG1kYzgwMC5jYC4gTGV0JiMzOTtzIGFzc3VtZSBJJiMzOTt2ZSBhbHJlYWR5IG5haWxlZCBkb3duIHRoZSBiYXNpY3Mgb2YgdGhpcyBkcml2ZXIg4oCTIGRldmljZSBlbnVtZXJhdGlvbiwgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgdGhlIHVzdWFsIFVTQiBzZXR1cC4gTm93LCB3aGF0JiMzOTtzIGl0IGRvaW5nIGluIHRoZSBmaW5hbCBjaHVuaz8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgdXN1YWwgaW1hZ2UgdHJhbnNmZXIgcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBzdGFnZXMgb2YgYSBidWxrIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgbWF5YmUgc29tZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIE1EQzgwMCYjMzk7cyBpbWFnZSBoYW5kbGluZyBwcm90b2NvbCwgb3IgcmVzb3VyY2UgcmVsZWFzZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYXQgdGhpcyBzZWN0aW9uLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBVU0IgdHJhbnNmZXIgaXMgY29tcGxldGUuIFRoZSBmdW5jdGlvbiB3b3VsZCBsaWtlbHkgYmUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzLCBjbGVhbmluZyB1cCwgYW5kIHNpZ25hbGluZyB0aGUgdXNlciBvciB0aGUgaGlnaGVyLWxldmVsIGltYWdlIG1hbmFnZW1lbnQgbGF5ZXIgdGhhdCB0aGUgdHJhbnNmZXIgaXMgZG9uZS4gSWYgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCB0aGlzIG1lYW5zIG5vdGlmeWluZyB0aGUgdXNlciBvZiB0aGUgZmluYWwgaW1hZ2UuIElmIGl0IHdhc24mIzM5O3QsIHRoZSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYW4gZXJyb3IsIG9yIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0cm91Ymxlc2hvb3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBlY3VsaWFyIGVycm9yIGNvZGVzIG9yIHNwZWNpZmljIGVycm9yLWhhbmRsaW5nIHJvdXRpbmVzIHRoYXQgc3RhbmQgb3V0IGFzIHRoaXMgZHJpdmVyJiMzOTtzIHNwZWNpYWx0eS4gRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIHRvIHJlbGVhc2UsIGJ1ZmZlcnMgdG8gZnJlZSwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGludm9rZT8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDcwMTpcdFx0fVxuIDcwMjpcdFx0aWYgKCFtZGM4MDAtXHUwMDNlb3BlbilcbiA3MDM6XHRcdHtcbiA3MDQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3MDU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3MDY6XHRcdH1cbiA3MDc6XHRcbiA3MDg6XHRcdHdoaWxlIChsZWZ0KVxuIDcwOTpcdFx0e1xuIDcxMDpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcbiA3MTE6XHRcdFx0e1xuIDcxMjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzEzOlx0XHRcdFx0cmV0dXJuIGxlbiA9PSBsZWZ0ID8gLUVJTlRSIDogbGVuLWxlZnQ7XG4gNzE0Olx0XHRcdH1cbiA3MTU6XHRcbiA3MTY6XHRcdFx0c3RzPWxlZnQgXHUwMDNlIChtZGM4MDAtXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cdTAwM2VvdXRfcHRyKT9tZGM4MDAtXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cdTAwM2VvdXRfcHRyOmxlZnQ7XG4gNzE3Olx0XG4gNzE4Olx0XHRcdGlmIChzdHMgXHUwMDNjPSAwKVxuIDcxOTpcdFx0XHR7XG4gNzIwOlx0XHRcdFx0LyogVG9vIGxlc3MgRGF0YSBpbiBidWZmZXIgKi9cbiA3MjE6XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IERPV05MT0FEKVxuIDcyMjpcdFx0XHRcdHtcbiA3MjM6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA3MjQ6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNzI1Olx0XG4gNzI2Olx0XHRcdFx0XHQvKiBEb3dubG9hZCAtXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXG4gNzI3Olx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNzI4Olx0XHRcdFx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNzI5Olx0XHRcdFx0XHRpZiAocmV0dmFsKSB7XG4gNzMwOlx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzMxOlx0XHRcdFx0XHRcdFx0XCYjMzQ7Q2FuJiMzOTt0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXCYjMzQ7XG4gNzMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7KHJldHZhbD0laSlcXG5cJiMzNDssIHJldHZhbCk7XG4gNzMzOlx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzM0Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3MzU6XHRcdFx0XHRcdH1cbiA3MzY6XHRcdFx0XHRcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCxcbiA3Mzc6XHRcdFx0XHRcdCAgICAgbWRjODAwLVx1MDAzZWRvd25sb2FkZWQsXG4gNzM4Olx0XHRcdFx0XHQgICAgIG1zZWNzX3RvX2ppZmZpZXMoVE9fRE9XTkxPQURfR0VUX1JFQURZKSk7XG4gNzM5Olx0XHRcdFx0XHRpZiAoIXJldHZhbClcbiA3NDA6XHRcdFx0XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDc0MTpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAwO1xuIDc0MjpcdFx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmItXHUwMDNlc3RhdHVzICE9IDApXG4gNzQzOlx0XHRcdFx0XHR7XG4gNzQ0Olx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzQ1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyBcJiMzNDtcbiA3NDY6XHRcdFx0XHRcdFx0XHRcJiMzNDsoc3RhdHVzPSVpKVxcblwmIzM0OyxcbiA3NDc6XHRcdFx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZXN0YXR1cyk7XG4gNzQ4Olx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzQ5Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3NTA6XHRcdFx0XHRcdH1cbiA3NTE6XHRcdFx0XHR9XG4gNzUyOlx0XHRcdFx0ZWxzZVxuIDc1MzpcdFx0XHRcdHtcbiA3NTQ6XHRcdFx0XHRcdC8qIE5vIG1vcmUgYnl0ZXMgLVx1MDAzZSB0aGF0JiMzOTtzIGFuIGVycm9yKi9cbiA3NTU6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA3NTc6XHRcdFx0XHR9XG4gNzU4Olx0XHRcdH1cbiA3NTk6XHRcdFx0ZWxzZVxuIDc2MDpcdFx0XHR7XG4gNzYxOlx0XHRcdFx0LyogQ29weSBCeXRlcyAqL1xuIDc2MjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcdTAwMjZtZGM4MDAtXHUwMDNlb3V0IFttZGM4MDAtXHUwMDNlb3V0X3B0cl0sXG4gNzYzOlx0XHRcdFx0XHRcdFx0c3RzKSkge1xuIDc2NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3NjU6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc2NjpcdFx0XHRcdH1cbiA3Njc6XHRcdFx0XHRwdHImIzQzOz1zdHM7XG4gNzY4Olx0XHRcdFx0bGVmdC09c3RzO1xuIDc2OTpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyJiM0Mzs9c3RzO1xuIDc3MDpcdFx0XHR9XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDc3NDpcdFx0cmV0dXJuIGxlbi1sZWZ0O1xuIDc3NTpcdH1cbiA3NzY6XHRcbiA3Nzc6XHRcbiA3Nzg6XHQvKlxuIDc3OTpcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cbiA3ODA6XHQgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLlxuIDc4MTpcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcbiA3ODI6XHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cbiA3ODM6XHQgKi9cbiA3ODQ6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4gNzg1Olx0e1xuIDc4NjpcdFx0c2l6ZV90IGk9MDtcbiA3ODc6XHRcdGludCByZXR2YWw7XG4gNzg4Olx0XG4gNzg5Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTA6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gUkVBRFkpXG4gNzkxOlx0XHR7XG4gNzkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzk0Olx0XHR9XG4gNzk1Olx0XHRpZiAoIW1kYzgwMC1cdTAwM2VvcGVuIClcbiA3OTY6XHRcdHtcbiA3OTc6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGF0YSBTdHJlYW06IEJleW9uZCBMaW5lIDgwMCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGZpbGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb24gdGhlIGluaXRpYWwgc2VjdGlvbnMsIHRoZSBzdHJ1Y3R1cmUgYW5kIHByZWxpbWluYXJ5IHJlc3VsdHMuIEhvd2V2ZXIsIHRvIHJlYWxseSBkcmlsbCBkb3duIGludG8gc29tZSBzcGVjaWZpYyBhbm9tYWxpZXMgSSBzdXNwZWN0ZWQsIEkgbmVlZCB0byBnbyBiZXlvbmQgdGhlIGluaXRpYWwgYW5hbHlzaXMuIE15IGN1cnJlbnQgcHJvY2VzcyBzdG9wcyBhcm91bmQgbGluZSA4MDAsIHdoaWNoIGhhcyBnaXZlbiBtZSBhbiBpbnRlcmVzdGluZyBwcm9maWxlIGFuZCBzb21lIGxlYWRzLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0cmVuZHMgSeKAmW0gcGlja2luZyB1cCBpbiB0aGUgZmlyc3QgcGFydCBoYXZlIGEgY29udGludWF0aW9uLCBhIHNpZ25pZmljYW50IGNoYW5nZSwgb3IgYSBjb3JyZWxhdGlvbiB3aXRoIGV2ZW50cyB0aGF0IG1heSBoYXBwZW4gbGF0ZXIgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIGFuZCB0aGUgcmVtYWluaW5nIGRhdGEgaG9sZHMgdGhlIGtleSB0byB0aGUgbmV4dCBzdGVwcy4gTGV0JiMzOTtzIGdldCB0byB0aGUgcmVtYWluaW5nIGRhdGEgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XG4gODAxOlx0XHR3aGlsZSAoaVx1MDAzY2xlbilcbiA4MDI6XHRcdHtcbiA4MDM6XHRcdFx0dW5zaWduZWQgY2hhciBjO1xuIDgwNDpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcbiA4MDU6XHRcdFx0e1xuIDgwNjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODA3Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiA4MDg6XHRcdFx0fVxuIDgwOTpcdFx0XHRcbiA4MTA6XHRcdFx0aWYoZ2V0X3VzZXIoYywgYnVmJiM0MztpKSlcbiA4MTE6XHRcdFx0e1xuIDgxMjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODEzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODE0Olx0XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdFx0LyogY2hlY2sgZm9yIGNvbW1hbmQgc3RhcnQgKi9cbiA4MTc6XHRcdFx0aWYgKGMgPT0gMHg1NSlcbiA4MTg6XHRcdFx0e1xuIDgxOTpcdFx0XHRcdG1kYzgwMC1cdTAwM2Vpbl9jb3VudD0wO1xuIDgyMDpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA4MjE6XHRcdFx0XHRtZGM4MDAtXHUwMDNlb3V0X3B0cj0wO1xuIDgyMjpcdFx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XG4gODIzOlx0XHRcdH1cbiA4MjQ6XHRcbiA4MjU6XHRcdFx0Lyogc2F2ZSBjb21tYW5kIGJ5dGUgKi9cbiA4MjY6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vpbl9jb3VudCBcdTAwM2MgOClcbiA4Mjc6XHRcdFx0e1xuIDgyODpcdFx0XHRcdG1kYzgwMC1cdTAwM2VpblttZGM4MDAtXHUwMDNlaW5fY291bnRdID0gYztcbiA4Mjk6XHRcdFx0XHRtZGM4MDAtXHUwMDNlaW5fY291bnQmIzQzOyYjNDM7O1xuIDgzMDpcdFx0XHR9XG4gODMxOlx0XHRcdGVsc2VcbiA4MzI6XHRcdFx0e1xuIDgzMzpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODM0Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4gODM1Olx0XHRcdH1cbiA4MzY6XHRcbiA4Mzc6XHRcdFx0LyogQ29tbWFuZCBCdWZmZXIgZnVsbCA/IC1cdTAwM2Ugc2VuZCBpdCB0byBjYW1lcmEgKi9cbiA4Mzg6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vpbl9jb3VudCA9PSA4KVxuIDgzOTpcdFx0XHR7XG4gODQwOlx0XHRcdFx0aW50IGFuc3dlcnNpemU7XG4gODQxOlx0XG4gODQyOlx0XHRcdFx0aWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKVxuIDg0MzpcdFx0XHRcdHtcbiA4NDQ6XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gODQ1Olx0XHRcdFx0XHRcdFwmIzM0O0NhbWVyYSBkaWRuJiMzOTt0IGdldCByZWFkeS5cXG5cJiMzNDspO1xuIDg0NjpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA4NDc6XHRcdFx0XHRcdHJldHVybiAtRUlPO1xuIDg0ODpcdFx0XHRcdH1cbiA4NDk6XHRcbiA4NTA6XHRcdFx0XHRhbnN3ZXJzaXplPW1kYzgwMF9nZXRBbnN3ZXJTaXplIChtZGM4MDAtXHUwMDNlaW5bMV0pO1xuIDg1MTpcdFxuIDg1MjpcdFx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1XT1JLSU5HO1xuIDg1MzpcdFx0XHRcdG1lbWNweSAobWRjODAwLVx1MDAzZXdyaXRlX3VyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIsIG1kYzgwMC1cdTAwM2Vpbiw4KTtcbiA4NTQ6XHRcdFx0XHRtZGM4MDAtXHUwMDNld3JpdGVfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gODU1Olx0XHRcdFx0cmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKG1kYzgwMC1cdTAwM2V3cml0ZV91cmIsIEdGUF9LRVJORUwpO1xuIDg1NjpcdFx0XHRcdGlmIChyZXR2YWwpIHtcbiA4NTc6XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gODU4Olx0XHRcdFx0XHRcdFwmIzM0O3N1Ym1pdHRpbmcgd3JpdGUgdXJiIGZhaWxzIFwmIzM0O1xuIDg1OTpcdFx0XHRcdFx0XHRcJiMzNDsocmV0dmFsPSVpKVxcblwmIzM0OywgcmV0dmFsKTtcbiA4NjA6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODYxOlx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA4NjI6XHRcdFx0XHR9XG4gODYzOlx0XHRcdFx0d2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC1cdTAwM2V3cml0ZV93YWl0LCBtZGM4MDAtXHUwMDNld3JpdHRlbixcbiA4NjQ6XHRcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhUT19XUklURV9HRVRfUkVBRFkpKTtcbiA4NjU6XHRcdFx0XHRtZGM4MDAtXHUwMDNld3JpdHRlbiA9IDA7XG4gODY2Olx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBXT1JLSU5HKVxuIDg2NzpcdFx0XHRcdHtcbiA4Njg6XHRcdFx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNld3JpdGVfdXJiKTtcbiA4Njk6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODcwOlx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA4NzE6XHRcdFx0XHR9XG4gODcyOlx0XG4gODczOlx0XHRcdFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgbWRjODAwLVx1MDAzZWluWzFdKVxuIDg3NDpcdFx0XHRcdHtcbiA4NzU6XHRcdFx0XHRcdGNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi9cbiA4NzY6XHRcdFx0XHRcdGNhc2UgMHgzZTogLyogVGFrZSBzaG90IGluIEZpbmUgTW9kZSAoV0NhbSBNb2RlKSAqL1xuIDg3NzpcdFx0XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXBpY19sZW4gXHUwMDNjIDApXG4gODc4Olx0XHRcdFx0XHRcdHtcbiA4Nzk6XHRcdFx0XHRcdFx0XHRkZXZfZXJyKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LFxuIDg4MDpcdFx0XHRcdFx0XHRcdFx0XCYjMzQ7Y2FsbCAweDA3IGJlZm9yZSBcJiMzNDtcbiA4ODE6XHRcdFx0XHRcdFx0XHRcdFwmIzM0OzB4MDUsMHgzZVxcblwmIzM0Oyk7XG4gODgyOlx0XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZXN0YXRlPVJFQURZO1xuIDg4MzpcdFx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODg0Olx0XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gODg1Olx0XHRcdFx0XHRcdH1cbiA4ODY6XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZXBpY19sZW49LTE7XG4gODg3Olx0XHRcdFx0XHRcdGZhbGx0aHJvdWdoO1xuIDg4ODpcdFxuIDg4OTpcdFx0XHRcdFx0Y2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi9cbiA4OTA6XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkX2xlZnQ9YW5zd2Vyc2l6ZSYjNDM7NjQ7XG4gODkxOlx0XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1ET1dOTE9BRDtcbiA4OTI6XHRcdFx0XHRcdFx0bWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0RPV05MT0FEX0dFVF9CVVNZKTtcbiA4OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gODk0Olx0XG4gODk1Olx0XG4gODk2Olx0XHRcdFx0XHRkZWZhdWx0OlxuIDg5NzpcdFx0XHRcdFx0XHRpZiAoYW5zd2Vyc2l6ZSlcbiA4OTg6XHRcdFx0XHRcdFx0e1xuIDg5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI2MQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiAxNzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUHJvYmUgUGF0Y2ggYW5kIEtNU0FOIEp1c3RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHJlZ2lzdGVyZWQgdGhlIFVTQiBkZXZpY2Ugd2l0aCBgdXNiX3JlZ2lzdGVyX2RldmAgKmJlZm9yZSogZnVsbHkgaW5pdGlhbGl6aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSBhbmQgVVJCcywgY3JlYXRpbmcgYSB3aW5kb3cgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gb2NjdXIgYmVmb3JlIHRoZSBkcml2ZXIgd2FzIHJlYWR5LiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlLiBUaGUgcGF0Y2ggc21hcnRseSByZW9yZGVycyB0aGUgcmVnaXN0cmF0aW9uLCBtb3ZpbmcgaXQgdG8gKmFmdGVyKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSBhbmQgdGhlIGBpb19sb2NrYCBoYXMgYmVlbiByZWxlYXNlZC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nLiBJZiBgdXNiX3JlZ2lzdGVyX2RldmAgZmFpbHMsIHRoZSBgbWRjODAwLSZndDtkZXZgIHBvaW50ZXIgaXMgc2V0IHRvIGBOVUxMYCBhbmQgdGhlIGBtZGM4MDAtJmd0O3N0YXRlYCBpcyBzZXQgdG8gYE5PVF9DT05ORUNURURgLCBlbnN1cmluZyBhIGNsZWFuIHRlYXJkb3duLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJiMzOTtzIHB1cnBvc2UsIG5vLCBpdCBkb2VzIG5vdC4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gSG93ZXZlciwgdGhlIHBhdGNoIGl0c2VsZiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyBzb2xlbHkgYWJvdXQgc3luY2hyb25pemF0aW9uIGFuZCBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcGF0Y2ggcmVhcnJhbmdlcyAqd2hlbiogdGhlIGRyaXZlciBiZWNvbWVzIGFjY2Vzc2libGU7IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IGNvZGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGlzIHVzZWQuIFRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGZvY3VzIG9uIHRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIHRvIGhhbmRsZSB0aGUgZGV2aWNlJiMzOTtzIG9wZW4vY2xvc2UgY2FsbHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBsb2NrIHVzYWdlLCBvciBkZXZpY2UgbGlmZWN5Y2xlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcyBvZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBXZSYjMzk7cmUgYWxyZWFkeSBydW5uaW5nIHRob3NlIGNoZWNrcywgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4KClRoZSByZWFzb25pbmcgSSYjMzk7bGwgcHJvdmlkZSBpcyB0aGlzOiBUaGlzIHBhdGNoIHJlb3JnYW5pemVzIFVTQiBkZXZpY2UgcmVnaXN0cmF0aW9uIChgdXNiX3JlZ2lzdGVyX2RldigpYCkgaW4gYG1kYzgwMF91c2JfcHJvYmUoKWAgdG8gb2NjdXIgYWZ0ZXIgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgdGhlIGRldmljZSBzdGF0ZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIGBpb19sb2NrYCBpcyB1bmxvY2tlZC4gRXJyb3IgaGFuZGxpbmcgaXMgYWRkZWQgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIGlmIHJlZ2lzdHJhdGlvbiBmYWlscy4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBmb2N1cyBpcyByZXNvbHZpbmcgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZGV2aWNlIHByb2JlLiBUaGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgYmVzdCBhZGRyZXNzZWQgdXNpbmcgS0FTQU4gYW5kIExPQ0tERVAgYW5kIHRoZSBzdGFuZGFyZCBkZWJ1ZyBmYWNpbGl0aWVzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4gaXMgdW5uZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDAuNTA4ODkyNTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0OTA0MDQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCXCIsXG4gICAgXCJVU0JfTURDODAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRjODAwX3VzYl9wcm9iZVwiLFxuICAgIFwibWRjODAwX2RldmljZV9vcGVuXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlYWRcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfd3JpdGVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2VfcmVsZWFzZVwiLFxuICAgIFwibWRjODAwX3VzYl9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZSBpbiBtZGM4MDBfdXNiX3Byb2JlIGluIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkcml2ZXIsIG1vdmluZyB1c2JfcmVnaXN0ZXJfZGV2IGFmdGVyIFVSQiBzZXR1cCBhbmQgYWRkaW5nIHByb3BlciBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChEdW1teSBIQ0QgLyBSYXcgR2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDAuNTA4ODk4MTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1NzIwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YmZiZmE2OWFmYzdmMzVhMmQ2ODc2NWMxN2NlZjcxMTVhMDU0ODNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xcbmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcXG4rKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xcbkBAIC00ODIsMTMgKzQ4Miw2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiBcXG4tXFx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcXHUwMDI2bWRjODAwX2NsYXNzKTtcXG4tXFx0aWYgKHJldHZhbCkge1xcbi1cXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxcXG5cXFwiKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFx0fVxcbi1cXG4gXFx0bWRjODAwLVxcdTAwM2VkZXY9ZGV2O1xcbiBcXHRtZGM4MDAtXFx1MDAzZW9wZW49MDtcXG4gXFxuQEAgLTUyNyw2ICs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1SRUFEWTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4rXFxuK1xcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXFx1MDAyNm1kYzgwMF9jbGFzcyk7XFxuK1xcdGlmIChyZXR2YWwpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcXFxuXFxcIik7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuK1xcdFxcdG1kYzgwMC1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4gXFx0XFxuIFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWRjODAwKTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjAxLjA1MTI5ODQ3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzg4NjQ5ODc0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCXCIsXG4gICAgXCJVU0JfTURDODAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRjODAwX3VzYl9wcm9iZVwiLFxuICAgIFwibWRjODAwX2RldmljZV9vcGVuXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlYWRcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfd3JpdGVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2VfcmVsZWFzZVwiLFxuICAgIFwibWRjODAwX3VzYl9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gc2VxdWVuY2UgaW4gbWRjODAwX3VzYl9wcm9iZSBpbiB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZHJpdmVyLCBtb3ZpbmcgdXNiX3JlZ2lzdGVyX2RldiBhZnRlciBVUkIgc2V0dXAgYW5kIGFkZGluZyBwcm9wZXIgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoRHVtbXkgSENEIC8gUmF3IEdhZGdldCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5pbmRleCBjYTI4N2I3NzBlOGNiLi4wMTkzMTQ3MDJlMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcbisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5AQCAtNDgyLDEzICs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gXG4tXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4tXHRpZiAocmV0dmFsKSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcblwiKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4tXG4gXHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiBcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gXG5AQCAtNTI3LDYgKzUyMCwxNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0bWRjODAwLVx1MDAzZXN0YXRlPVJFQURZO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbitcbitcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbitcdGlmIChyZXR2YWwpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCIpO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbitcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRcdG1kYzgwMC1cdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuIFx0XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjAxLjA1MTMwMDkxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMzIwNTkwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBjaGFuZ2UgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0J3MgZGl2ZSByaWdodCBpbiBhbmQgbG9vayBhdCB0aGUgZGlmZi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcylgIHdhcyBtb3ZlZCAqYWZ0ZXIqIGBtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spYCBpbiB0aGUgYG1kYzgwMF91c2JfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBvcmRlcmluZyBvZiBtdXRleCBvcGVyYXRpb25zIGFuZCByZWdpc3RyYXRpb24gaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gSSBuZWVkIHRvIGtub3cgaG93IGBtZGM4MDAuY2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBib3RoIGBtZGM4MDAuY2AgaXRzZWxmIGFuZCBpdHMgY29ycmVzcG9uZGluZyBLY29uZmlnIGZpbGUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhY2Nlc3NpYmxlIGl0IGlzIGZvciB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBJIGNhbiBnZXQgdG8gaXQgdGhyb3VnaCBzeXprYWxsZXIsIHBlcmhhcHMgdmlhIHJhdyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi5cblxuSSdtIGdvaW5nIHRvIGdyYWIgdGhvc2UgZmlsZXMgbm93LCBlaXRoZXIgd2l0aCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGdldCB0aGUgbmVlZGVkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTowOC4xODMzNjU2OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTYxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVTQl9NREM4MDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX1VTQilcXHRcXHQrPSBzdG9yYWdlL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ2LVxcbmRyaXZlcnMvdXNiL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19VU0JfTURDODAwKVxcdCs9IGltYWdlL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19VU0JfTUlDUk9URUspXFx0Kz0gaW1hZ2UvXFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnPTU9Y29tbWVudCBcXFwiVVNCIEltYWdpbmcgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnLTYtXFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZzo3OmNvbmZpZyBVU0JfTURDODAwXFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfTURDODAwKVxcdCs9IG1kYzgwMC5vXFxuZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKVxcdCs9IG1pY3JvdGVrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDguMzI2OTM1NjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMTE0NjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgZm9yIFVTQiBJbWFnaW5nIERyaXZlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVVNCIGltYWdpbmcgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEknbGwgYmUgcXVpY2tseSBhc3Nlc3NpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBzeW1ib2xzIHVzZWQsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgaW52b2x2ZWQuIFRoaXMgaW5pdGlhbCBzY2FuIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIG1hZGUgZm9yIHRoZXNlIGRyaXZlcnM6IEhvdyBhcmUgZGlmZmVyZW50IFVTQiBpbWFnaW5nIGRldmljZXMgc3VwcG9ydGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBsYXRlcj9cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjEwLjYzODA4NDI4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBJbWFnaW5nIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiVVNCIEltYWdpbmcgZGV2aWNlc1xcXCJcXG4gICA2OlxcdFxcbiAgIDc6XFx0Y29uZmlnIFVTQl9NREM4MDBcXG4gICA4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0XFxcIlxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHN0aWxsIGNhbWVyYSB0b1xcbiAgMTE6XFx0XFx0ICB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggZ3Bob3RvIDAuNC4zXFxuICAxMjpcXHRcXHQgIGFuZCBoaWdoZXIgKGxvb2sgYXQgXFx1MDAzY2h0dHA6Ly93d3cuZ3Bob3RvLm9yZy9cXHUwMDNlKS5cXG4gIDEzOlxcdFxcdCAgVG8gdXNlIGl0IGNyZWF0ZSBhIGRldmljZSBub2RlIHdpdGggXFxcIm1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxcIiBhbmRcXG4gIDE0OlxcdFxcdCAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZGM4MDAuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBVU0JfTUlDUk9URUtcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3RlayBYNlVTQiBzY2FubmVyIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgTWljcm90ZWsgWDZVU0IgYW5kXFxuICAyNDpcXHRcXHQgIHBvc3NpYmx5IHRoZSBQaGFudG9tIDMzNkNYLCBQaGFudG9tIEM2IGFuZCBTY2FuTWFrZXIgVjZVKFMpTC5cXG4gIDI1OlxcdFxcdCAgU3VwcG9ydCBmb3IgYW55dGhpbmcgYnV0IHRoZSBYNiBpcyBleHBlcmltZW50YWwuXFxuICAyNjpcXHRcXHQgIFBsZWFzZSByZXBvcnQgZmFpbHVyZXMgYW5kIHN1Y2Nlc3Nlcy5cXG4gIDI3OlxcdFxcdCAgVGhlIHNjYW5uZXIgd2lsbCBhcHBlYXIgYXMgYSBzY3NpIGdlbmVyaWMgZGV2aWNlIHRvIHRoZSByZXN0XFxuICAyODpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFNjc2kgc3VwcG9ydCBpcyByZXF1aXJlZC5cXG4gIDI5OlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBjYWxsZWQgbWljcm90ZWsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjEwLjYzODE0OTc0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjY3NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgVVNCIE1EQzgwMCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgVVNCX01EQzgwMGAgaXMgdGhlIGtleSBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtJ3MgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZXMuIEknZCBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgY29yZTogZWl0aGVyIGBkcml2ZXJzL3VzYi9LY29uZmlnYCBvciBgZHJpdmVycy91c2IvTWFrZWZpbGVgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBvYmplY3QgZmlsZSBpbmNsdXNpb24gd2lsbCByZXNpZGUuIEJ1dCwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgKmNvbmZpZ3VyYXRpb24qIGl0ZW0sIHJhdGhlciB0aGFuIGEgYnVpbGQgKnRhcmdldCosIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIHByaW9yaXRpemUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpcnN0LiBJJ20gbG9va2luZyBmb3IgYW55IGBjb25maWdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvciB0aGUgYE1EQzgwMGAgZGV2aWNlLiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AuIExldCdzIHNlZSB3aGF0J3MgaW4gYGRyaXZlcnMvdXNiL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxMy4wMDQ5MDE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc3NzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbWFnZS9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL0tjb25maWc9MTE2PXNvdXJjZSBcXFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTE4OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3VzYi9LY29uZmlnLTExOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MTMuMDYzNjg1MjM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1MDA4NjkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbWRjODAwLmNgIGZvciBVU0IgSW5zaWdodCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgbWRjODAwX3VzYl9wcm9iZWAg4oCTIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0aGF04oCZbGwgdGVsbCBtZSBob3cgdGhpcyBwYXJ0aWN1bGFyIFVTQiBkZXZpY2UgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSB3YW50IHRvIHNlZSB3aGF0IGluaXRpYWxpemF0aW9uIHN0ZXBzIHRoZXkncmUgdGFraW5nLCBob3cgdGhleSdyZSBoYW5kbGluZyBkZXZpY2UgZGV0ZWN0aW9uLCBhbmQgd2hhdCBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIE1EQzgwMCB0aGV5J3JlIGFkZHJlc3NpbmcgcmlnaHQgb2ZmIHRoZSBiYXQuIEJleW9uZCB0aGF0IGluaXRpYWwgcHJvYmUsIEknbSBhbHNvIGdvaW5nIHRvIHNraW0gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGBtZGM4MDBfdXNiX3Byb2JlYCwgYW5kIGxvb2sgZm9yIGFueSBpbnRlcmVzdGluZyBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjdXN0b20gZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0bz8gVGhlIGJpZ2dlciBwaWN0dXJlIG1hdHRlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIncyBhcmNoaXRlY3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIG5ldyBvciBkaWZmZXJlbnQgY29tcGFyZWQgdG8gcHJldmlvdXMgdmVyc2lvbnMuIEl0J3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjE1LjQxMzc3NTEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdHtcXG4gNDYxOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09LTE7XFxuIDQ2MjpcXHRcXHRcXHRmb3IgKGo9MDsgalxcdTAwM2M0OyBqKyspXFxuIDQ2MzpcXHRcXHRcXHR7XFxuIDQ2NDpcXHRcXHRcXHRcXHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXFx1MDAyNmludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxcbiA0NjU6XFx0XFx0XFx0XFx0e1xcbiA0NjY6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VlbmRwb2ludFtpXT1pbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgO1xcbiA0Njc6XFx0XFx0XFx0XFx0XFx0aWYgKGk9PTEpXFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHR7XFxuIDQ2OTpcXHRcXHRcXHRcXHRcXHRcXHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iSW50ZXJ2YWw7XFxuIDQ3MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDQ3MTpcXHRcXHRcXHRcXHR9XFxuIDQ3MjpcXHRcXHRcXHR9XFxuIDQ3MzpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcXG4gNDc0OlxcdFxcdFxcdHtcXG4gNDc1OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcInByb2JlIGZhaWxzIC1cXHUwMDNlIFdyb25nIEVuZHBvaW50cy5cXFxcblxcXCIpO1xcbiA0NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ3NzpcXHRcXHRcXHR9XFxuIDQ3ODpcXHRcXHR9XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLlxcXFxuXFxcIik7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2PWRldjtcXG4gNDg2OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3Blbj0wO1xcbiA0ODc6XFx0XFxuIDQ4ODpcXHRcXHQvKiBTZXR1cCBVUkIgU3RydWN0cyAqL1xcbiA0ODk6XFx0XFx0dXNiX2ZpbGxfaW50X3VyYiAoXFxuIDQ5MDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWlycV91cmIsXFxuIDQ5MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldixcXG4gNDkyOlxcdFxcdFxcdHVzYl9yY3ZpbnRwaXBlIChtZGM4MDAtXFx1MDAzZWRldixtZGM4MDAtXFx1MDAzZWVuZHBvaW50IFsxXSksXFxuIDQ5MzpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWlycV91cmJfYnVmZmVyLFxcbiA0OTQ6XFx0XFx0XFx0OCxcXG4gNDk1OlxcdFxcdFxcdG1kYzgwMF91c2JfaXJxLFxcbiA0OTY6XFx0XFx0XFx0bWRjODAwLFxcbiA0OTc6XFx0XFx0XFx0aXJxX2ludGVydmFsXFxuIDQ5ODpcXHRcXHQpO1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYiAoXFxuIDUwMTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYixcXG4gNTAyOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2LFxcbiA1MDM6XFx0XFx0XFx0dXNiX3NuZGJ1bGtwaXBlIChtZGM4MDAtXFx1MDAzZWRldiwgbWRjODAwLVxcdTAwM2VlbmRwb2ludFswXSksXFxuIDUwNDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYl9idWZmZXIsXFxuIDUwNTpcXHRcXHRcXHQ4LFxcbiA1MDY6XFx0XFx0XFx0bWRjODAwX3VzYl93cml0ZV9ub3RpZnksXFxuIDUwNzpcXHRcXHRcXHRtZGM4MDBcXG4gNTA4OlxcdFxcdCk7XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdHVzYl9maWxsX2J1bGtfdXJiIChcXG4gNTExOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLFxcbiA1MTI6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYsXFxuIDUxMzpcXHRcXHRcXHR1c2JfcmN2YnVsa3BpcGUgKG1kYzgwMC1cXHUwMDNlZGV2LCBtZGM4MDAtXFx1MDAzZWVuZHBvaW50IFszXSksXFxuIDUxNDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYl9idWZmZXIsXFxuIDUxNTpcXHRcXHRcXHQ2NCxcXG4gNTE2OlxcdFxcdFxcdG1kYzgwMF91c2JfZG93bmxvYWRfbm90aWZ5LFxcbiA1MTc6XFx0XFx0XFx0bWRjODAwXFxuIDUxODpcXHRcXHQpO1xcbiA1MTk6XFx0XFxuIDUyMDpcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVJFQURZO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXFx1MDAyNm1kYzgwMF9jbGFzcyk7XFxuIDUyNTpcXHRcXHRpZiAocmV0dmFsKSB7XFxuIDUyNjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxcXG5cXFwiKTtcXG4gNTI3OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUyODpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDUyOTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlID0gTk9UX0NPTk5FQ1RFRDtcXG4gNTMwOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNTMxOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1MzI6XFx0XFx0fVxcbiA1MzM6XFx0XFx0XFxuIDUzNDpcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XFxuIDUzNTpcXHRcXHRyZXR1cm4gMDtcXG4gNTM2OlxcdH1cXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFxuIDUzOTpcXHQvKlxcbiA1NDA6XFx0ICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKVxcbiA1NDE6XFx0ICovXFxuIDU0MjpcXHRzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiA1NDM6XFx0e1xcbiA1NDQ6XFx0XFx0c3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRkZXZfZGJnKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCIoJXMpIGNhbGxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA1NDc6XFx0XFxuIDU0ODpcXHRcXHRpZiAobWRjODAwKSB7XFxuIDU0OTpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxNS40MTM5MDQwMjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNjk1Mzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWRjODAwLmNgKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgc25pcHBldHMgb2YgYG1kYzgwMC5jYCwgYnV0IHRvICpyZWFsbHkqIGdyYXNwIHRoaXMgZHJpdmVyJ3MgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgdGhpbmcuIFRoZSBwYXJ0aWFsIHZpZXdzIGFyZSBoZWxwZnVsIGZvciBjb250ZXh0LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZHJpdmVyIGxpZmVjeWNsZSwgdGhlIGludGVycnVwdCBoYW5kbGluZywgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9ucyDigJMgYWxsIG9mIHRoYXQgcmVxdWlyZXMgYSBjb21wcmVoZW5zaXZlIHZpZXcuIEkgY2FuIHByb2JhYmx5IGluZmVyIGEgbG90IGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGJ1dCB0aGUgbnVhbmNlcyBhcmUgb2Z0ZW4gaGlkZGVuIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IHZpc2libGUuIFdoYXQgYXJlIHRoZSBzdWJ0bGUgaW50ZXJhY3Rpb25zPyBIb3cgZG9lcyBlcnJvciBoYW5kbGluZyB3b3JrIGluIGEgcmVhbC13b3JsZCBzY2VuYXJpbz8gR2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBtYWtlIGFueSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb25zLCBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHN1Z2dlc3QgaW1wcm92ZW1lbnRzIHRvIHRoZSBhcmNoaXRlY3R1cmUgd2l0aCBjb25maWRlbmNlLiBMZXQncyBnZXQgdGhlIHdob2xlIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjE3LjQ1MDg2MDQzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqXFx0VVNCLUtlcm5lbCBEcml2ZXIgZm9yIHRoZSBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxuICAgOTpcXHQgKlxcdChjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqXFxuICAxMjpcXHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxcbiAgMTM6XFx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcXG4gIDE0OlxcdCAqIHRvIHRoZSBLZXJuZWwgTm9kZS5cXG4gIDE1OlxcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcXG4gIDE2OlxcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxuICAxNzpcXHQgKlxcbiAgMTg6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXFxuICAxOTpcXHQgKiBcXG4gIDIwOlxcdCAqIEZpeDogbWRjODAwIHVzZWQgc2xlZXBfb24gYW5kIHNsZXB0IHdpdGggaW9fbG9jayBoZWxkLlxcbiAgMjE6XFx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcXG4gIDIyOlxcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cXG4gIDIzOlxcdCAqIGJ5IE9saXZlciBOZXVrdW0gXFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVxcdTAwM2VcXG4gIDI0OlxcdCAqICgwMi8xMi8yMDAxKVxcbiAgMjU6XFx0ICogXFxuICAyNjpcXHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxcbiAgMjc6XFx0ICogKDA4LzA0LzIwMDEpIGdiXFxuICAyODpcXHQgKlxcbiAgMjk6XFx0ICogdmVyc2lvbiAwLjcuNVxcbiAgMzA6XFx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cXG4gIDMxOlxcdCAqIFRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIFxcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcXHUwMDNlIHdobyBcXG4gIDMyOlxcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cXG4gIDMzOlxcdCAqICgzMC8xMC8yMDAwKVxcbiAgMzQ6XFx0ICpcXG4gIDM1OlxcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cXG4gIDM2OlxcdCAqIGJ5IEdyZWcgS0ggXFx1MDAzY2dyZWdAa3JvYWguY29tXFx1MDAzZVxcbiAgMzc6XFx0ICogKDEzLzEwLzIwMDApXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICogdmVyc2lvbiAwLjcuM1xcbiAgNDA6XFx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cXHUwMDNlc3RhdGUgZmllbGQgZ2V0cyBzZXQgdG8gUkVBRFkgYWZ0ZXIgdGhlXFxuICA0MTpcXHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcXG4gIDQyOlxcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXFxuICA0MzpcXHQgKiBoYW5nIHVwcy5cXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKiB2ZXJzaW9uIDAuNy4xXFxuICA0NjpcXHQgKiBNT0RfSU5DIGFuZCBNT0RfREVDIGFyZSBjaGFuZ2VkIGluIHVzYl9wcm9iZSB0byBwcmV2ZW50IGxvYWQvdW5sb2FkXFxuICA0NzpcXHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cXG4gIDQ4OlxcdCAqICgwNC8wNC8yMDAwKVxcbiAgNDk6XFx0ICpcXG4gIDUwOlxcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxcbiAgNTE6XFx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cXG4gIDUyOlxcdCAqICgyNi8wMy8yMDAwKVxcbiAgNTM6XFx0ICpcXG4gIDU0OlxcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cXG4gIDU1OlxcdCAqICgwMS8wMy8yMDAwKVxcbiAgNTY6XFx0ICpcXG4gIDU3OlxcdCAqIHZlcnNpb24gMC43LjBcXG4gIDU4OlxcdCAqIFJld3JpdGUgb2YgdGhlIGRyaXZlciA6IFRoZSBkcml2ZXIgbm93IHVzZXMgVVJCJ3MuIFRoZSBvbGQgc3R1ZmZcXG4gIDU5OlxcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXFxuICA2MDpcXHQgKlxcbiAgNjE6XFx0ICogdmVyc2lvbiAwLjYuMFxcbiAgNjI6XFx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXFxuICA2MzpcXHQgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRyaXZlci4gQSBzcGVjaWFsIGV4ZWN1dGVDb21tYW5kIGZ1bmN0aW9uXFxuICA2NDpcXHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxcbiAgNjU6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxcbiAgNjY6XFx0ICogRWl0aGVyIHdpdGggdGhlIGRldi1cXHUwMDNlYnVzLVxcdTAwM2VvcHMtXFx1MDAzZWJ1bGsuLi4gb3Igd2l0aCBjYWxsYmFjayBmdW5jdGlvbi5cXG4gIDY3OlxcdCAqICgwOS8xMS8xOTk5KVxcbiAgNjg6XFx0ICpcXG4gIDY5OlxcdCAqIHZlcnNpb24gMC41LjA6XFxuICA3MDpcXHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcXG4gIDcxOlxcdCAqIGZ1bmN0aW9ucyB3b3JrLlxcbiAgNzI6XFx0ICogKDIwLzEwLzE5OTkpXFxuICA3MzpcXHQgKi9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAgNzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgNzc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICA3ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDc5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4gIDgwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICA4MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgODI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDgzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDg0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICA4NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDg2OlxcdFxcbiAgODc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgODg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXFxuICA5MjpcXHQgKi9cXG4gIDkzOlxcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXFxcInYwLjcuNSAoMzAvMTAvMjAwMClcXFwiXFxuICA5NDpcXHQjZGVmaW5lIERSSVZFUl9BVVRIT1IgXFxcIkhlbm5pbmcgWmFiZWwgXFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVxcdTAwM2VcXFwiXFxuICA5NTpcXHQjZGVmaW5lIERSSVZFUl9ERVNDIFxcXCJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxcIlxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi9cXG4gIDk4OlxcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcXHQweDA1NWZcXG4gIDk5OlxcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcXHQweGE4MDBcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxNy40NTEwMTM5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzNjg2NTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtZGM4MDAuYyBVU0IgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBkcml2ZXIgYmV0dGVyLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgVVNCIGltYWdlIGNsYXNzIGFuZCBob3cgaXQgZ2VuZXJhbGx5IHdvcmtzLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBgbWRjODAwYCBpbXBsZW1lbnRhdGlvbiBkZXZpYXRlcyBmcm9tIHRoZSBzdGFuZGFyZC4gV2hhdCBhcmUgaXRzIHNwZWNpZmljIHF1aXJrcyBhbmQgb3B0aW1pemF0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBwb3RlbnRpYWwgYnVncyBsdXJraW5nPyBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIHRoZSBlbmRwb2ludHMgZmlyc3QgYW5kIHRyeSBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGVuIGludmVzdGlnYXRlIHRoZSB1bnVzdWFsIGFzcGVjdHMgb2YgdGhlIGRldmljZSdzIGNvbnRyb2wgaW50ZXJmYWNlLCBhbmQgZmluYWxseSB0cnkgYW5kIGlkZW50aWZ5IGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciByZWFkcyBvciB3cml0ZXMuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGUgZGV2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MjEuNTg3ODgyMTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkID0gMTtcXG4gNDAxOlxcdFxcdHdha2VfdXAgKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3dhaXQpO1xcbiA0MDI6XFx0fVxcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXG4gNDA1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gNDA2OlxcdFxcdFByb2JpbmcgZm9yIHRoZSBDYW1lcmFcXG4gNDA3OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDQwODpcXHRcXG4gNDA5OlxcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcXG4gNDEwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzO1xcbiA0MTE6XFx0c3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHtcXG4gNDEyOlxcdFxcdC5uYW1lID1cXHRcXHRcXFwibWRjODAwJWRcXFwiLFxcbiA0MTM6XFx0XFx0LmZvcHMgPVxcdFxcdFxcdTAwMjZtZGM4MDBfZGV2aWNlX29wcyxcXG4gNDE0OlxcdFxcdC5taW5vcl9iYXNlID1cXHRNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsXFxuIDQxNTpcXHR9O1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXG4gNDE4OlxcdC8qXFxuIDQxOTpcXHQgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXNcXG4gNDIwOlxcdCAqL1xcbiA0MjE6XFx0c3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gNDIyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDQyMzpcXHR7XFxuIDQyNDpcXHRcXHRpbnQgaSxqO1xcbiA0MjU6XFx0XFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjO1xcbiA0MjY6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpO1xcbiA0Mjc6XFx0XFx0aW50IGlycV9pbnRlcnZhbD0wO1xcbiA0Mjg6XFx0XFx0aW50IHJldHZhbDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWQuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZGV2ICE9IE5VTEwpXFxuIDQzNDpcXHRcXHR7XFxuIDQzNTpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4gNDM2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Mzc6XFx0XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKVxcbiA0NDA6XFx0XFx0e1xcbiA0NDE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LFxcbiA0NDI6XFx0XFx0XFx0XFx0XFxcInByb2JlIGZhaWxzIC1cXHUwMDNlIHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4gNDQzOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aW50Zl9kZXNjID0gaW50Zi1cXHUwMDNlY3VyX2FsdHNldHRpbmc7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmIChcXG4gNDQ4OlxcdFxcdFxcdFxcdCggaW50Zl9kZXNjLVxcdTAwM2VkZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAweGZmIClcXG4gNDQ5OlxcdFxcdFxcdHx8XFx0KCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDAgKVxcbiA0NTA6XFx0XFx0XFx0fHwgKCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKVxcbiA0NTE6XFx0XFx0XFx0fHwgKCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYk51bUVuZHBvaW50cyAhPSA0KVxcbiA0NTI6XFx0XFx0KVxcbiA0NTM6XFx0XFx0e1xcbiA0NTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwicHJvYmUgZmFpbHMgLVxcdTAwM2Ugd3JvbmcgSW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4gNDU1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBDaGVjayB0aGUgRW5kcG9pbnRzICovXFxuIDQ1OTpcXHRcXHRmb3IgKGk9MDsgaVxcdTAwM2M0OyBpKyspXFxuIDQ2MDpcXHRcXHR7XFxuIDQ2MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWVuZHBvaW50W2ldPS0xO1xcbiA0NjI6XFx0XFx0XFx0Zm9yIChqPTA7IGpcXHUwMDNjNDsgaisrKVxcbiA0NjM6XFx0XFx0XFx0e1xcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFxcdTAwMjZpbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcXG4gNDY1OlxcdFxcdFxcdFxcdHtcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcXG4gNDY3OlxcdFxcdFxcdFxcdFxcdGlmIChpPT0xKVxcbiA0Njg6XFx0XFx0XFx0XFx0XFx0e1xcbiA0Njk6XFx0XFx0XFx0XFx0XFx0XFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsO1xcbiA0NzA6XFx0XFx0XFx0XFx0XFx0fVxcbiA0NzE6XFx0XFx0XFx0XFx0fVxcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXFxuIDQ3NDpcXHRcXHRcXHR7XFxuIDQ3NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSBXcm9uZyBFbmRwb2ludHMuXFxcXG5cXFwiKTtcXG4gNDc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Nzc6XFx0XFx0XFx0fVxcbiA0Nzg6XFx0XFx0fVxcbiA0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjIxLjU4Nzk5OTM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ5MjA2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTURDODAwIFVTQiBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBVU0JfTURDODAwYCBkcml2ZXIgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZyB2aWEgc3l6a2FsbGVyJ3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGdvb2QgbmV3cyBpcywgaXQgc2VlbXMgbGlrZSBgVVNCX01EQzgwMGAgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQncyBleGNlbGxlbnQuIFN5emthbGxlciBsZXZlcmFnZXMgdGhlIFVTQiBSYXcgR2FkZ2V0IGFuZCBEdW1teSBIQ0QgdG8gZW11bGF0ZSB0aGVzZSBkZXZpY2VzLCBhbmQgdGFyZ2V0cyBkcml2ZXJzIHdpdGggcHJvYmVzLCBmdW5jdGlvbiBwb2ludGVycyAoZm9wcyksIGFuZCBzbyBvbiwgd2hpY2ggbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBzeXprYWxsZXIgdXRpbGl6ZXMgcHJpbWl0aXZlcyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6X3VzYl9jb250cm9sX2lvYCB0byBpbnRlcmFjdCB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLCB3aGljaCBpcyBrZXkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYG1kYzgwMF91c2JfcHJvYmVgLiBUaGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiB0aGlzIGZ1bmN0aW9uIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNhbGxlZCBgdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpYCAqYmVmb3JlKiBpbml0aWFsaXppbmcgVVJCIHN0cnVjdHMgYW5kIHNldHRpbmcgdGhlIGBtZGM4MDAtXHUwMDNlZGV2YCBhbmQgYG1kYzgwMC1cdTAwM2VzdGF0ZWAgbWVtYmVycy4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24uIElmLCBmb3IgaW5zdGFuY2UsIGBvcGVuYCwgYHJlYWRgLCBvciBgd3JpdGVgIHdlcmUgY2FsbGVkICpkdXJpbmcqIHRoaXMgdnVsbmVyYWJsZSBwZXJpb2QsIG9yIGlmIHRoZSByZWdpc3RyYXRpb24gaXRzZWxmIGZhaWxlZCwgdGhlIHN5c3RlbSBjb3VsZCBlbnRlciBhbiB1bmRlZmluZWQgc3RhdGUuIFRoZSBwYXRjaCdzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBgdXNiX3JlZ2lzdGVyX2RldmAgY2FsbCB0byB0aGUgKmVuZCogb2YgYG1kYzgwMF91c2JfcHJvYmVgLCBhZnRlciBhbGwgdGhlIFVSQnMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgbXV0ZXggaXMgdW5sb2NrZWQuIENydWNpYWxseSwgaXQgYWxzbyBoYW5kbGVzIHRoZSBlcnJvciBjYXNlIHdoZW4gYHVzYl9yZWdpc3Rlcl9kZXZgIGZhaWxzLCByZXNldHRpbmcgYG1kYzgwMC1cdTAwM2VkZXZgIGFuZCBgbWRjODAwLVx1MDAzZXN0YXRlYCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZC5cblxuVG8gZ2V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgZW50aXJlIGBtZGM4MDAuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyBhbGwgdGhlIHN5bWJvbHMsIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgZmlsZSBvcGVyYXRpb25zIChgZm9wc2ApIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToyNi4xMzcyMDkxNDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdCAqIERpc2Nvbm5lY3QgVVNCIGRldmljZSAobWF5YmUgdGhlIE1EQzgwMClcXG4gNTQxOlxcdCAqL1xcbiA1NDI6XFx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gNTQzOlxcdHtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1kYzgwMCkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG4gNTUwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0XFx0dXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsIFxcdTAwMjZtZGM4MDBfY2xhc3MpO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRcXHQvKiBtdXN0IGJlIHVuZGVyIGxvY2sgdG8gbWFrZSBzdXJlIG5vIFVSQlxcbiA1NTU6XFx0XFx0XFx0ICAgaXMgc3VibWl0dGVkIGFmdGVyIHVzYl9raWxsX3VyYigpICovXFxuIDU1NjpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1NTc6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1OT1RfQ09OTkVDVEVEO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNTYwOlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDU2MTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA1NjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1NjM6XFx0XFxuIDU2NDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDU2NTpcXHRcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpO1xcbiA1NjY6XFx0XFx0fVxcbiA1Njc6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcIk11c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxcXFxuXFxcIik7XFxuIDU2ODpcXHR9XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcbiA1NzE6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA1NzI6XFx0XFx0VGhlIE1pc2MgZGV2aWNlIFBhcnQgKGZpbGVfb3BlcmF0aW9ucylcXG4gNTczOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDU3NDpcXHRcXG4gNTc1OlxcdC8qXFxuIDU3NjpcXHQgKiBUaGlzIEZ1bmN0aW9uIGNhbGMgdGhlIEFuc3dlcnNpemUgZm9yIGEgY29tbWFuZC5cXG4gNTc3OlxcdCAqL1xcbiA1Nzg6XFx0c3RhdGljIGludCBtZGM4MDBfZ2V0QW5zd2VyU2l6ZSAoY2hhciBjb21tYW5kKVxcbiA1Nzk6XFx0e1xcbiA1ODA6XFx0XFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgY29tbWFuZClcXG4gNTgxOlxcdFxcdHtcXG4gNTgyOlxcdFxcdFxcdGNhc2UgMHgyYTpcXG4gNTgzOlxcdFxcdFxcdGNhc2UgMHg0OTpcXG4gNTg0OlxcdFxcdFxcdGNhc2UgMHg1MTpcXG4gNTg1OlxcdFxcdFxcdGNhc2UgMHgwZDpcXG4gNTg2OlxcdFxcdFxcdGNhc2UgMHgyMDpcXG4gNTg3OlxcdFxcdFxcdGNhc2UgMHgwNzpcXG4gNTg4OlxcdFxcdFxcdGNhc2UgMHgwMTpcXG4gNTg5OlxcdFxcdFxcdGNhc2UgMHgyNTpcXG4gNTkwOlxcdFxcdFxcdGNhc2UgMHgwMDpcXG4gNTkxOlxcdFxcdFxcdFxcdHJldHVybiA4O1xcbiA1OTI6XFx0XFxuIDU5MzpcXHRcXHRcXHRjYXNlIDB4MDU6XFxuIDU5NDpcXHRcXHRcXHRjYXNlIDB4M2U6XFxuIDU5NTpcXHRcXHRcXHRcXHRyZXR1cm4gbWRjODAwLVxcdTAwM2VwaWNfbGVuO1xcbiA1OTY6XFx0XFxuIDU5NzpcXHRcXHRcXHRjYXNlIDB4MDk6XFxuIDU5ODpcXHRcXHRcXHRcXHRyZXR1cm4gNDA5NjtcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gNjAxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA2MDI6XFx0XFx0fVxcbiA2MDM6XFx0fVxcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXG4gNjA2OlxcdC8qXFxuIDYwNzpcXHQgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLlxcbiA2MDg6XFx0ICovXFxuIDYwOTpcXHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRpbnQgcmV0dmFsPTA7XFxuIDYxMjpcXHRcXHRpbnQgZXJybj0wO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2MTU6XFx0XFx0XFxuIDYxNjpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2MTc6XFx0XFx0e1xcbiA2MTg6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYxOTpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MjYuMTM3MzEwMDA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTA0ODcyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBVU0IgRHJpdmVyIGZvciB0aGUgTURDODAwIENhbWVyYSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgbWRjODAwLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy91c2IvaW1hZ2VgIGRpcmVjdG9yeS4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGluaXRpYWwgcGFydHMgb2YgdGhlIGZ1bmN0aW9uIEkgd2FzIGV4YW1pbmluZy4gQnV0LCBhcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IFVTQiBkZXZpY2UgZHJpdmVycywgSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY2FuIHRoZSByZXN0IG9mIHRoaXMgYG1kYzgwMC5jYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSByb3V0aW5lcywgdW5kZXJzdGFuZCBkYXRhIGZsb3csIGFuZCBtYXliZSBldmVuIGdldCBhIHNlbnNlIG9mIGhvdyB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBlbmRwb2ludCBjb25maWd1cmF0aW9uLCBhbmQgaW1hZ2UgY2FwdHVyZSBwcm9jZXNzZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25uZWN0IHRoZSBkb3RzIHdpdGggdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjI4LjM4Nzc5OTk4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHR9XFxuIDYyMTpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VvcGVuKVxcbiA2MjI6XFx0XFx0e1xcbiA2MjM6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYyNDpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG4gNjI1OlxcdFxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA2Mjg6XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gNjI5OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA2MzA6XFx0XFx0bWRjODAwLVxcdTAwM2VwaWNfaW5kZXg9MDtcXG4gNjMxOlxcdFxcdG1kYzgwMC1cXHUwMDNlcGljX2xlbj0tMTtcXG4gNjMyOlxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9idXN5PTA7XFxuIDYzNTpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdG1kYzgwMC1cXHUwMDNlaXJxX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDYzODpcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2VpcnFfdXJiLCBHRlBfS0VSTkVMKTtcXG4gNjM5OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNjQwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsXFxuIDY0MTpcXHRcXHRcXHRcXHRcXFwicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXFxcblxcXCIsIHJldHZhbCk7XFxuIDY0MjpcXHRcXHRcXHRlcnJuID0gLUVJTztcXG4gNjQzOlxcdFxcdFxcdGdvdG8gZXJyb3Jfb3V0O1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MTtcXG4gNjQ3OlxcdFxcdGRldl9kYmcoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxcXG5cXFwiKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0ZXJyb3Jfb3V0OlxcbiA2NTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NTE6XFx0XFx0cmV0dXJuIGVycm47XFxuIDY1MjpcXHR9XFxuIDY1MzpcXHRcXG4gNjU0OlxcdFxcbiA2NTU6XFx0LypcXG4gNjU2OlxcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XFxuIDY1NzpcXHQgKi9cXG4gNjU4OlxcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGludCByZXR2YWw9MDtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjYzOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZW9wZW4gXFx1MDAyNlxcdTAwMjYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXFxuIDY2NDpcXHRcXHR7XFxuIDY2NTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNjY2OlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDY2NzpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA2Njg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvcGVuPTA7XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHR7XFxuIDY3MjpcXHRcXHRcXHRyZXR2YWw9LUVJTztcXG4gNjczOlxcdFxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NzY6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjc3OlxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFxuIDY4MDpcXHQvKlxcbiA2ODE6XFx0ICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uXFxuIDY4MjpcXHQgKi9cXG4gNjgzOlxcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0c2l6ZV90IGxlZnQ9bGVuLCBzdHM9bGVuOyAvKiBzaW5nbGUgdHJhbnNmZXIgc2l6ZSAqL1xcbiA2ODY6XFx0XFx0Y2hhciBfX3VzZXIgKnB0ciA9IGJ1ZjtcXG4gNjg3OlxcdFxcdGludCByZXR2YWw7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDY5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2OTE6XFx0XFx0e1xcbiA2OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjk0OlxcdFxcdH1cXG4gNjk1OlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlID09IFdPUktJTkcpXFxuIDY5NjpcXHRcXHR7XFxuIDY5NzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXFxcXFxcXCJ3b3JraW5nXFxcXFxcXCJcXFwiXFxuIDY5ODpcXHRcXHRcXHQgICAgICAgXFxcInJlYWNoZWQgZHVyaW5nIHJlYWQgPyFcXFxcblxcXCIpO1xcbiA2OTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzAxOlxcdFxcdH1cXG4gNzAyOlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuKVxcbiA3MDM6XFx0XFx0e1xcbiA3MDQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzA2OlxcdFxcdH1cXG4gNzA3OlxcdFxcbiA3MDg6XFx0XFx0d2hpbGUgKGxlZnQpXFxuIDcwOTpcXHRcXHR7XFxuIDcxMDpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcXG4gNzExOlxcdFxcdFxcdHtcXG4gNzEyOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzEzOlxcdFxcdFxcdFxcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xcbiA3MTQ6XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzdHM9bGVmdCBcXHUwMDNlIChtZGM4MDAtXFx1MDAzZW91dF9jb3VudC1tZGM4MDAtXFx1MDAzZW91dF9wdHIpP21kYzgwMC1cXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cXHUwMDNlb3V0X3B0cjpsZWZ0O1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoc3RzIFxcdTAwM2M9IDApXFxuIDcxOTpcXHRcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjI4LjM4NzkzMjA1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NzY1NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55IGRlZXAgYW5hbHlzaXMsIGxldCdzIGVzdGFibGlzaCBhIGNsZWFyIGJhc2VsaW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKkJlZm9yZSBJIGdldCB0b28gaW52b2x2ZWQgaW4gc3BlY2lmaWNzLCBpdCdzIHBydWRlbnQgdG8gY29uZHVjdCBhIHN3ZWVwIG9mIHRoZSBlbnRpcmUgZmlsZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgc3RydWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZSBsYXJnZXIgY29udGV4dCBpcyBjcnVjaWFsIHRvIGNvbnRleHR1YWxpemluZyBkZXRhaWxzLiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGluZm9ybSB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIGEgbWVhbmluZ2Z1bCBicmVha2Rvd24gYW5kIGFzc2Vzc21lbnQsIGFuZCB3aGV0aGVyIHRvIHJlZmluZSBteSBhcHByb2FjaCB0byB0aGUgZGF0YS4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgYSBtZXRob2RpY2FsIHNjb3BpbmcgZXhlcmNpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozMC42MjY3MDAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdFxcdFxcdC8qIFRvbyBsZXNzIERhdGEgaW4gYnVmZmVyICovXFxuIDcyMTpcXHRcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBET1dOTE9BRClcXG4gNzIyOlxcdFxcdFxcdFxcdHtcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X2NvdW50PTA7XFxuIDcyNDpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZW91dF9wdHI9MDtcXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0XFx0XFx0XFx0LyogRG93bmxvYWQgLVxcdTAwM2UgUmVxdWVzdCBuZXcgYnl0ZXMgKi9cXG4gNzI3OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLVxcdTAwM2VkZXYgPSBtZGM4MDAtXFx1MDAzZWRldjtcXG4gNzI4OlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRpZiAocmV0dmFsKSB7XFxuIDczMDpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA3MzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXFxcIlxcbiA3MzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIihyZXR2YWw9JWkpXFxcXG5cXFwiLCByZXR2YWwpO1xcbiA3MzM6XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MzQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGxlbi1sZWZ0O1xcbiA3MzU6XFx0XFx0XFx0XFx0XFx0fVxcbiA3MzY6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gd2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfd2FpdCxcXG4gNzM3OlxcdFxcdFxcdFxcdFxcdCAgICAgbWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkLFxcbiA3Mzg6XFx0XFx0XFx0XFx0XFx0ICAgICBtc2Vjc190b19qaWZmaWVzKFRPX0RPV05MT0FEX0dFVF9SRUFEWSkpO1xcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDc0MDpcXHRcXHRcXHRcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA3NDE6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkID0gMDtcXG4gNzQyOlxcdFxcdFxcdFxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYi1cXHUwMDNlc3RhdHVzICE9IDApXFxuIDc0MzpcXHRcXHRcXHRcXHRcXHR7XFxuIDc0NDpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA3NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgXFxcIlxcbiA3NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIihzdGF0dXM9JWkpXFxcXG5cXFwiLFxcbiA3NDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmItXFx1MDAzZXN0YXR1cyk7XFxuIDc0ODpcXHRcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc0OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbGVuLWxlZnQ7XFxuIDc1MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDc1MTpcXHRcXHRcXHRcXHR9XFxuIDc1MjpcXHRcXHRcXHRcXHRlbHNlXFxuIDc1MzpcXHRcXHRcXHRcXHR7XFxuIDc1NDpcXHRcXHRcXHRcXHRcXHQvKiBObyBtb3JlIGJ5dGVzIC1cXHUwMDNlIHRoYXQncyBhbiBlcnJvciovXFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc1NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNzU3OlxcdFxcdFxcdFxcdH1cXG4gNzU4OlxcdFxcdFxcdH1cXG4gNzU5OlxcdFxcdFxcdGVsc2VcXG4gNzYwOlxcdFxcdFxcdHtcXG4gNzYxOlxcdFxcdFxcdFxcdC8qIENvcHkgQnl0ZXMgKi9cXG4gNzYyOlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcXHUwMDI2bWRjODAwLVxcdTAwM2VvdXQgW21kYzgwMC1cXHUwMDNlb3V0X3B0cl0sXFxuIDc2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHMpKSB7XFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNzY2OlxcdFxcdFxcdFxcdH1cXG4gNzY3OlxcdFxcdFxcdFxcdHB0cis9c3RzO1xcbiA3Njg6XFx0XFx0XFx0XFx0bGVmdC09c3RzO1xcbiA3Njk6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfcHRyKz1zdHM7XFxuIDc3MDpcXHRcXHRcXHR9XFxuIDc3MTpcXHRcXHR9XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzc0OlxcdFxcdHJldHVybiBsZW4tbGVmdDtcXG4gNzc1OlxcdH1cXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFxuIDc3ODpcXHQvKlxcbiA3Nzk6XFx0ICogVGhlIERldmljZSB3cml0ZSBjYWxsYmFjayBGdW5jdGlvblxcbiA3ODA6XFx0ICogSWYgYSA4Qnl0ZSBDb21tYW5kIGlzIHJlY2VpdmVkLCBpdCB3aWxsIGJlIHNlbmQgdG8gdGhlIGNhbWVyYS5cXG4gNzgxOlxcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcXG4gNzgyOlxcdCAqIGp1c3Qgd2FpdHMgdW50aWwgdGhlIGNhbWVyYSBiZWNvbWVzIHJlYWR5LlxcbiA3ODM6XFx0ICovXFxuIDc4NDpcXHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIDc4NTpcXHR7XFxuIDc4NjpcXHRcXHRzaXplX3QgaT0wO1xcbiA3ODc6XFx0XFx0aW50IHJldHZhbDtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzkwOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlICE9IFJFQURZKVxcbiA3OTE6XFx0XFx0e1xcbiA3OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuIClcXG4gNzk2OlxcdFxcdHtcXG4gNzk3OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDc5OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjMwLjYyNjgwNDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njg5OTkxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNREM4MDAgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgQ09ORklHX1VTQl9NREM4MDBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ2AsIGl0J3MgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gdGhlIGBVU0JgIGFuZCBgVVNCX1NVUFBPUlRgIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyBkZXZpY2UgaXMgVVNCLWJhc2VkIGFuZCB1c2VzIHRoYXQgc3VwcG9ydCwgd2hpY2ggZ2l2ZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGRyaXZlciByZWFjaGFibGUgYW5kIGZ1enotd29ydGh5PyBMZXQncyBjb25zdWx0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNlY3Rpb24gMSBzdHJlc3NlcyByZWFjaGFiaWxpdHkgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGVtcGhhc2l6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cy4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpcywgaGlnaGxpZ2h0aW5nIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyBsaWtlIFVTQiBnYWRnZXQuIFNlY3Rpb24gNCB0aGVuIHBvaW50cyB0byB0YXJnZXRpbmcgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZWAsIHdoaWNoIGxvb2tzIGxpa2UgdGhlIGluaXRpYWwgcHJvYmUgZnVuY3Rpb24uIE90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbWRjODAwYCBkcml2ZXIgYXJlIGFsc28gaW1wb3J0YW50OiBgbWRjODAwX2RldmljZV9vcGVuYCwgYG1kYzgwMF9kZXZpY2VfcmVsZWFzZWAsIGBtZGM4MDBfZGV2aWNlX3JlYWRgLCBgbWRjODAwX2RldmljZV93cml0ZWAsIGFuZCBgbWRjODAwX3VzYl9kaXNjb25uZWN0YC4gU2luY2UgYG1kYzgwMF91c2JfcHJvYmVgIGlzIGRpcmVjdGx5IGFsdGVyZWQsIGl0J3MgZGVmaW5pdGVseSBhIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiBgbWRjODAwLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IGl0cyBmZWF0dXJlcy4gVGhpcyBicm9hZGVyIHZpZXcgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBwcmVzZW50IGluIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjM1LjQ5NTgwNjI4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTA3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9MTI0PXN0cnVjdCBtZGM4MDBfZGF0YVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTcwLS8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjE3MTpzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG1kYzgwMF9lZCBbNF0gPVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMTUtLyogVGhlIFZhcmlhYmxlIHVzZWQgYnkgdGhlIGRyaXZlciAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIxNjpzdGF0aWMgc3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDA7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjE3LVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjIyLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIyMzpzdGF0aWMgaW50IG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYSxzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmIpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIzNS0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyMzY6c3RhdGljIGludCBtZGM4MDBfaXNCdXN5IChjaGFyKiBjaClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMzcte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjUxLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI1MjpzdGF0aWMgaW50IG1kYzgwMF9pc1JlYWR5IChjaGFyICpjaClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTMte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjY4LSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI2OTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2lycSAoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTI3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zMzItICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MzMzOnN0YXRpYyBpbnQgbWRjODAwX3VzYl93YWl0Rm9ySVJRIChpbnQgbW9kZSwgaW50IG1zZWMpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzM0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM2Mi0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzozNjM6c3RhdGljIHZvaWQgbWRjODAwX3VzYl93cml0ZV9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zNjQte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzgwLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjM4MTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MDgtXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDA5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo0MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDExOnN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBtZGM4MDBfY2xhc3MgPSB7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDEyLVxcdC5uYW1lID1cXHRcXHRcXFwibWRjODAwJWRcXFwiLFxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDIwLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjQyMTpzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTQyMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNTQxLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjU0MjpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTU0My17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01NzctICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NTc4OnN0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01Nzkte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNjA4LSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjYwOTpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNjEwLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1Ny0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo2NTg6c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1OS17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02ODItICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NjgzOnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy03ODMtICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6Nzg0OnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy03ODUte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTUwLS8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHMgPVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk1Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjItXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6OTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtZGM4MDBfdGFibGVbXSA9IHtcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjQtXFx0eyBVU0JfREVWSUNFKE1EQzgwMF9WRU5ET1JfSUQsIE1EQzgwMF9QUk9EVUNUX0lEKSB9LFxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9OTY4PU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbWRjODAwX3RhYmxlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk3MS0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NzI6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyID1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NzMte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg1LVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk4NjpzdGF0aWMgaW50IF9faW5pdCB1c2JfbWRjODAwX2luaXQgKHZvaWQpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNTgtXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MTA1OTpzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX21kYzgwMF9jbGVhbnVwICh2b2lkKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozNS41NDM3MDA0MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5OTcxMjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTURDODAwIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IFVTQiBhbmQgc3BlY2lmaWNhbGx5IGBVU0JfTURDODAwYCBhcmUgZW5hYmxlZCwgdGhhdCdzIGNydWNpYWwuIFRoZW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgcHJlc2VudDogYG1kYzgwMF91c2JfcHJvYmVgLCBgbWRjODAwX2RldmljZV9vcGVuYCwgYG1kYzgwMF9kZXZpY2VfcmVhZGAsIGBtZGM4MDBfZGV2aWNlX3dyaXRlYCwgYG1kYzgwMF9kZXZpY2VfcmVsZWFzZWAsIGFuZCBgbWRjODAwX3VzYl9kaXNjb25uZWN0YC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBNREM4MDAgZHJpdmVyIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgZXNzZW50aWFsIHRob3NlIGFyZSBhbGwgYXZhaWxhYmxlLlxuXG5UaGUgcmVhc29uIHRoaXMgaXMgd29ydGggZnV6emluZyBpcyBjbGVhci4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGluaXRpYWxpemVzIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkaWdpdGFsIGNhbWVyYSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UsIHNoaWZ0aW5nIHRoZSBgdXNiX3JlZ2lzdGVyX2RldigpYCBjYWxsIGFmdGVyIHRoZSBVUkIgc2V0dXAuIFRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gbW92ZSDigJMgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlLlxuXG5BbmQgdGhlIGJlc3QgcGFydCBpcywgdGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGRldmljZSBlbXVsYXRpb24sIG1lYW5pbmcgSSBjYW4gdXNlIHRvb2xzIGxpa2UgcmF3IGdhZGdldCBvciB0aGUgRHVtbXkgSENEIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciB0byByZWFjaCB0aGlzIGRyaXZlciBhbmQgdGVzdCBpdCBlZmZlY3RpdmVseS5cblxuUmlnaHQsIHNvIHdpdGggdGhvc2UgY29uZmlybWVkLCBJJ20gcmVhZHkuIFRpbWUgdG8gdHJpZ2dlciB0aGUgZnV6emluZyBhbmFseXNpcyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY1LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS43NDM0Mjc3MjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NTQxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQlwiLFxuICAgIFwiVVNCX01EQzgwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kYzgwMF91c2JfcHJvYmVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfb3BlblwiLFxuICAgIFwibWRjODAwX2RldmljZV9yZWFkXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3dyaXRlXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlbGVhc2VcIixcbiAgICBcIm1kYzgwMF91c2JfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQlwiLFxuICAgIFwiVVNCX01EQzgwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kYzgwMF91c2JfcHJvYmVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfb3BlblwiLFxuICAgIFwibWRjODAwX2RldmljZV9yZWFkXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3dyaXRlXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlbGVhc2VcIixcbiAgICBcIm1kYzgwMF91c2JfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS45MTYyOTExNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDgyOTkzNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MzkuOTE2ODkwNzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwODIzODkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxcblxcblRoaXMgaXMgYSBwcm9iZSBvcmRlcmluZyAvIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW4gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbG9ja2luZywgb3IgY29uY3VycmVuY3kgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiZmJmYTY5YWZjN2YzNWEyZDY4NzY1YzE3Y2VmNzExNWEwNTQ4M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjU4OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xuaW5kZXggY2EyODdiNzcwZThjYi4uMDE5MzE0NzAyZTI2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG4rKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xuQEAgLTQ4MiwxMyArNDgyLDYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIFxuLVx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuLVx0aWYgKHJldHZhbCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cXG5cIik7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuLVx0fVxuLVxuIFx0bWRjODAwLVx1MDAzZWRldj1kZXY7XG4gXHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIFxuQEAgLTUyNyw2ICs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXG4rXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4rXHRpZiAocmV0dmFsKSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcblwiKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbiBcdFxuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS45MTY4OTE4NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMzMzMzY5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBGaXJzdCwgSSdsbCBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgc291cmNlIHVzaW5nIHRoZSBzdGFuZGFyZCB0b29scyBJJ3ZlIGdvdCBhdCBteSBkaXNwb3NhbCDigJMgbGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkLlxuXG5Gcm9tIGEgcmlzayBhbmFseXNpcyBwZXJzcGVjdGl2ZSwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSByZWFsbSBvZiBiZW5pZ24ga2VybmVsIG1haW50ZW5hbmNlIG9yIGRlZmVuc2l2ZSBRQS4gVGhlIHJlcXVlc3QgaXMgc3RyYWlnaHRmb3J3YXJkOiBkZXRlcm1pbmUgaWYgYSBzYW5pdGl6ZXIg4oCTIEtNU0FOIGluIHRoaXMgY2FzZSDigJMgaXMgd2FycmFudGVkIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gTXkgYWN0aW9uIGlzIHRvIGZ1bGZpbGwgdGhpcyByZXF1ZXN0IGRpcmVjdGx5IGFuZCBwcm92aWRlIGEgaGVscGZ1bCwgZXhwZXJ0IGV2YWx1YXRpb24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgY29kZSB3aXRoaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1MS4wNTAyMzI2ODVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHR7XFxuIDQ2MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWVuZHBvaW50W2ldPS0xO1xcbiA0NjI6XFx0XFx0XFx0Zm9yIChqPTA7IGpcXHUwMDNjNDsgaisrKVxcbiA0NjM6XFx0XFx0XFx0e1xcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFxcdTAwMjZpbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcXG4gNDY1OlxcdFxcdFxcdFxcdHtcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcXG4gNDY3OlxcdFxcdFxcdFxcdFxcdGlmIChpPT0xKVxcbiA0Njg6XFx0XFx0XFx0XFx0XFx0e1xcbiA0Njk6XFx0XFx0XFx0XFx0XFx0XFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsO1xcbiA0NzA6XFx0XFx0XFx0XFx0XFx0fVxcbiA0NzE6XFx0XFx0XFx0XFx0fVxcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXFxuIDQ3NDpcXHRcXHRcXHR7XFxuIDQ3NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSBXcm9uZyBFbmRwb2ludHMuXFxcXG5cXFwiKTtcXG4gNDc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Nzc6XFx0XFx0XFx0fVxcbiA0Nzg6XFx0XFx0fVxcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGRldl9pbmZvKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cXFxcblxcXCIpO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRtZGM4MDAtXFx1MDAzZWRldj1kZXY7XFxuIDQ4NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MDtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0LyogU2V0dXAgVVJCIFN0cnVjdHMgKi9cXG4gNDg5OlxcdFxcdHVzYl9maWxsX2ludF91cmIgKFxcbiA0OTA6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VpcnFfdXJiLFxcbiA0OTE6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYsXFxuIDQ5MjpcXHRcXHRcXHR1c2JfcmN2aW50cGlwZSAobWRjODAwLVxcdTAwM2VkZXYsbWRjODAwLVxcdTAwM2VlbmRwb2ludCBbMV0pLFxcbiA0OTM6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VpcnFfdXJiX2J1ZmZlcixcXG4gNDk0OlxcdFxcdFxcdDgsXFxuIDQ5NTpcXHRcXHRcXHRtZGM4MDBfdXNiX2lycSxcXG4gNDk2OlxcdFxcdFxcdG1kYzgwMCxcXG4gNDk3OlxcdFxcdFxcdGlycV9pbnRlcnZhbFxcbiA0OTg6XFx0XFx0KTtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0dXNiX2ZpbGxfYnVsa191cmIgKFxcbiA1MDE6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2V3cml0ZV91cmIsXFxuIDUwMjpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldixcXG4gNTAzOlxcdFxcdFxcdHVzYl9zbmRidWxrcGlwZSAobWRjODAwLVxcdTAwM2VkZXYsIG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbMF0pLFxcbiA1MDQ6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2V3cml0ZV91cmJfYnVmZmVyLFxcbiA1MDU6XFx0XFx0XFx0OCxcXG4gNTA2OlxcdFxcdFxcdG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LFxcbiA1MDc6XFx0XFx0XFx0bWRjODAwXFxuIDUwODpcXHRcXHQpO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYiAoXFxuIDUxMTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYixcXG4gNTEyOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2LFxcbiA1MTM6XFx0XFx0XFx0dXNiX3JjdmJ1bGtwaXBlIChtZGM4MDAtXFx1MDAzZWRldiwgbWRjODAwLVxcdTAwM2VlbmRwb2ludCBbM10pLFxcbiA1MTQ6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmJfYnVmZmVyLFxcbiA1MTU6XFx0XFx0XFx0NjQsXFxuIDUxNjpcXHRcXHRcXHRtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSxcXG4gNTE3OlxcdFxcdFxcdG1kYzgwMFxcbiA1MTg6XFx0XFx0KTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1SRUFEWTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFxcdTAwMjZtZGM4MDBfY2xhc3MpO1xcbiA1MjU6XFx0XFx0aWYgKHJldHZhbCkge1xcbiA1MjY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcXFxuXFxcIik7XFxuIDUyNzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1Mjg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYgPSBOVUxMO1xcbiA1Mjk6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XFxuIDUzMDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcdFxcbiA1MzQ6XFx0XFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xcbiA1MzU6XFx0XFx0cmV0dXJuIDA7XFxuIDUzNjpcXHR9XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0LypcXG4gNTQwOlxcdCAqIERpc2Nvbm5lY3QgVVNCIGRldmljZSAobWF5YmUgdGhlIE1EQzgwMClcXG4gNTQxOlxcdCAqL1xcbiA1NDI6XFx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gNTQzOlxcdHtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1kYzgwMCkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6NTEuMDUwMzU4NDY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjU3MDg4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYG1kYzgwMC5jYCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBwb2tpbmcgYXJvdW5kIGluIHRoaXMgYG1kYzgwMC5jYCBkcml2ZXIsIGFuZCBJIHRoaW5rIGl0J3MgdGltZSB0byBnZXQgYSBtb3JlIGhvbGlzdGljIHZpZXcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgd2hvbGUgdGhpbmcsIGZyb20gdG9wIHRvIGJvdHRvbS4gU2ltcGx5IHB1dCwgSSBuZWVkIHRvIHNlZSBtb3JlIG9mIHRoZSBjb2RlIHRvIHJlYWxseSBncmFzcCB3aGF0IHRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGRvLiBHb3R0YSBleGFtaW5lIHRoZSBjb21wbGV0ZSBzb3VyY2UgZmlsZS4gV2l0aG91dCBjb250ZXh0LCBpdCdzIGp1c3QgYSBidW5jaCBvZiBsaW5lcy4gTGV0J3MgZ2V0IHRvIHRoZSByZXN0IG9mIGBtZGM4MDAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVsbCBwaWN0dXJlIGlzLiBJJ20gcmVhZHkgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTIwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Mi44MTYwNzEwNzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkZWQgPSAxO1xcbiA0MDE6XFx0XFx0d2FrZV91cCAoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZG93bmxvYWRfd2FpdCk7XFxuIDQwMjpcXHR9XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcbiA0MDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA0MDY6XFx0XFx0UHJvYmluZyBmb3IgdGhlIENhbWVyYVxcbiA0MDc6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gNDA4OlxcdFxcbiA0MDk6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyO1xcbiA0MTA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XFxuIDQxMTpcXHRzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0ge1xcbiA0MTI6XFx0XFx0Lm5hbWUgPVxcdFxcdFxcXCJtZGM4MDAlZFxcXCIsXFxuIDQxMzpcXHRcXHQuZm9wcyA9XFx0XFx0XFx1MDAyNm1kYzgwMF9kZXZpY2Vfb3BzLFxcbiA0MTQ6XFx0XFx0Lm1pbm9yX2Jhc2UgPVxcdE1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSxcXG4gNDE1OlxcdH07XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcbiA0MTg6XFx0LypcXG4gNDE5OlxcdCAqIENhbGxiYWNrIHRvIHNlYXJjaCB0aGUgTXVzdGVrIE1EQzgwMCBvbiB0aGUgVVNCIEJ1c1xcbiA0MjA6XFx0ICovXFxuIDQyMTpcXHRzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiA0MjI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdGludCBpLGo7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7XFxuIDQyNjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7XFxuIDQyNzpcXHRcXHRpbnQgaXJxX2ludGVydmFsPTA7XFxuIDQyODpcXHRcXHRpbnQgcmV0dmFsO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRkZXZfZGJnKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCIoJXMpIGNhbGxlZC5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VkZXYgIT0gTlVMTClcXG4gNDM0OlxcdFxcdHtcXG4gNDM1OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcbiA0MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQzNzpcXHRcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdGlmIChkZXYtXFx1MDAzZWRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpXFxuIDQ0MDpcXHRcXHR7XFxuIDQ0MTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsXFxuIDQ0MjpcXHRcXHRcXHRcXHRcXFwicHJvYmUgZmFpbHMgLVxcdTAwM2Ugd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbiA0NDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ0NDpcXHRcXHR9XFxuIDQ0NTpcXHRcXHRpbnRmX2Rlc2MgPSBpbnRmLVxcdTAwM2VjdXJfYWx0c2V0dGluZztcXG4gNDQ2OlxcdFxcbiA0NDc6XFx0XFx0aWYgKFxcbiA0NDg6XFx0XFx0XFx0XFx0KCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4ZmYgKVxcbiA0NDk6XFx0XFx0XFx0fHxcXHQoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCApXFxuIDQ1MDpcXHRcXHRcXHR8fCAoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gMCApXFxuIDQ1MTpcXHRcXHRcXHR8fCAoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpXFxuIDQ1MjpcXHRcXHQpXFxuIDQ1MzpcXHRcXHR7XFxuIDQ1NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSB3cm9uZyBJbnRlcmZhY2VcXFxcblxcXCIpO1xcbiA0NTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ1NjpcXHRcXHR9XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdC8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi9cXG4gNDU5OlxcdFxcdGZvciAoaT0wOyBpXFx1MDAzYzQ7IGkrKylcXG4gNDYwOlxcdFxcdHtcXG4gNDYxOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09LTE7XFxuIDQ2MjpcXHRcXHRcXHRmb3IgKGo9MDsgalxcdTAwM2M0OyBqKyspXFxuIDQ2MzpcXHRcXHRcXHR7XFxuIDQ2NDpcXHRcXHRcXHRcXHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXFx1MDAyNmludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Mi44MTYyMTU4NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyOTIyODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6XG5cbioqUGVlcmluZyBpbnRvIG1kYzgwMC5jKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBgbWRjODAwLmNgIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoYXQgZ2xvYmFsIGBtZGM4MDBgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kLCBqdXN0IGFzIGltcG9ydGFudGx5LCBob3cgaXQncyBiZWluZyAqdXNlZCogdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gVGhhdCBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBhbmQgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGluIGZpZ3VyaW5nIG91dCBob3cgaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjU2LjQ0NTQ0ODAzM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqXFx0VVNCLUtlcm5lbCBEcml2ZXIgZm9yIHRoZSBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxuICAgOTpcXHQgKlxcdChjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqXFxuICAxMjpcXHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxcbiAgMTM6XFx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcXG4gIDE0OlxcdCAqIHRvIHRoZSBLZXJuZWwgTm9kZS5cXG4gIDE1OlxcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcXG4gIDE2OlxcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxuICAxNzpcXHQgKlxcbiAgMTg6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXFxuICAxOTpcXHQgKiBcXG4gIDIwOlxcdCAqIEZpeDogbWRjODAwIHVzZWQgc2xlZXBfb24gYW5kIHNsZXB0IHdpdGggaW9fbG9jayBoZWxkLlxcbiAgMjE6XFx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcXG4gIDIyOlxcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cXG4gIDIzOlxcdCAqIGJ5IE9saXZlciBOZXVrdW0gXFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVxcdTAwM2VcXG4gIDI0OlxcdCAqICgwMi8xMi8yMDAxKVxcbiAgMjU6XFx0ICogXFxuICAyNjpcXHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxcbiAgMjc6XFx0ICogKDA4LzA0LzIwMDEpIGdiXFxuICAyODpcXHQgKlxcbiAgMjk6XFx0ICogdmVyc2lvbiAwLjcuNVxcbiAgMzA6XFx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cXG4gIDMxOlxcdCAqIFRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIFxcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcXHUwMDNlIHdobyBcXG4gIDMyOlxcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cXG4gIDMzOlxcdCAqICgzMC8xMC8yMDAwKVxcbiAgMzQ6XFx0ICpcXG4gIDM1OlxcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cXG4gIDM2OlxcdCAqIGJ5IEdyZWcgS0ggXFx1MDAzY2dyZWdAa3JvYWguY29tXFx1MDAzZVxcbiAgMzc6XFx0ICogKDEzLzEwLzIwMDApXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICogdmVyc2lvbiAwLjcuM1xcbiAgNDA6XFx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cXHUwMDNlc3RhdGUgZmllbGQgZ2V0cyBzZXQgdG8gUkVBRFkgYWZ0ZXIgdGhlXFxuICA0MTpcXHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcXG4gIDQyOlxcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXFxuICA0MzpcXHQgKiBoYW5nIHVwcy5cXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKiB2ZXJzaW9uIDAuNy4xXFxuICA0NjpcXHQgKiBNT0RfSU5DIGFuZCBNT0RfREVDIGFyZSBjaGFuZ2VkIGluIHVzYl9wcm9iZSB0byBwcmV2ZW50IGxvYWQvdW5sb2FkXFxuICA0NzpcXHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cXG4gIDQ4OlxcdCAqICgwNC8wNC8yMDAwKVxcbiAgNDk6XFx0ICpcXG4gIDUwOlxcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxcbiAgNTE6XFx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cXG4gIDUyOlxcdCAqICgyNi8wMy8yMDAwKVxcbiAgNTM6XFx0ICpcXG4gIDU0OlxcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cXG4gIDU1OlxcdCAqICgwMS8wMy8yMDAwKVxcbiAgNTY6XFx0ICpcXG4gIDU3OlxcdCAqIHZlcnNpb24gMC43LjBcXG4gIDU4OlxcdCAqIFJld3JpdGUgb2YgdGhlIGRyaXZlciA6IFRoZSBkcml2ZXIgbm93IHVzZXMgVVJCJ3MuIFRoZSBvbGQgc3R1ZmZcXG4gIDU5OlxcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXFxuICA2MDpcXHQgKlxcbiAgNjE6XFx0ICogdmVyc2lvbiAwLjYuMFxcbiAgNjI6XFx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXFxuICA2MzpcXHQgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRyaXZlci4gQSBzcGVjaWFsIGV4ZWN1dGVDb21tYW5kIGZ1bmN0aW9uXFxuICA2NDpcXHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxcbiAgNjU6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxcbiAgNjY6XFx0ICogRWl0aGVyIHdpdGggdGhlIGRldi1cXHUwMDNlYnVzLVxcdTAwM2VvcHMtXFx1MDAzZWJ1bGsuLi4gb3Igd2l0aCBjYWxsYmFjayBmdW5jdGlvbi5cXG4gIDY3OlxcdCAqICgwOS8xMS8xOTk5KVxcbiAgNjg6XFx0ICpcXG4gIDY5OlxcdCAqIHZlcnNpb24gMC41LjA6XFxuICA3MDpcXHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcXG4gIDcxOlxcdCAqIGZ1bmN0aW9ucyB3b3JrLlxcbiAgNzI6XFx0ICogKDIwLzEwLzE5OTkpXFxuICA3MzpcXHQgKi9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAgNzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgNzc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICA3ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDc5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4gIDgwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICA4MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgODI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDgzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDg0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICA4NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDg2OlxcdFxcbiAgODc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgODg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXFxuICA5MjpcXHQgKi9cXG4gIDkzOlxcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXFxcInYwLjcuNSAoMzAvMTAvMjAwMClcXFwiXFxuICA5NDpcXHQjZGVmaW5lIERSSVZFUl9BVVRIT1IgXFxcIkhlbm5pbmcgWmFiZWwgXFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVxcdTAwM2VcXFwiXFxuICA5NTpcXHQjZGVmaW5lIERSSVZFUl9ERVNDIFxcXCJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxcIlxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi9cXG4gIDk4OlxcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcXHQweDA1NWZcXG4gIDk5OlxcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcXHQweGE4MDBcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Ni40NDU1OTkzNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2MTkyOTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNvZGUgZXhwbG9yYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNREM4MDAgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBgbWRjODAwYCBkcml2ZXIuIEkndmUgZ290IGEgZ3Jhc3Agb2YgdGhlIGJhc2ljIGFyY2hpdGVjdHVyZSwgYnV0IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byBkaWcgaW50byBgbWRjODAwLmNgIGFuZCB0cmFjZSB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGUgVVNCIGRldmljZS4gSSdtIGZvY3VzaW5nIG9uIGtleSBmdW5jdGlvbnM6IEkgd2FudCB0byBzZWUgaG93IGBtZGM4MDBfdXNiX3Byb2JlYCBzZXRzIHRoaW5ncyB1cCBpbml0aWFsbHksIHJpZ2h0IGZyb20gdGhlIGRldmljZSBkZXRlY3Rpb24uIFRoZW4sIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1kYzgwMF9pbml0YCwgd2hhdCdzIGluaXRpYWxpemVkIGFuZCBob3cuIE9mIGNvdXJzZSwgYG1kYzgwMF9leGl0YCBpcyBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdGVhcmRvd246IEknbSBjdXJpb3VzIGFib3V0IHRoZSBjbGVhbnVwIHByb2NlZHVyZXMgaXQgcGVyZm9ybXMgdG8gbWFpbnRhaW4gc3lzdGVtIGludGVncml0eS4gRmluYWxseSwgSSdsbCBleGFtaW5lIHRoZSBmaWxlIG9wZXJhdGlvbiBoYW5kbGVycyDigJMgdGhlIGBvcGVuYCwgYHJlYWRgLCBhbmQgYHdyaXRlYCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRoZXNlIHdpbGwgcmV2ZWFsIGhvdyBkYXRhIGlzIHRyYW5zZmVycmVkIHRvIGFuZCBmcm9tIHRoZSBkZXZpY2UgYW5kIG1hcCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgbG9naWMgYW5kIHdoZXJlIEkgbWlnaHQgZW5jb3VudGVyIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBlZGdlLWNhc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6NTkuNzA3NTMxOTU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdC8qIFRpbWVvdXRzIChtc2VjKSAqL1xcbiAxMDI6XFx0I2RlZmluZSBUT19ET1dOTE9BRF9HRVRfUkVBRFlcXHRcXHQxNTAwXFxuIDEwMzpcXHQjZGVmaW5lIFRPX0RPV05MT0FEX0dFVF9CVVNZXFx0XFx0MTUwMFxcbiAxMDQ6XFx0I2RlZmluZSBUT19XUklURV9HRVRfUkVBRFlcXHRcXHQxMDAwXFxuIDEwNTpcXHQjZGVmaW5lIFRPX0RFRkFVTFRfQ09NTUFORFxcdFxcdDUwMDBcXG4gMTA2OlxcdCNkZWZpbmUgVE9fUkVBRF9GUk9NX0lSUSBcXHRcXHRUT19ERUZBVUxUX0NPTU1BTkRcXG4gMTA3OlxcdCNkZWZpbmUgVE9fR0VUX1JFQURZXFx0XFx0XFx0VE9fREVGQVVMVF9DT01NQU5EXFxuIDEwODpcXHRcXG4gMTA5OlxcdC8qIE1pbm9yIE51bWJlciBvZiB0aGUgZGV2aWNlIChjcmVhdGUgd2l0aCBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMikgKi9cXG4gMTEwOlxcdCNkZWZpbmUgTURDODAwX0RFVklDRV9NSU5PUl9CQVNFIDMyXFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcbiAxMTM6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDExNDpcXHRcXHREYXRhIGFuZCBzdHJ1Y3RzXFxuIDExNTpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcbiAxMTg6XFx0dHlwZWRlZiBlbnVtIHtcXG4gMTE5OlxcdFxcdE5PVF9DT05ORUNURUQsIFJFQURZLCBXT1JLSU5HLCBET1dOTE9BRFxcbiAxMjA6XFx0fSBtZGM4MDBfc3RhdGU7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcbiAxMjM6XFx0LyogRGF0YSBmb3IgdGhlIGRyaXZlciAqL1xcbiAxMjQ6XFx0c3RydWN0IG1kYzgwMF9kYXRhXFxuIDEyNTpcXHR7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqXFx0ZGV2O1xcdFxcdFxcdC8vIERldmljZSBEYXRhXFxuIDEyNzpcXHRcXHRtZGM4MDBfc3RhdGUgXFx0XFx0c3RhdGU7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGVuZHBvaW50IFs0XTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0c3RydWN0IHVyYiAqXFx0XFx0aXJxX3VyYjtcXG4gMTMyOlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0aXJxX3dhaXQ7XFxuIDEzMzpcXHRcXHRpbnRcXHRcXHRcXHRpcnFfd29rZW47XFxuIDEzNDpcXHRcXHRjaGFyKlxcdFxcdFxcdGlycV91cmJfYnVmZmVyO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRpbnRcXHRcXHRcXHRjYW1lcmFfYnVzeTsgICAgICAgICAgLy8gaXMgY2FtZXJhIGJ1c3kgP1xcbiAxMzc6XFx0XFx0aW50IFxcdFxcdFxcdGNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnFcXG4gMTM4OlxcdFxcdGNoYXIgXFx0XFx0XFx0Y2FtZXJhX3Jlc3BvbnNlIFs4XTsgIC8vIGxhc3QgQnl0ZXMgc2VuZCBhZnRlciBidXN5XFxuIDEzOTpcXHRcXG4gMTQwOlxcdFxcdHN0cnVjdCB1cmIgKiAgIFxcdFxcdHdyaXRlX3VyYjtcXG4gMTQxOlxcdFxcdGNoYXIqXFx0XFx0XFx0d3JpdGVfdXJiX2J1ZmZlcjtcXG4gMTQyOlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0d3JpdGVfd2FpdDtcXG4gMTQzOlxcdFxcdGludFxcdFxcdFxcdHdyaXR0ZW47XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0c3RydWN0IHVyYiAqICAgXFx0XFx0ZG93bmxvYWRfdXJiO1xcbiAxNDc6XFx0XFx0Y2hhcipcXHRcXHRcXHRkb3dubG9hZF91cmJfYnVmZmVyO1xcbiAxNDg6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRkb3dubG9hZF93YWl0O1xcbiAxNDk6XFx0XFx0aW50XFx0XFx0XFx0ZG93bmxvYWRlZDtcXG4gMTUwOlxcdFxcdGludFxcdFxcdFxcdGRvd25sb2FkX2xlZnQ7XFx0XFx0Ly8gQnl0ZXMgbGVmdCB0byBkb3dubG9hZCA/XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0LyogRGV2aWNlIERhdGEgKi9cXG4gMTU0OlxcdFxcdGNoYXJcXHRcXHRcXHRvdXQgWzY0XTtcXHQvLyBBbnN3ZXIgQnVmZmVyXFxuIDE1NTpcXHRcXHRpbnQgXFx0XFx0XFx0b3V0X3B0cjtcXHQvLyBJbmRleCB0byB0aGUgZmlyc3Qgbm90IHJlYWRlbiBieXRlXFxuIDE1NjpcXHRcXHRpbnRcXHRcXHRcXHRvdXRfY291bnQ7XFx0Ly8gQnl0ZXMgaW4gdGhlIGJ1ZmZlclxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRpbnRcXHRcXHRcXHRvcGVuO1xcdFxcdC8vIENhbWVyYSBkZXZpY2Ugb3BlbiA/XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRpb19sb2NrO1xcdC8vIElPIC1sb2NrXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGNoYXIgXFx0XFx0XFx0aW4gWzhdO1xcdFxcdC8vIENvbW1hbmQgSW5wdXQgQnVmZmVyXFxuIDE2MjpcXHRcXHRpbnQgIFxcdFxcdFxcdGluX2NvdW50O1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRpbnRcXHRcXHRcXHRwaWNfaW5kZXg7XFx0Ly8gQ2FjaGUgZm9yIHRoZSBJbWFnZXNpemUgKC0xIGZvciBub3RoaW5nIGNhY2hlZCApXFxuIDE2NTpcXHRcXHRpbnRcXHRcXHRcXHRwaWNfbGVuO1xcbiAxNjY6XFx0XFx0aW50XFx0XFx0XFx0bWlub3I7XFxuIDE2NzpcXHR9O1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXG4gMTcwOlxcdC8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xcbiAxNzE6XFx0c3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBtZGM4MDBfZWQgWzRdID1cXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdHsgXFxuIDE3NDpcXHRcXHRcXHQuYkxlbmd0aCA9IFxcdFxcdDAsXFxuIDE3NTpcXHRcXHRcXHQuYkRlc2NyaXB0b3JUeXBlID1cXHQwLFxcbiAxNzY6XFx0XFx0XFx0LmJFbmRwb2ludEFkZHJlc3MgPVxcdDB4MDEsXFxuIDE3NzpcXHRcXHRcXHQuYm1BdHRyaWJ1dGVzID0gXFx0MHgwMixcXG4gMTc4OlxcdFxcdFxcdC53TWF4UGFja2V0U2l6ZSA9XFx0Y3B1X3RvX2xlMTYoOCksXFxuIDE3OTpcXHRcXHRcXHQuYkludGVydmFsID0gXFx0XFx0MCxcXG4gMTgwOlxcdFxcdFxcdC5iUmVmcmVzaCA9IFxcdFxcdDAsXFxuIDE4MTpcXHRcXHRcXHQuYlN5bmNoQWRkcmVzcyA9IFxcdDAsXFxuIDE4MjpcXHRcXHR9LFxcbiAxODM6XFx0XFx0e1xcbiAxODQ6XFx0XFx0XFx0LmJMZW5ndGggPSBcXHRcXHQwLFxcbiAxODU6XFx0XFx0XFx0LmJEZXNjcmlwdG9yVHlwZSA9IFxcdDAsXFxuIDE4NjpcXHRcXHRcXHQuYkVuZHBvaW50QWRkcmVzcyA9IFxcdDB4ODIsXFxuIDE4NzpcXHRcXHRcXHQuYm1BdHRyaWJ1dGVzID0gXFx0MHgwMyxcXG4gMTg4OlxcdFxcdFxcdC53TWF4UGFja2V0U2l6ZSA9IFxcdGNwdV90b19sZTE2KDgpLFxcbiAxODk6XFx0XFx0XFx0LmJJbnRlcnZhbCA9IFxcdFxcdDAsXFxuIDE5MDpcXHRcXHRcXHQuYlJlZnJlc2ggPSBcXHRcXHQwLFxcbiAxOTE6XFx0XFx0XFx0LmJTeW5jaEFkZHJlc3MgPSBcXHQwLFxcbiAxOTI6XFx0XFx0fSxcXG4gMTkzOlxcdFxcdHtcXG4gMTk0OlxcdFxcdFxcdC5iTGVuZ3RoID0gXFx0XFx0MCxcXG4gMTk1OlxcdFxcdFxcdC5iRGVzY3JpcHRvclR5cGUgPSBcXHQwLFxcbiAxOTY6XFx0XFx0XFx0LmJFbmRwb2ludEFkZHJlc3MgPSBcXHQweDAzLFxcbiAxOTc6XFx0XFx0XFx0LmJtQXR0cmlidXRlcyA9IFxcdDB4MDIsXFxuIDE5ODpcXHRcXHRcXHQud01heFBhY2tldFNpemUgPSBcXHRjcHVfdG9fbGUxNig2NCksXFxuIDE5OTpcXHRcXHRcXHQuYkludGVydmFsID0gXFx0XFx0MCxcXG4gMjAwOlxcdFxcdFxcdC5iUmVmcmVzaCA9IFxcdFxcdDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjU5LjcwNzY2MjQ0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxNDA5NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1EQzgwMCBVU0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYG1kYzgwMGAgVVNCIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcHJvY2VkdXJlcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGxpbmVzIDYwMCB0aHJvdWdoIDgwMCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGNvdmVyIHRoZSBtb2R1bGUncyBgaW5pdGAgYW5kIGBleGl0YCByb3V0aW5lcyDigJMgYWxsIHRoZSBjcml0aWNhbCBzZXR1cCBhbmQgY2xlYW51cCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgc3R1ZmY6IHJlc291cmNlIGFsbG9jYXRpb24sIHByb2JlIGFuZCBkaXNjb25uZWN0IHJlZ2lzdHJhdGlvbnMsIHBlcmhhcHMgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciB1bmJpbmRpbmcgZHVyaW5nIG1vZHVsZSByZW1vdmFsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSBjbGVhbiB1cCByZXNvdXJjZXMgaW4gdGhlIGBleGl0YCBwYXRoLiBJJ20gaG9waW5nIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG92ZXJseSBjb252b2x1dGVkIG9yLCBHb2QgZm9yYmlkLCByZXNvdXJjZSBsZWFrcy4uLiB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjE6MDA6MDIuMTY5MDc1MjM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDYwMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjAyOlxcdFxcdH1cXG4gNjAzOlxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFxuIDYwNjpcXHQvKlxcbiA2MDc6XFx0ICogSW5pdCB0aGUgZGV2aWNlOiAoMSkgYWxsb2MgbWVtICgyKSBJbmNyZWFzZSBNT0QgQ291bnQgLi5cXG4gNjA4OlxcdCAqL1xcbiA2MDk6XFx0c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX29wZW4gKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA2MTA6XFx0e1xcbiA2MTE6XFx0XFx0aW50IHJldHZhbD0wO1xcbiA2MTI6XFx0XFx0aW50IGVycm49MDtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjE1OlxcdFxcdFxcbiA2MTY6XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG4gNjE3OlxcdFxcdHtcXG4gNjE4OlxcdFxcdFxcdGVycm49LUVCVVNZO1xcbiA2MTk6XFx0XFx0XFx0Z290byBlcnJvcl9vdXQ7XFxuIDYyMDpcXHRcXHR9XFxuIDYyMTpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VvcGVuKVxcbiA2MjI6XFx0XFx0e1xcbiA2MjM6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYyNDpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG4gNjI1OlxcdFxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA2Mjg6XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gNjI5OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA2MzA6XFx0XFx0bWRjODAwLVxcdTAwM2VwaWNfaW5kZXg9MDtcXG4gNjMxOlxcdFxcdG1kYzgwMC1cXHUwMDNlcGljX2xlbj0tMTtcXG4gNjMyOlxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9idXN5PTA7XFxuIDYzNTpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdG1kYzgwMC1cXHUwMDNlaXJxX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDYzODpcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2VpcnFfdXJiLCBHRlBfS0VSTkVMKTtcXG4gNjM5OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNjQwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsXFxuIDY0MTpcXHRcXHRcXHRcXHRcXFwicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXFxcblxcXCIsIHJldHZhbCk7XFxuIDY0MjpcXHRcXHRcXHRlcnJuID0gLUVJTztcXG4gNjQzOlxcdFxcdFxcdGdvdG8gZXJyb3Jfb3V0O1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MTtcXG4gNjQ3OlxcdFxcdGRldl9kYmcoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxcXG5cXFwiKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0ZXJyb3Jfb3V0OlxcbiA2NTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NTE6XFx0XFx0cmV0dXJuIGVycm47XFxuIDY1MjpcXHR9XFxuIDY1MzpcXHRcXG4gNjU0OlxcdFxcbiA2NTU6XFx0LypcXG4gNjU2OlxcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XFxuIDY1NzpcXHQgKi9cXG4gNjU4OlxcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGludCByZXR2YWw9MDtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjYzOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZW9wZW4gXFx1MDAyNlxcdTAwMjYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXFxuIDY2NDpcXHRcXHR7XFxuIDY2NTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNjY2OlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDY2NzpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA2Njg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvcGVuPTA7XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHR7XFxuIDY3MjpcXHRcXHRcXHRyZXR2YWw9LUVJTztcXG4gNjczOlxcdFxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NzY6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjc3OlxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFxuIDY4MDpcXHQvKlxcbiA2ODE6XFx0ICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uXFxuIDY4MjpcXHQgKi9cXG4gNjgzOlxcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0c2l6ZV90IGxlZnQ9bGVuLCBzdHM9bGVuOyAvKiBzaW5nbGUgdHJhbnNmZXIgc2l6ZSAqL1xcbiA2ODY6XFx0XFx0Y2hhciBfX3VzZXIgKnB0ciA9IGJ1ZjtcXG4gNjg3OlxcdFxcdGludCByZXR2YWw7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDY5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2OTE6XFx0XFx0e1xcbiA2OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjk0OlxcdFxcdH1cXG4gNjk1OlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlID09IFdPUktJTkcpXFxuIDY5NjpcXHRcXHR7XFxuIDY5NzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXFxcXFxcXCJ3b3JraW5nXFxcXFxcXCJcXFwiXFxuIDY5ODpcXHRcXHRcXHQgICAgICAgXFxcInJlYWNoZWQgZHVyaW5nIHJlYWQgPyFcXFxcblxcXCIpO1xcbiA2OTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowMi4xNjkyMzQzODRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2NzUzNzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlbTpcblxuKipEaXNzZWN0aW5nIHRoZSBFbmRnYW1lIG9mIG1kYzgwMC5jKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBncmlwIG9uIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHRhaWwgZW5kIG9mIGBtZGM4MDAuY2AuIExldCdzIGFzc3VtZSBJJ3ZlIGFscmVhZHkgbmFpbGVkIGRvd24gdGhlIGJhc2ljcyBvZiB0aGlzIGRyaXZlciDigJMgZGV2aWNlIGVudW1lcmF0aW9uLCBlbmRwb2ludCBjb25maWd1cmF0aW9uLCB0aGUgdXN1YWwgVVNCIHNldHVwLiBOb3csIHdoYXQncyBpdCBkb2luZyBpbiB0aGUgZmluYWwgY2h1bms/IEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIHVzdWFsIGltYWdlIHRyYW5zZmVyIHByb2Nlc3MsIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBzdGFnZXMgb2YgYSBidWxrIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgbWF5YmUgc29tZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIE1EQzgwMCdzIGltYWdlIGhhbmRsaW5nIHByb3RvY29sLCBvciByZXNvdXJjZSByZWxlYXNlLiBJdCdzIGxpa2VseSB0aGF0IGF0IHRoaXMgc2VjdGlvbiwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVVNCIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiBUaGUgZnVuY3Rpb24gd291bGQgbGlrZWx5IGJlIHJlbGVhc2luZyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcywgY2xlYW5pbmcgdXAsIGFuZCBzaWduYWxpbmcgdGhlIHVzZXIgb3IgdGhlIGhpZ2hlci1sZXZlbCBpbWFnZSBtYW5hZ2VtZW50IGxheWVyIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUuIElmIHRoZSB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bCwgdGhpcyBtZWFucyBub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIGZpbmFsIGltYWdlLiBJZiBpdCB3YXNuJ3QsIHRoZSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYW4gZXJyb3IsIG9yIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0cm91Ymxlc2hvb3RpbmcuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgcGVjdWxpYXIgZXJyb3IgY29kZXMgb3Igc3BlY2lmaWMgZXJyb3ItaGFuZGxpbmcgcm91dGluZXMgdGhhdCBzdGFuZCBvdXQgYXMgdGhpcyBkcml2ZXIncyBzcGVjaWFsdHkuIEZpbmFsbHksIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIHRvIHJlbGVhc2UsIGJ1ZmZlcnMgdG8gZnJlZSwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGludm9rZT8gVGhhdCdzIHdoYXQgSSdsbCBiZSBmb2N1c2VkIG9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowNC45MzY3NzQ2MDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzAxOlxcdFxcdH1cXG4gNzAyOlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuKVxcbiA3MDM6XFx0XFx0e1xcbiA3MDQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzA2OlxcdFxcdH1cXG4gNzA3OlxcdFxcbiA3MDg6XFx0XFx0d2hpbGUgKGxlZnQpXFxuIDcwOTpcXHRcXHR7XFxuIDcxMDpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcXG4gNzExOlxcdFxcdFxcdHtcXG4gNzEyOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzEzOlxcdFxcdFxcdFxcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xcbiA3MTQ6XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzdHM9bGVmdCBcXHUwMDNlIChtZGM4MDAtXFx1MDAzZW91dF9jb3VudC1tZGM4MDAtXFx1MDAzZW91dF9wdHIpP21kYzgwMC1cXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cXHUwMDNlb3V0X3B0cjpsZWZ0O1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoc3RzIFxcdTAwM2M9IDApXFxuIDcxOTpcXHRcXHRcXHR7XFxuIDcyMDpcXHRcXHRcXHRcXHQvKiBUb28gbGVzcyBEYXRhIGluIGJ1ZmZlciAqL1xcbiA3MjE6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gRE9XTkxPQUQpXFxuIDcyMjpcXHRcXHRcXHRcXHR7XFxuIDcyMzpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZW91dF9jb3VudD0wO1xcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfcHRyPTA7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdFxcdFxcdFxcdC8qIERvd25sb2FkIC1cXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDcyODpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIsIEdGUF9LRVJORUwpO1xcbiA3Mjk6XFx0XFx0XFx0XFx0XFx0aWYgKHJldHZhbCkge1xcbiA3MzA6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gNzMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiIFxcXCJcXG4gNzMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCIocmV0dmFsPSVpKVxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gNzMzOlxcdFxcdFxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzM0OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBsZW4tbGVmdDtcXG4gNzM1OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzM2OlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3dhaXQsXFxuIDczNzpcXHRcXHRcXHRcXHRcXHQgICAgIG1kYzgwMC1cXHUwMDNlZG93bmxvYWRlZCxcXG4gNzM4OlxcdFxcdFxcdFxcdFxcdCAgICAgbXNlY3NfdG9famlmZmllcyhUT19ET1dOTE9BRF9HRVRfUkVBRFkpKTtcXG4gNzM5OlxcdFxcdFxcdFxcdFxcdGlmICghcmV0dmFsKVxcbiA3NDA6XFx0XFx0XFx0XFx0XFx0XFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiKTtcXG4gNzQxOlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRlZCA9IDA7XFxuIDc0MjpcXHRcXHRcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmItXFx1MDAzZXN0YXR1cyAhPSAwKVxcbiA3NDM6XFx0XFx0XFx0XFx0XFx0e1xcbiA3NDQ6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gNzQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIFxcXCJcXG4gNzQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCIoc3RhdHVzPSVpKVxcXFxuXFxcIixcXG4gNzQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiA3NDg6XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NDk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGxlbi1sZWZ0O1xcbiA3NTA6XFx0XFx0XFx0XFx0XFx0fVxcbiA3NTE6XFx0XFx0XFx0XFx0fVxcbiA3NTI6XFx0XFx0XFx0XFx0ZWxzZVxcbiA3NTM6XFx0XFx0XFx0XFx0e1xcbiA3NTQ6XFx0XFx0XFx0XFx0XFx0LyogTm8gbW9yZSBieXRlcyAtXFx1MDAzZSB0aGF0J3MgYW4gZXJyb3IqL1xcbiA3NTU6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDc1NzpcXHRcXHRcXHRcXHR9XFxuIDc1ODpcXHRcXHRcXHR9XFxuIDc1OTpcXHRcXHRcXHRlbHNlXFxuIDc2MDpcXHRcXHRcXHR7XFxuIDc2MTpcXHRcXHRcXHRcXHQvKiBDb3B5IEJ5dGVzICovXFxuIDc2MjpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHB0ciwgXFx1MDAyNm1kYzgwMC1cXHUwMDNlb3V0IFttZGM4MDAtXFx1MDAzZW91dF9wdHJdLFxcbiA3NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RzKSkge1xcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc2NjpcXHRcXHRcXHRcXHR9XFxuIDc2NzpcXHRcXHRcXHRcXHRwdHIrPXN0cztcXG4gNzY4OlxcdFxcdFxcdFxcdGxlZnQtPXN0cztcXG4gNzY5OlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cis9c3RzO1xcbiA3NzA6XFx0XFx0XFx0fVxcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc3NDpcXHRcXHRyZXR1cm4gbGVuLWxlZnQ7XFxuIDc3NTpcXHR9XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0LypcXG4gNzc5OlxcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cXG4gNzgwOlxcdCAqIElmIGEgOEJ5dGUgQ29tbWFuZCBpcyByZWNlaXZlZCwgaXQgd2lsbCBiZSBzZW5kIHRvIHRoZSBjYW1lcmEuXFxuIDc4MTpcXHQgKiBBZnRlciB0aGlzIHRoZSBkcml2ZXIgaW5pdGlhdGVzIHRoZSByZXF1ZXN0IGZvciB0aGUgYW5zd2VyIG9yXFxuIDc4MjpcXHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cXG4gNzgzOlxcdCAqL1xcbiA3ODQ6XFx0c3RhdGljIHNzaXplX3QgbWRjODAwX2RldmljZV93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA3ODU6XFx0e1xcbiA3ODY6XFx0XFx0c2l6ZV90IGk9MDtcXG4gNzg3OlxcdFxcdGludCByZXR2YWw7XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSAhPSBSRUFEWSlcXG4gNzkxOlxcdFxcdHtcXG4gNzkyOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzkzOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDc5NDpcXHRcXHR9XFxuIDc5NTpcXHRcXHRpZiAoIW1kYzgwMC1cXHUwMDNlb3BlbiApXFxuIDc5NjpcXHRcXHR7XFxuIDc5NzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc5ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA3OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowNC45MzczMjIxMDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMzMzMjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERhdGEgU3RyZWFtOiBCZXlvbmQgTGluZSA4MDAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoaXMgZmlsZSwgYW5kIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9uIHRoZSBpbml0aWFsIHNlY3Rpb25zLCB0aGUgc3RydWN0dXJlIGFuZCBwcmVsaW1pbmFyeSByZXN1bHRzLiBIb3dldmVyLCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvIHNvbWUgc3BlY2lmaWMgYW5vbWFsaWVzIEkgc3VzcGVjdGVkLCBJIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBpbml0aWFsIGFuYWx5c2lzLiBNeSBjdXJyZW50IHByb2Nlc3Mgc3RvcHMgYXJvdW5kIGxpbmUgODAwLCB3aGljaCBoYXMgZ2l2ZW4gbWUgYW4gaW50ZXJlc3RpbmcgcHJvZmlsZSBhbmQgc29tZSBsZWFkcywgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRyZW5kcyBJ4oCZbSBwaWNraW5nIHVwIGluIHRoZSBmaXJzdCBwYXJ0IGhhdmUgYSBjb250aW51YXRpb24sIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBvciBhIGNvcnJlbGF0aW9uIHdpdGggZXZlbnRzIHRoYXQgbWF5IGhhcHBlbiBsYXRlciBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgYW5kIHRoZSByZW1haW5pbmcgZGF0YSBob2xkcyB0aGUga2V5IHRvIHRoZSBuZXh0IHN0ZXBzLiBMZXQncyBnZXQgdG8gdGhlIHJlbWFpbmluZyBkYXRhIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIxOjAwOjA3LjE1MDY1OTEwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdFxcdHdoaWxlIChpXFx1MDAzY2xlbilcXG4gODAyOlxcdFxcdHtcXG4gODAzOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgYztcXG4gODA0OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIFxcbiA4MDU6XFx0XFx0XFx0e1xcbiA4MDY6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4MDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gODA4OlxcdFxcdFxcdH1cXG4gODA5OlxcdFxcdFxcdFxcbiA4MTA6XFx0XFx0XFx0aWYoZ2V0X3VzZXIoYywgYnVmK2kpKVxcbiA4MTE6XFx0XFx0XFx0e1xcbiA4MTI6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgxNDpcXHRcXHRcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdC8qIGNoZWNrIGZvciBjb21tYW5kIHN0YXJ0ICovXFxuIDgxNzpcXHRcXHRcXHRpZiAoYyA9PSAweDU1KVxcbiA4MTg6XFx0XFx0XFx0e1xcbiA4MTk6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA4MjA6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gODIxOlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA4MjI6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XFxuIDgyMzpcXHRcXHRcXHR9XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIHNhdmUgY29tbWFuZCBieXRlICovXFxuIDgyNjpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2Vpbl9jb3VudCBcXHUwMDNjIDgpXFxuIDgyNzpcXHRcXHRcXHR7XFxuIDgyODpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWluW21kYzgwMC1cXHUwMDNlaW5fY291bnRdID0gYztcXG4gODI5OlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlaW5fY291bnQrKztcXG4gODMwOlxcdFxcdFxcdH1cXG4gODMxOlxcdFxcdFxcdGVsc2VcXG4gODMyOlxcdFxcdFxcdHtcXG4gODMzOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gODM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA4MzU6XFx0XFx0XFx0fVxcbiA4MzY6XFx0XFxuIDgzNzpcXHRcXHRcXHQvKiBDb21tYW5kIEJ1ZmZlciBmdWxsID8gLVxcdTAwM2Ugc2VuZCBpdCB0byBjYW1lcmEgKi9cXG4gODM4OlxcdFxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZWluX2NvdW50ID09IDgpXFxuIDgzOTpcXHRcXHRcXHR7XFxuIDg0MDpcXHRcXHRcXHRcXHRpbnQgYW5zd2Vyc2l6ZTtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKVxcbiA4NDM6XFx0XFx0XFx0XFx0e1xcbiA4NDQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJDYW1lcmEgZGlkbid0IGdldCByZWFkeS5cXFxcblxcXCIpO1xcbiA4NDY6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4NDc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDg0ODpcXHRcXHRcXHRcXHR9XFxuIDg0OTpcXHRcXG4gODUwOlxcdFxcdFxcdFxcdGFuc3dlcnNpemU9bWRjODAwX2dldEFuc3dlclNpemUgKG1kYzgwMC1cXHUwMDNlaW5bMV0pO1xcbiA4NTE6XFx0XFxuIDg1MjpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVdPUktJTkc7XFxuIDg1MzpcXHRcXHRcXHRcXHRtZW1jcHkgKG1kYzgwMC1cXHUwMDNld3JpdGVfdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIsIG1kYzgwMC1cXHUwMDNlaW4sOCk7XFxuIDg1NDpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDg1NTpcXHRcXHRcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2V3cml0ZV91cmIsIEdGUF9LRVJORUwpO1xcbiA4NTY6XFx0XFx0XFx0XFx0aWYgKHJldHZhbCkge1xcbiA4NTc6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gODU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJzdWJtaXR0aW5nIHdyaXRlIHVyYiBmYWlscyBcXFwiXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiKHJldHZhbD0laSlcXFxcblxcXCIsIHJldHZhbCk7XFxuIDg2MDpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDg2MTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gODYyOlxcdFxcdFxcdFxcdH1cXG4gODYzOlxcdFxcdFxcdFxcdHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXFx1MDAzZXdyaXRlX3dhaXQsIG1kYzgwMC1cXHUwMDNld3JpdHRlbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoVE9fV1JJVEVfR0VUX1JFQURZKSk7XFxuIDg2NTpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXR0ZW4gPSAwO1xcbiA4NjY6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gV09SS0lORylcXG4gODY3OlxcdFxcdFxcdFxcdHtcXG4gODY4OlxcdFxcdFxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDg3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gODcxOlxcdFxcdFxcdFxcdH1cXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0XFx0XFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgbWRjODAwLVxcdTAwM2VpblsxXSlcXG4gODc0OlxcdFxcdFxcdFxcdHtcXG4gODc1OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi9cXG4gODc2OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgzZTogLyogVGFrZSBzaG90IGluIEZpbmUgTW9kZSAoV0NhbSBNb2RlKSAqL1xcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlcGljX2xlbiBcXHUwMDNjIDApXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHRcXHR7XFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA4ODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcImNhbGwgMHgwNyBiZWZvcmUgXFxcIlxcbiA4ODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIjB4MDUsMHgzZVxcXFxuXFxcIik7XFxuIDg4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVJFQURZO1xcbiA4ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuIDg4NjpcXHRcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXBpY19sZW49LTE7XFxuIDg4NzpcXHRcXHRcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gODg4OlxcdFxcbiA4ODk6XFx0XFx0XFx0XFx0XFx0Y2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi9cXG4gODkwOlxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD1hbnN3ZXJzaXplKzY0O1xcbiA4OTE6XFx0XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1ET1dOTE9BRDtcXG4gODkyOlxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ET1dOTE9BRF9HRVRfQlVTWSk7XFxuIDg5MzpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4OTc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGFuc3dlcnNpemUpXFxuIDg5ODpcXHRcXHRcXHRcXHRcXHRcXHR7XFxuIDg5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjE6MDA6MDcuMTUwODMyMzc3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4NDg0MjUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVVNCIERyaXZlciBQcm9iZSBQYXRjaCBhbmQgS01TQU4gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHJlZ2lzdGVyZWQgdGhlIFVTQiBkZXZpY2Ugd2l0aCBgdXNiX3JlZ2lzdGVyX2RldmAgKmJlZm9yZSogZnVsbHkgaW5pdGlhbGl6aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSBhbmQgVVJCcywgY3JlYXRpbmcgYSB3aW5kb3cgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gb2NjdXIgYmVmb3JlIHRoZSBkcml2ZXIgd2FzIHJlYWR5LiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlLiBUaGUgcGF0Y2ggc21hcnRseSByZW9yZGVycyB0aGUgcmVnaXN0cmF0aW9uLCBtb3ZpbmcgaXQgdG8gKmFmdGVyKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSBhbmQgdGhlIGBpb19sb2NrYCBoYXMgYmVlbiByZWxlYXNlZC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nLiBJZiBgdXNiX3JlZ2lzdGVyX2RldmAgZmFpbHMsIHRoZSBgbWRjODAwLVx1MDAzZWRldmAgcG9pbnRlciBpcyBzZXQgdG8gYE5VTExgIGFuZCB0aGUgYG1kYzgwMC1cdTAwM2VzdGF0ZWAgaXMgc2V0IHRvIGBOT1RfQ09OTkVDVEVEYCwgZW5zdXJpbmcgYSBjbGVhbiB0ZWFyZG93bi5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJ3MgcHVycG9zZSwgbm8sIGl0IGRvZXMgbm90LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQncyBzb2xlbHkgYWJvdXQgc3luY2hyb25pemF0aW9uIGFuZCBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcGF0Y2ggcmVhcnJhbmdlcyAqd2hlbiogdGhlIGRyaXZlciBiZWNvbWVzIGFjY2Vzc2libGU7IGl0IGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgY29kZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgaXMgdXNlZC4gVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2Yga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgZm9jdXMgb24gdGhlIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgb24gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gaGFuZGxlIHRoZSBkZXZpY2UncyBvcGVuL2Nsb3NlIGNhbGxzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgbG9jayB1c2FnZSwgb3IgZGV2aWNlIGxpZmVjeWNsZSBhcmUgd2VsbCB3aXRoaW4gdGhlIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMgb2Ygc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gV2UncmUgYWxyZWFkeSBydW5uaW5nIHRob3NlIGNoZWNrcywgc28gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5UaGUgcmVhc29uaW5nIEknbGwgcHJvdmlkZSBpcyB0aGlzOiBUaGlzIHBhdGNoIHJlb3JnYW5pemVzIFVTQiBkZXZpY2UgcmVnaXN0cmF0aW9uIChgdXNiX3JlZ2lzdGVyX2RldigpYCkgaW4gYG1kYzgwMF91c2JfcHJvYmUoKWAgdG8gb2NjdXIgYWZ0ZXIgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgdGhlIGRldmljZSBzdGF0ZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIGBpb19sb2NrYCBpcyB1bmxvY2tlZC4gRXJyb3IgaGFuZGxpbmcgaXMgYWRkZWQgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIGlmIHJlZ2lzdHJhdGlvbiBmYWlscy4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGUgcGF0Y2gncyBwcmltYXJ5IGZvY3VzIGlzIHJlc29sdmluZyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBkZXZpY2UgcHJvYmUuIFRoZXNlIGtpbmRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIGFyZSBiZXN0IGFkZHJlc3NlZCB1c2luZyBLQVNBTiBhbmQgTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGRlYnVnIGZhY2lsaXRpZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1biBpcyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNjEsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIxOjAwOjE1Ljk5OTI2MDM0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 20:57:44 +0000 UTC FinishedAt: 2026-09-04 21:00:18 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB", "USB_MDC800" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB", "USB_MDC800" ], "series_id": "c5d1cca9-64ec-4eba-bfc7-c34a103127be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mdc800_usb_probe", "mdc800_device_open", "mdc800_device_read", "mdc800_device_write", "mdc800_device_release", "mdc800_usb_disconnect" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtVU0JfTURDODAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRjODAwX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX29wZW4mIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWFkJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O21kYzgwMF91c2JfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gc2VxdWVuY2UgaW4gbWRjODAwX3VzYl9wcm9iZSBpbiB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZHJpdmVyLCBtb3ZpbmcgdXNiX3JlZ2lzdGVyX2RldiBhZnRlciBVUkIgc2V0dXAgYW5kIGFkZGluZyBwcm9wZXIgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoRHVtbXkgSENEIC8gUmF3IEdhZGdldCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YmZiZmE2OWFmYzdmMzVhMmQ2ODc2NWMxN2NlZjcxMTVhMDU0ODNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMDo1ODo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5pbmRleCBjYTI4N2I3NzBlOGNiLi4wMTkzMTQ3MDJlMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5AQCAtNDgyLDEzICYjNDM7NDgyLDYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIFxuLVx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuLVx0aWYgKHJldHZhbCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4tXG4gXHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiBcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gXG5AQCAtNTI3LDYgJiM0Mzs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbiYjNDM7XHRpZiAocmV0dmFsKSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuJiM0MztcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4mIzQzO1x0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiBcdFxuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1VTQl9NREM4MDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGM4MDBfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfb3BlbiYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlYWQmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV93cml0ZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bWRjODAwX3VzYl9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC00ODIsMTMgJiM0Mzs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCiAJbXV0ZXhfbG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiAKLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhbXA7bWRjODAwX2NsYXNzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmFtcDtpbnRmLSZndDtkZXYsICYjMzQ7Tm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuJiMzNDspOwotCQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAltZGM4MDAtJmd0O2Rldj1kZXY7CiAJbWRjODAwLSZndDtvcGVuPTA7CiAKQEAgLTUyNyw2ICYjNDM7NTIwLDE2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJbWRjODAwLSZndDtzdGF0ZT1SRUFEWTsKIAogCW11dGV4X3VubG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpOwomIzQzOwlpZiAocmV0dmFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiYjMzQ7KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJbWRjODAwLSZndDtkZXYgPSBOVUxMOwomIzQzOwkJbWRjODAwLSZndDtzdGF0ZSA9IE5PVF9DT05ORUNURUQ7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KIAkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBldmFsdWF0ZSBhIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIExldCYjMzk7cyBkaXZlIHJpZ2h0IGluIGFuZCBsb29rIGF0IHRoZSBkaWZmLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpYCB3YXMgbW92ZWQgKmFmdGVyKiBgbXV0ZXhfdW5sb2NrKCZhbXA7bWRjODAwLSZndDtpb19sb2NrKWAgaW4gdGhlIGBtZGM4MDBfdXNiX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZywgYXMgb3JkZXJpbmcgb2YgbXV0ZXggb3BlcmF0aW9ucyBhbmQgcmVnaXN0cmF0aW9uIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyBob3cgYG1kYzgwMC5jYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGJvdGggYG1kYzgwMC5jYCBpdHNlbGYgYW5kIGl0cyBjb3JyZXNwb25kaW5nIEtjb25maWcgZmlsZS4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFjY2Vzc2libGUgaXQgaXMgZm9yIHRlc3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGdldCB0byBpdCB0aHJvdWdoIHN5emthbGxlciwgcGVyaGFwcyB2aWEgcmF3IFVTQiBnYWRnZXQgZW11bGF0aW9uLgoKSSYjMzk7bSBnb2luZyB0byBncmFiIHRob3NlIGZpbGVzIG5vdywgZWl0aGVyIHdpdGggYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIGFuZCBnZXQgdGhlIG5lZWRlZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTQl9NREM4MDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCKVx0XHQmIzQzOz0gc3RvcmFnZS9cbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ2LVxuZHJpdmVycy91c2IvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1VTQl9NREM4MDApXHQmIzQzOz0gaW1hZ2UvXG5kcml2ZXJzL3VzYi9NYWtlZmlsZS00OC1vYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKVx0JiM0Mzs9IGltYWdlL1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWc9NT1jb21tZW50IFwmIzM0O1VTQiBJbWFnaW5nIGRldmljZXNcJiMzNDtcbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWctNi1cbmRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWc6Nzpjb25maWcgVVNCX01EQzgwMFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL01ha2VmaWxlLTUtXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfTURDODAwKVx0JiM0Mzs9IG1kYzgwMC5vXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19VU0JfTUlDUk9URUspXHQmIzQzOz0gbWljcm90ZWsub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBmb3IgVVNCIEltYWdpbmcgRHJpdmVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDcuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBVU0IgaW1hZ2luZyBkZXZpY2VzIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEkmIzM5O2xsIGJlIHF1aWNrbHkgYXNzZXNzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzLCB0aGUgc3ltYm9scyB1c2VkLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGludm9sdmVkLiBUaGlzIGluaXRpYWwgc2NhbiB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgaGlnaC1sZXZlbCBkZXNpZ24gY2hvaWNlcyBtYWRlIGZvciB0aGVzZSBkcml2ZXJzOiBIb3cgYXJlIGRpZmZlcmVudCBVU0IgaW1hZ2luZyBkZXZpY2VzIHN1cHBvcnRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgbGF0ZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBJbWFnaW5nIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O1VTQiBJbWFnaW5nIGRldmljZXNcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRjb25maWcgVVNCX01EQzgwMFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEgc3VwcG9ydFwmIzM0O1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHN0aWxsIGNhbWVyYSB0b1xuICAxMTpcdFx0ICB5b3VyIGNvbXB1dGVyJiMzOTtzIFVTQiBwb3J0LiBUaGlzIGRyaXZlciBjYW4gYmUgdXNlZCB3aXRoIGdwaG90byAwLjQuM1xuICAxMjpcdFx0ICBhbmQgaGlnaGVyIChsb29rIGF0IFx1MDAzY2h0dHA6Ly93d3cuZ3Bob3RvLm9yZy9cdTAwM2UpLlxuICAxMzpcdFx0ICBUbyB1c2UgaXQgY3JlYXRlIGEgZGV2aWNlIG5vZGUgd2l0aCBcJiMzNDtta25vZCAvZGV2L211c3RlayBjIDE4MCAzMlwmIzM0OyBhbmRcbiAgMTQ6XHRcdCAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWRjODAwLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBVU0JfTUlDUk9URUtcbiAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O01pY3JvdGVrIFg2VVNCIHNjYW5uZXIgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBTQ1NJXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdGVrIFg2VVNCIGFuZFxuICAyNDpcdFx0ICBwb3NzaWJseSB0aGUgUGhhbnRvbSAzMzZDWCwgUGhhbnRvbSBDNiBhbmQgU2Nhbk1ha2VyIFY2VShTKUwuXG4gIDI1Olx0XHQgIFN1cHBvcnQgZm9yIGFueXRoaW5nIGJ1dCB0aGUgWDYgaXMgZXhwZXJpbWVudGFsLlxuICAyNjpcdFx0ICBQbGVhc2UgcmVwb3J0IGZhaWx1cmVzIGFuZCBzdWNjZXNzZXMuXG4gIDI3Olx0XHQgIFRoZSBzY2FubmVyIHdpbGwgYXBwZWFyIGFzIGEgc2NzaSBnZW5lcmljIGRldmljZSB0byB0aGUgcmVzdFxuICAyODpcdFx0ICBvZiB0aGUgc3lzdGVtLiBTY3NpIHN1cHBvcnQgaXMgcmVxdWlyZWQuXG4gIDI5Olx0XHQgIFRoaXMgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgY2FsbGVkIG1pY3JvdGVrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFVTQiBNREM4MDAgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBVU0JfTURDODAwYCBpcyB0aGUga2V5IGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB3aXRoaW4gdGhlIFVTQiBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZXMuIEkmIzM5O2QgaGVhZCBzdHJhaWdodCBmb3IgdGhlIGNvcmU6IGVpdGhlciBgZHJpdmVycy91c2IvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL01ha2VmaWxlYCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIG9iamVjdCBmaWxlIGluY2x1c2lvbiB3aWxsIHJlc2lkZS4gQnV0LCBnaXZlbiB0aGF0IHRoaXMgaXMgYSAqY29uZmlndXJhdGlvbiogaXRlbSwgcmF0aGVyIHRoYW4gYSBidWlsZCAqdGFyZ2V0KiwgbXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gcHJpb3JpdGl6ZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlyc3QuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGBjb25maWdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvciB0aGUgYE1EQzgwMGAgZGV2aWNlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGRyaXZlcnMvdXNiL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ltYWdlL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnPTExNj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExNy1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTE4OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbWRjODAwLmNgIGZvciBVU0IgSW5zaWdodCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYG1kYzgwMF91c2JfcHJvYmVgIOKAkyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXTigJlsbCB0ZWxsIG1lIGhvdyB0aGlzIHBhcnRpY3VsYXIgVVNCIGRldmljZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgaW5pdGlhbGl6YXRpb24gc3RlcHMgdGhleSYjMzk7cmUgdGFraW5nLCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZGV2aWNlIGRldGVjdGlvbiwgYW5kIHdoYXQgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBNREM4MDAgdGhleSYjMzk7cmUgYWRkcmVzc2luZyByaWdodCBvZmYgdGhlIGJhdC4gQmV5b25kIHRoYXQgaW5pdGlhbCBwcm9iZSwgSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHNraW0gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGBtZGM4MDBfdXNiX3Byb2JlYCwgYW5kIGxvb2sgZm9yIGFueSBpbnRlcmVzdGluZyBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjdXN0b20gZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0bz8gVGhlIGJpZ2dlciBwaWN0dXJlIG1hdHRlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueXRoaW5nIG5ldyBvciBkaWZmZXJlbnQgY29tcGFyZWQgdG8gcHJldmlvdXMgdmVyc2lvbnMuIEl0JiMzOTtzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2MDpcdFx0e1xuIDQ2MTpcdFx0XHRtZGM4MDAtXHUwMDNlZW5kcG9pbnRbaV09LTE7XG4gNDYyOlx0XHRcdGZvciAoaj0wOyBqXHUwMDNjNDsgaiYjNDM7JiM0MzspXG4gNDYzOlx0XHRcdHtcbiA0NjQ6XHRcdFx0XHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXHUwMDI2aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxuIDQ2NTpcdFx0XHRcdHtcbiA0NjY6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT1pbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA7XG4gNDY3Olx0XHRcdFx0XHRpZiAoaT09MSlcbiA0Njg6XHRcdFx0XHRcdHtcbiA0Njk6XHRcdFx0XHRcdFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iSW50ZXJ2YWw7XG4gNDcwOlx0XHRcdFx0XHR9XG4gNDcxOlx0XHRcdFx0fVxuIDQ3MjpcdFx0XHR9XG4gNDczOlx0XHRcdGlmIChtZGM4MDAtXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXG4gNDc0Olx0XHRcdHtcbiA0NzU6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIFdyb25nIEVuZHBvaW50cy5cXG5cJiMzNDspO1xuIDQ3NjpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ3NzpcdFx0XHR9XG4gNDc4Olx0XHR9XG4gNDc5Olx0XG4gNDgwOlx0XG4gNDgxOlx0XHRkZXZfaW5mbyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7Rm91bmQgTXVzdGVrIE1EQzgwMCBvbiBVU0IuXFxuXCYjMzQ7KTtcbiA0ODI6XHRcbiA0ODM6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0bWRjODAwLVx1MDAzZWRldj1kZXY7XG4gNDg2Olx0XHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIDQ4NzpcdFxuIDQ4ODpcdFx0LyogU2V0dXAgVVJCIFN0cnVjdHMgKi9cbiA0ODk6XHRcdHVzYl9maWxsX2ludF91cmIgKFxuIDQ5MDpcdFx0XHRtZGM4MDAtXHUwMDNlaXJxX3VyYixcbiA0OTE6XHRcdFx0bWRjODAwLVx1MDAzZWRldixcbiA0OTI6XHRcdFx0dXNiX3JjdmludHBpcGUgKG1kYzgwMC1cdTAwM2VkZXYsbWRjODAwLVx1MDAzZWVuZHBvaW50IFsxXSksXG4gNDkzOlx0XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiX2J1ZmZlcixcbiA0OTQ6XHRcdFx0OCxcbiA0OTU6XHRcdFx0bWRjODAwX3VzYl9pcnEsXG4gNDk2Olx0XHRcdG1kYzgwMCxcbiA0OTc6XHRcdFx0aXJxX2ludGVydmFsXG4gNDk4Olx0XHQpO1xuIDQ5OTpcdFxuIDUwMDpcdFx0dXNiX2ZpbGxfYnVsa191cmIgKFxuIDUwMTpcdFx0XHRtZGM4MDAtXHUwMDNld3JpdGVfdXJiLFxuIDUwMjpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDUwMzpcdFx0XHR1c2Jfc25kYnVsa3BpcGUgKG1kYzgwMC1cdTAwM2VkZXYsIG1kYzgwMC1cdTAwM2VlbmRwb2ludFswXSksXG4gNTA0Olx0XHRcdG1kYzgwMC1cdTAwM2V3cml0ZV91cmJfYnVmZmVyLFxuIDUwNTpcdFx0XHQ4LFxuIDUwNjpcdFx0XHRtZGM4MDBfdXNiX3dyaXRlX25vdGlmeSxcbiA1MDc6XHRcdFx0bWRjODAwXG4gNTA4Olx0XHQpO1xuIDUwOTpcdFxuIDUxMDpcdFx0dXNiX2ZpbGxfYnVsa191cmIgKFxuIDUxMTpcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLFxuIDUxMjpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDUxMzpcdFx0XHR1c2JfcmN2YnVsa3BpcGUgKG1kYzgwMC1cdTAwM2VkZXYsIG1kYzgwMC1cdTAwM2VlbmRwb2ludCBbM10pLFxuIDUxNDpcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiX2J1ZmZlcixcbiA1MTU6XHRcdFx0NjQsXG4gNTE2Olx0XHRcdG1kYzgwMF91c2JfZG93bmxvYWRfbm90aWZ5LFxuIDUxNzpcdFx0XHRtZGM4MDBcbiA1MTg6XHRcdCk7XG4gNTE5Olx0XG4gNTIwOlx0XHRtZGM4MDAtXHUwMDNlc3RhdGU9UkVBRFk7XG4gNTIxOlx0XG4gNTIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDUyMzpcdFxuIDUyNDpcdFx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuIDUyNTpcdFx0aWYgKHJldHZhbCkge1xuIDUyNjpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCYjMzQ7KTtcbiA1Mjc6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTI4Olx0XHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuIDUyOTpcdFx0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuIDUzMDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDUzMTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1MzI6XHRcdH1cbiA1MzM6XHRcdFxuIDUzNDpcdFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIDUzNTpcdFx0cmV0dXJuIDA7XG4gNTM2Olx0fVxuIDUzNzpcdFxuIDUzODpcdFxuIDUzOTpcdC8qXG4gNTQwOlx0ICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKVxuIDU0MTpcdCAqL1xuIDU0MjpcdHN0YXRpYyB2b2lkIG1kYzgwMF91c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gNTQzOlx0e1xuIDU0NDpcdFx0c3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuIDU0NTpcdFxuIDU0NjpcdFx0ZGV2X2RiZyhcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7KCVzKSBjYWxsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiA1NDc6XHRcbiA1NDg6XHRcdGlmIChtZGM4MDApIHtcbiA1NDk6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njg5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgbWRjODAwLmNgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgaW5pdGlhbCBzbmlwcGV0cyBvZiBgbWRjODAwLmNgLCBidXQgdG8gKnJlYWxseSogZ3Jhc3AgdGhpcyBkcml2ZXImIzM5O3MgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgdGhpbmcuIFRoZSBwYXJ0aWFsIHZpZXdzIGFyZSBoZWxwZnVsIGZvciBjb250ZXh0LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZHJpdmVyIGxpZmVjeWNsZSwgdGhlIGludGVycnVwdCBoYW5kbGluZywgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9ucyDigJMgYWxsIG9mIHRoYXQgcmVxdWlyZXMgYSBjb21wcmVoZW5zaXZlIHZpZXcuIEkgY2FuIHByb2JhYmx5IGluZmVyIGEgbG90IGZyb20gd2hhdCBJJiMzOTt2ZSBzZWVuLCBidXQgdGhlIG51YW5jZXMgYXJlIG9mdGVuIGhpZGRlbiB1bnRpbCB0aGUgY29kZSBpcyBmdWxseSB2aXNpYmxlLiBXaGF0IGFyZSB0aGUgc3VidGxlIGludGVyYWN0aW9ucz8gSG93IGRvZXMgZXJyb3IgaGFuZGxpbmcgd29yayBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8/IEdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIHdpbGwgYWxsb3cgbWUgdG8gbWFrZSBhbnkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9ucywgaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBvciBzdWdnZXN0IGltcHJvdmVtZW50cyB0byB0aGUgYXJjaGl0ZWN0dXJlIHdpdGggY29uZmlkZW5jZS4gTGV0JiMzOTtzIGdldCB0aGUgd2hvbGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBjb3B5cmlnaHQgKEMpIDE5OTkvMjAwMCBieSBIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVxuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdFxuICAgNzpcdC8qXG4gICA4Olx0ICpcdFVTQi1LZXJuZWwgRHJpdmVyIGZvciB0aGUgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYVxuICAgOTpcdCAqXHQoYykgMTk5OS8yMDAwIEhlbm5pbmcgWmFiZWwgXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXHUwMDNlXG4gIDEwOlx0ICpcbiAgMTE6XHQgKlxuICAxMjpcdCAqIFRoZSBkcml2ZXIgYnJpbmdzIHRoZSBVU0IgZnVuY3Rpb25zIG9mIHRoZSBNREM4MDAgdG8gTGludXguXG4gIDEzOlx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcbiAgMTQ6XHQgKiB0byB0aGUgS2VybmVsIE5vZGUuXG4gIDE1Olx0ICogVGhlIERyaXZlciB1c2VzIGEgbWlzYyBkZXZpY2UgTm9kZS4gQ3JlYXRlIGl0IHdpdGggOlxuICAxNjpcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXG4gIDE3Olx0ICpcbiAgMTg6XHQgKiBUaGUgZHJpdmVyIHN1cHBvcnRzIG9ubHkgb25lIGNhbWVyYS5cbiAgMTk6XHQgKiBcbiAgMjA6XHQgKiBGaXg6IG1kYzgwMCB1c2VkIHNsZWVwX29uIGFuZCBzbGVwdCB3aXRoIGlvX2xvY2sgaGVsZC5cbiAgMjE6XHQgKiBDb252ZXJ0ZWQgc2xlZXBfb24gdG8gd2FpdHF1ZXVlcyB3aXRoIHNjaGVkdWxlX3RpbWVvdXQgYW5kIG1hZGUgaW9fbG9ja1xuICAyMjpcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cbiAgMjM6XHQgKiBieSBPbGl2ZXIgTmV1a3VtIFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVx1MDAzZVxuICAyNDpcdCAqICgwMi8xMi8yMDAxKVxuICAyNTpcdCAqIFxuICAyNjpcdCAqIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuXG4gIDI3Olx0ICogKDA4LzA0LzIwMDEpIGdiXG4gIDI4Olx0ICpcbiAgMjk6XHQgKiB2ZXJzaW9uIDAuNy41XG4gIDMwOlx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cbiAgMzE6XHQgKiBUaGFua3MgdG8gT2xpdmVyIE5ldWt1bSBcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcdTAwM2Ugd2hvIFxuICAzMjpcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cbiAgMzM6XHQgKiAoMzAvMTAvMjAwMClcbiAgMzQ6XHQgKlxuICAzNTpcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cdTAwM2VkZXYgYmVmb3JlIHN1Ym1pdHRpbmcgdXJiLlxuICAzNjpcdCAqIGJ5IEdyZWcgS0ggXHUwMDNjZ3JlZ0Brcm9haC5jb21cdTAwM2VcbiAgMzc6XHQgKiAoMTMvMTAvMjAwMClcbiAgMzg6XHQgKlxuICAzOTpcdCAqIHZlcnNpb24gMC43LjNcbiAgNDA6XHQgKiBidWdmaXggOiBUaGUgbWRjODAwLVx1MDAzZXN0YXRlIGZpZWxkIGdldHMgc2V0IHRvIFJFQURZIGFmdGVyIHRoZVxuICA0MTpcdCAqIGRpc2Nvbm5lY3QgZnVuY3Rpb24gc2V0cyBpdCB0byBOT1RfQ09OTkVDVEVELiBUaGlzIG1ha2VzIHRoZVxuICA0MjpcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXG4gIDQzOlx0ICogaGFuZyB1cHMuXG4gIDQ0Olx0ICpcbiAgNDU6XHQgKiB2ZXJzaW9uIDAuNy4xXG4gIDQ2Olx0ICogTU9EX0lOQyBhbmQgTU9EX0RFQyBhcmUgY2hhbmdlZCBpbiB1c2JfcHJvYmUgdG8gcHJldmVudCBsb2FkL3VubG9hZFxuICA0NzpcdCAqIHByb2JsZW1zIHdoZW4gY29tcGlsZWQgYXMgTW9kdWxlLlxuICA0ODpcdCAqICgwNC8wNC8yMDAwKVxuICA0OTpcdCAqXG4gIDUwOlx0ICogVGhlIG1kYzgwMCBkcml2ZXIgZ2V0cyBhc3NpZ25lZCB0aGUgVVNCIE1pbm9yIDMyLTQ3LiBUaGUgUmVnaXN0cmF0aW9uXG4gIDUxOlx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cbiAgNTI6XHQgKiAoMjYvMDMvMjAwMClcbiAgNTM6XHQgKlxuICA1NDpcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cbiAgNTU6XHQgKiAoMDEvMDMvMjAwMClcbiAgNTY6XHQgKlxuICA1NzpcdCAqIHZlcnNpb24gMC43LjBcbiAgNTg6XHQgKiBSZXdyaXRlIG9mIHRoZSBkcml2ZXIgOiBUaGUgZHJpdmVyIG5vdyB1c2VzIFVSQiYjMzk7cy4gVGhlIG9sZCBzdHVmZlxuICA1OTpcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXG4gIDYwOlx0ICpcbiAgNjE6XHQgKiB2ZXJzaW9uIDAuNi4wXG4gIDYyOlx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXG4gIDYzOlx0ICogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkcml2ZXIuIEEgc3BlY2lhbCBleGVjdXRlQ29tbWFuZCBmdW5jdGlvblxuICA2NDpcdCAqIGZvciB0aGlzIGRyaXZlciBpcyBpbmNsdWRlZCB0byBncGhvdG8uXG4gIDY1Olx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxuICA2NjpcdCAqIEVpdGhlciB3aXRoIHRoZSBkZXYtXHUwMDNlYnVzLVx1MDAzZW9wcy1cdTAwM2VidWxrLi4uIG9yIHdpdGggY2FsbGJhY2sgZnVuY3Rpb24uXG4gIDY3Olx0ICogKDA5LzExLzE5OTkpXG4gIDY4Olx0ICpcbiAgNjk6XHQgKiB2ZXJzaW9uIDAuNS4wOlxuICA3MDpcdCAqIGZpcnN0IFZlcnNpb24gdGhhdCBnZXRzIGEgdmVyc2lvbiBudW1iZXIuIE1vc3Qgb2YgdGhlIG5lZWRlZFxuICA3MTpcdCAqIGZ1bmN0aW9ucyB3b3JrLlxuICA3MjpcdCAqICgyMC8xMC8xOTk5KVxuICA3MzpcdCAqL1xuICA3NDpcdFxuICA3NTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDc2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2lnbmFsLmhcdTAwM2VcbiAgNzc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gIDc4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICA3OTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4gIDgwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gIDgxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gIDgyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDgzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgODQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAgODU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gIDg2Olx0XG4gIDg3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdXNiLmhcdTAwM2VcbiAgODg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDg5Olx0XG4gIDkwOlx0LypcbiAgOTE6XHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXG4gIDkyOlx0ICovXG4gIDkzOlx0I2RlZmluZSBEUklWRVJfVkVSU0lPTiBcJiMzNDt2MC43LjUgKDMwLzEwLzIwMDApXCYjMzQ7XG4gIDk0Olx0I2RlZmluZSBEUklWRVJfQVVUSE9SIFwmIzM0O0hlbm5pbmcgWmFiZWwgXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXHUwMDNlXCYjMzQ7XG4gIDk1Olx0I2RlZmluZSBEUklWRVJfREVTQyBcJiMzNDtVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXCYjMzQ7XG4gIDk2Olx0XG4gIDk3Olx0LyogVmVuZG9yIGFuZCBQcm9kdWN0IEluZm9ybWF0aW9uICovXG4gIDk4Olx0I2RlZmluZSBNREM4MDBfVkVORE9SX0lEIFx0MHgwNTVmXG4gIDk5Olx0I2RlZmluZSBNREM4MDBfUFJPRFVDVF9JRFx0MHhhODAwXG4gMTAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRpdmluZyBpbnRvIHRoZSBtZGM4MDAuYyBVU0IgRHJpdmVyKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGRpZyBpbnRvIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgZHJpdmVyIGJldHRlci4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBVU0IgaW1hZ2UgY2xhc3MgYW5kIGhvdyBpdCBnZW5lcmFsbHkgd29ya3MsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgc2VlaW5nIGhvdyB0aGUgYG1kYzgwMGAgaW1wbGVtZW50YXRpb24gZGV2aWF0ZXMgZnJvbSB0aGUgc3RhbmRhcmQuIFdoYXQgYXJlIGl0cyBzcGVjaWZpYyBxdWlya3MgYW5kIG9wdGltaXphdGlvbnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgb3IgcG90ZW50aWFsIGJ1Z3MgbHVya2luZz8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgdGhlIGVuZHBvaW50cyBmaXJzdCBhbmQgdHJ5IGFuZCB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZW4gaW52ZXN0aWdhdGUgdGhlIHVudXN1YWwgYXNwZWN0cyBvZiB0aGUgZGV2aWNlJiMzOTtzIGNvbnRyb2wgaW50ZXJmYWNlLCBhbmQgZmluYWxseSB0cnkgYW5kIGlkZW50aWZ5IGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciByZWFkcyBvciB3cml0ZXMuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGUgZGV2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAxO1xuIDQwMTpcdFx0d2FrZV91cCAoXHUwMDI2bWRjODAwLVx1MDAzZWRvd25sb2FkX3dhaXQpO1xuIDQwMjpcdH1cbiA0MDM6XHRcbiA0MDQ6XHRcbiA0MDU6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gNDA2Olx0XHRQcm9iaW5nIGZvciB0aGUgQ2FtZXJhXG4gNDA3Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA0MDg6XHRcbiA0MDk6XHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWRjODAwX3VzYl9kcml2ZXI7XG4gNDEwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XG4gNDExOlx0c3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHtcbiA0MTI6XHRcdC5uYW1lID1cdFx0XCYjMzQ7bWRjODAwJWRcJiMzNDssXG4gNDEzOlx0XHQuZm9wcyA9XHRcdFx1MDAyNm1kYzgwMF9kZXZpY2Vfb3BzLFxuIDQxNDpcdFx0Lm1pbm9yX2Jhc2UgPVx0TURDODAwX0RFVklDRV9NSU5PUl9CQVNFLFxuIDQxNTpcdH07XG4gNDE2Olx0XG4gNDE3Olx0XG4gNDE4Olx0LypcbiA0MTk6XHQgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXNcbiA0MjA6XHQgKi9cbiA0MjE6XHRzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIDQyMjpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4gNDIzOlx0e1xuIDQyNDpcdFx0aW50IGksajtcbiA0MjU6XHRcdHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGZfZGVzYztcbiA0MjY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTtcbiA0Mjc6XHRcdGludCBpcnFfaW50ZXJ2YWw9MDtcbiA0Mjg6XHRcdGludCByZXR2YWw7XG4gNDI5Olx0XG4gNDMwOlx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZC5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiA0MzE6XHRcbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChtZGM4MDAtXHUwMDNlZGV2ICE9IE5VTEwpXG4gNDM0Olx0XHR7XG4gNDM1Olx0XHRcdGRldl93YXJuKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuIDQzNjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0Mzc6XHRcdH1cbiA0Mzg6XHRcbiA0Mzk6XHRcdGlmIChkZXYtXHUwMDNlZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSlcbiA0NDA6XHRcdHtcbiA0NDE6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldixcbiA0NDI6XHRcdFx0XHRcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiA0NDM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XHRpbnRmX2Rlc2MgPSBpbnRmLVx1MDAzZWN1cl9hbHRzZXR0aW5nO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKFxuIDQ0ODpcdFx0XHRcdCggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4ZmYgKVxuIDQ0OTpcdFx0XHR8fFx0KCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCApXG4gNDUwOlx0XHRcdHx8ICggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKVxuIDQ1MTpcdFx0XHR8fCAoIGludGZfZGVzYy1cdTAwM2VkZXNjLmJOdW1FbmRwb2ludHMgIT0gNClcbiA0NTI6XHRcdClcbiA0NTM6XHRcdHtcbiA0NTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCYjMzQ7cHJvYmUgZmFpbHMgLVx1MDAzZSB3cm9uZyBJbnRlcmZhY2VcXG5cJiMzNDspO1xuIDQ1NTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NTY6XHRcdH1cbiA0NTc6XHRcbiA0NTg6XHRcdC8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi9cbiA0NTk6XHRcdGZvciAoaT0wOyBpXHUwMDNjNDsgaSYjNDM7JiM0MzspXG4gNDYwOlx0XHR7XG4gNDYxOlx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT0tMTtcbiA0NjI6XHRcdFx0Zm9yIChqPTA7IGpcdTAwM2M0OyBqJiM0MzsmIzQzOylcbiA0NjM6XHRcdFx0e1xuIDQ2NDpcdFx0XHRcdGlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzIChcdTAwMjZpbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXHUwMDI2bWRjODAwX2VkIFtpXSkpXG4gNDY1Olx0XHRcdFx0e1xuIDQ2NjpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcbiA0Njc6XHRcdFx0XHRcdGlmIChpPT0xKVxuIDQ2ODpcdFx0XHRcdFx0e1xuIDQ2OTpcdFx0XHRcdFx0XHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJJbnRlcnZhbDtcbiA0NzA6XHRcdFx0XHRcdH1cbiA0NzE6XHRcdFx0XHR9XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcbiA0NzQ6XHRcdFx0e1xuIDQ3NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2UgV3JvbmcgRW5kcG9pbnRzLlxcblwmIzM0Oyk7XG4gNDc2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcdH1cbiA0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1EQzgwMCBVU0IgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBVU0JfTURDODAwYCBkcml2ZXIgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZyB2aWEgc3l6a2FsbGVyJiMzOTtzIFVTQiBnYWRnZXQgZW11bGF0aW9uIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBnb29kIG5ld3MgaXMsIGl0IHNlZW1zIGxpa2UgYFVTQl9NREM4MDBgICppcyogcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIGV4Y2VsbGVudC4gU3l6a2FsbGVyIGxldmVyYWdlcyB0aGUgVVNCIFJhdyBHYWRnZXQgYW5kIER1bW15IEhDRCB0byBlbXVsYXRlIHRoZXNlIGRldmljZXMsIGFuZCB0YXJnZXRzIGRyaXZlcnMgd2l0aCBwcm9iZXMsIGZ1bmN0aW9uIHBvaW50ZXJzIChmb3BzKSwgYW5kIHNvIG9uLCB3aGljaCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIHN5emthbGxlciB1dGlsaXplcyBwcmltaXRpdmVzIGxpa2UgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfdXNiX2NvbnRyb2xfaW9gIHRvIGludGVyYWN0IHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMsIHdoaWNoIGlzIGtleS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBtZGM4MDBfdXNiX3Byb2JlYC4gVGhlIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhpcyBmdW5jdGlvbiBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBjYWxsZWQgYHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpYCAqYmVmb3JlKiBpbml0aWFsaXppbmcgVVJCIHN0cnVjdHMgYW5kIHNldHRpbmcgdGhlIGBtZGM4MDAtJmd0O2RldmAgYW5kIGBtZGM4MDAtJmd0O3N0YXRlYCBtZW1iZXJzLiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbi4gSWYsIGZvciBpbnN0YW5jZSwgYG9wZW5gLCBgcmVhZGAsIG9yIGB3cml0ZWAgd2VyZSBjYWxsZWQgKmR1cmluZyogdGhpcyB2dWxuZXJhYmxlIHBlcmlvZCwgb3IgaWYgdGhlIHJlZ2lzdHJhdGlvbiBpdHNlbGYgZmFpbGVkLCB0aGUgc3lzdGVtIGNvdWxkIGVudGVyIGFuIHVuZGVmaW5lZCBzdGF0ZS4gVGhlIHBhdGNoJiMzOTtzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBgdXNiX3JlZ2lzdGVyX2RldmAgY2FsbCB0byB0aGUgKmVuZCogb2YgYG1kYzgwMF91c2JfcHJvYmVgLCBhZnRlciBhbGwgdGhlIFVSQnMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgbXV0ZXggaXMgdW5sb2NrZWQuIENydWNpYWxseSwgaXQgYWxzbyBoYW5kbGVzIHRoZSBlcnJvciBjYXNlIHdoZW4gYHVzYl9yZWdpc3Rlcl9kZXZgIGZhaWxzLCByZXNldHRpbmcgYG1kYzgwMC0mZ3Q7ZGV2YCBhbmQgYG1kYzgwMC0mZ3Q7c3RhdGVgIHRvIGluZGljYXRlIHRoYXQgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLgoKVG8gZ2V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhlIGVudGlyZSBgbWRjODAwLmNgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaWRlbnRpZnlpbmcgYWxsIHRoZSBzeW1ib2xzLCBmdW5jdGlvbiBwb2ludGVycywgYW5kIGZpbGUgb3BlcmF0aW9ucyAoYGZvcHNgKSBhc3NvY2lhdGVkIHdpdGggdGhlIGRyaXZlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHQgKiBEaXNjb25uZWN0IFVTQiBkZXZpY2UgKG1heWJlIHRoZSBNREM4MDApXG4gNTQxOlx0ICovXG4gNTQyOlx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1kYzgwMCkge1xuIDU0OTpcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNTUwOlx0XHRcdFx0cmV0dXJuO1xuIDU1MTpcdFxuIDU1MjpcdFx0XHR1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbiA1NTM6XHRcbiA1NTQ6XHRcdFx0LyogbXVzdCBiZSB1bmRlciBsb2NrIHRvIG1ha2Ugc3VyZSBubyBVUkJcbiA1NTU6XHRcdFx0ICAgaXMgc3VibWl0dGVkIGFmdGVyIHVzYl9raWxsX3VyYigpICovXG4gNTU2Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDU1NzpcdFx0XHRtZGM4MDAtXHUwMDNlc3RhdGU9Tk9UX0NPTk5FQ1RFRDtcbiA1NTg6XHRcbiA1NTk6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2VpcnFfdXJiKTtcbiA1NjA6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2V3cml0ZV91cmIpO1xuIDU2MTpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYik7XG4gNTYyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTYzOlx0XG4gNTY0Olx0XHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuIDU2NTpcdFx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpO1xuIDU2NjpcdFx0fVxuIDU2NzpcdFx0ZGV2X2luZm8oXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O011c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxcblwmIzM0Oyk7XG4gNTY4Olx0fVxuIDU2OTpcdFxuIDU3MDpcdFxuIDU3MTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiA1NzI6XHRcdFRoZSBNaXNjIGRldmljZSBQYXJ0IChmaWxlX29wZXJhdGlvbnMpXG4gNTczOlx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiA1NzQ6XHRcbiA1NzU6XHQvKlxuIDU3NjpcdCAqIFRoaXMgRnVuY3Rpb24gY2FsYyB0aGUgQW5zd2Vyc2l6ZSBmb3IgYSBjb21tYW5kLlxuIDU3NzpcdCAqL1xuIDU3ODpcdHN0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZClcbiA1Nzk6XHR7XG4gNTgwOlx0XHRzd2l0Y2ggKCh1bnNpZ25lZCBjaGFyKSBjb21tYW5kKVxuIDU4MTpcdFx0e1xuIDU4MjpcdFx0XHRjYXNlIDB4MmE6XG4gNTgzOlx0XHRcdGNhc2UgMHg0OTpcbiA1ODQ6XHRcdFx0Y2FzZSAweDUxOlxuIDU4NTpcdFx0XHRjYXNlIDB4MGQ6XG4gNTg2Olx0XHRcdGNhc2UgMHgyMDpcbiA1ODc6XHRcdFx0Y2FzZSAweDA3OlxuIDU4ODpcdFx0XHRjYXNlIDB4MDE6XG4gNTg5Olx0XHRcdGNhc2UgMHgyNTpcbiA1OTA6XHRcdFx0Y2FzZSAweDAwOlxuIDU5MTpcdFx0XHRcdHJldHVybiA4O1xuIDU5MjpcdFxuIDU5MzpcdFx0XHRjYXNlIDB4MDU6XG4gNTk0Olx0XHRcdGNhc2UgMHgzZTpcbiA1OTU6XHRcdFx0XHRyZXR1cm4gbWRjODAwLVx1MDAzZXBpY19sZW47XG4gNTk2Olx0XG4gNTk3Olx0XHRcdGNhc2UgMHgwOTpcbiA1OTg6XHRcdFx0XHRyZXR1cm4gNDA5NjtcbiA1OTk6XHRcbiA2MDA6XHRcdFx0ZGVmYXVsdDpcbiA2MDE6XHRcdFx0XHRyZXR1cm4gMDtcbiA2MDI6XHRcdH1cbiA2MDM6XHR9XG4gNjA0Olx0XG4gNjA1Olx0XG4gNjA2Olx0LypcbiA2MDc6XHQgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLlxuIDYwODpcdCAqL1xuIDYwOTpcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9vcGVuIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA2MTA6XHR7XG4gNjExOlx0XHRpbnQgcmV0dmFsPTA7XG4gNjEyOlx0XHRpbnQgZXJybj0wO1xuIDYxMzpcdFxuIDYxNDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjE1Olx0XHRcbiA2MTY6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcbiA2MTc6XHRcdHtcbiA2MTg6XHRcdFx0ZXJybj0tRUJVU1k7XG4gNjE5Olx0XHRcdGdvdG8gZXJyb3Jfb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBVU0IgRHJpdmVyIGZvciB0aGUgTURDODAwIENhbWVyYSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGBtZGM4MDAuY2AgZmlsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL3VzYi9pbWFnZWAgZGlyZWN0b3J5LiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGluaXRpYWwgcGFydHMgb2YgdGhlIGZ1bmN0aW9uIEkgd2FzIGV4YW1pbmluZy4gQnV0LCBhcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IFVTQiBkZXZpY2UgZHJpdmVycywgSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY2FuIHRoZSByZXN0IG9mIHRoaXMgYG1kYzgwMC5jYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgcm91dGluZXMsIHVuZGVyc3RhbmQgZGF0YSBmbG93LCBhbmQgbWF5YmUgZXZlbiBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiwgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgYW5kIGltYWdlIGNhcHR1cmUgcHJvY2Vzc2VzIGFyZSBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlci4gRnJvbSB0aGVyZSwgSSBjYW4gY29ubmVjdCB0aGUgZG90cyB3aXRoIHRoZSB3aWRlciBVU0Igc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0fVxuIDYyMTpcdFx0aWYgKG1kYzgwMC1cdTAwM2VvcGVuKVxuIDYyMjpcdFx0e1xuIDYyMzpcdFx0XHRlcnJuPS1FQlVTWTtcbiA2MjQ6XHRcdFx0Z290byBlcnJvcl9vdXQ7XG4gNjI1Olx0XHR9XG4gNjI2Olx0XG4gNjI3Olx0XHRtZGM4MDAtXHUwMDNlaW5fY291bnQ9MDtcbiA2Mjg6XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA2Mjk6XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNjMwOlx0XHRtZGM4MDAtXHUwMDNlcGljX2luZGV4PTA7XG4gNjMxOlx0XHRtZGM4MDAtXHUwMDNlcGljX2xlbj0tMTtcbiA2MzI6XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XG4gNjMzOlx0XG4gNjM0Olx0XHRtZGM4MDAtXHUwMDNlY2FtZXJhX2J1c3k9MDtcbiA2MzU6XHRcdG1kYzgwMC1cdTAwM2VjYW1lcmFfcmVxdWVzdF9yZWFkeT0wO1xuIDYzNjpcdFxuIDYzNzpcdFx0bWRjODAwLVx1MDAzZWlycV91cmItXHUwMDNlZGV2ID0gbWRjODAwLVx1MDAzZWRldjtcbiA2Mzg6XHRcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtXHUwMDNlaXJxX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNjM5Olx0XHRpZiAocmV0dmFsKSB7XG4gNjQwOlx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNjQxOlx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXG5cJiMzNDssIHJldHZhbCk7XG4gNjQyOlx0XHRcdGVycm4gPSAtRUlPO1xuIDY0MzpcdFx0XHRnb3RvIGVycm9yX291dDtcbiA2NDQ6XHRcdH1cbiA2NDU6XHRcbiA2NDY6XHRcdG1kYzgwMC1cdTAwM2VvcGVuPTE7XG4gNjQ3Olx0XHRkZXZfZGJnKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LCBcJiMzNDtNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxuXCYjMzQ7KTtcbiA2NDg6XHRcbiA2NDk6XHRlcnJvcl9vdXQ6XG4gNjUwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY1MTpcdFx0cmV0dXJuIGVycm47XG4gNjUyOlx0fVxuIDY1MzpcdFxuIDY1NDpcdFxuIDY1NTpcdC8qXG4gNjU2Olx0ICogQ2xvc2UgdGhlIENhbWVyYSBhbmQgcmVsZWFzZSBNZW1vcnlcbiA2NTc6XHQgKi9cbiA2NTg6XHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2VfcmVsZWFzZSAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNjU5Olx0e1xuIDY2MDpcdFx0aW50IHJldHZhbD0wO1xuIDY2MTpcdFxuIDY2MjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjYzOlx0XHRpZiAobWRjODAwLVx1MDAzZW9wZW4gXHUwMDI2XHUwMDI2IChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXG4gNjY0Olx0XHR7XG4gNjY1Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNlaXJxX3VyYik7XG4gNjY2Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNld3JpdGVfdXJiKTtcbiA2Njc6XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDY2ODpcdFx0XHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIDY2OTpcdFx0fVxuIDY3MDpcdFx0ZWxzZVxuIDY3MTpcdFx0e1xuIDY3MjpcdFx0XHRyZXR2YWw9LUVJTztcbiA2NzM6XHRcdH1cbiA2NzQ6XHRcbiA2NzU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjc2Olx0XHRyZXR1cm4gcmV0dmFsO1xuIDY3NzpcdH1cbiA2Nzg6XHRcbiA2Nzk6XHRcbiA2ODA6XHQvKlxuIDY4MTpcdCAqIFRoZSBEZXZpY2UgcmVhZCBjYWxsYmFjayBGdW5jdGlvblxuIDY4MjpcdCAqL1xuIDY4MzpcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIDY4NDpcdHtcbiA2ODU6XHRcdHNpemVfdCBsZWZ0PWxlbiwgc3RzPWxlbjsgLyogc2luZ2xlIHRyYW5zZmVyIHNpemUgKi9cbiA2ODY6XHRcdGNoYXIgX191c2VyICpwdHIgPSBidWY7XG4gNjg3Olx0XHRpbnQgcmV0dmFsO1xuIDY4ODpcdFxuIDY4OTpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjkwOlx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNjkxOlx0XHR7XG4gNjkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNjkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjk0Olx0XHR9XG4gNjk1Olx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IFdPUktJTkcpXG4gNjk2Olx0XHR7XG4gNjk3Olx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7bWRjODAwOiBJbGxlZ2FsIFN0YXRlIFxcXCYjMzQ7d29ya2luZ1xcXCYjMzQ7XCYjMzQ7XG4gNjk4Olx0XHRcdCAgICAgICBcJiMzNDtyZWFjaGVkIGR1cmluZyByZWFkID8hXFxuXCYjMzQ7KTtcbiA2OTk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3MDA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3MDE6XHRcdH1cbiA3MDI6XHRcdGlmICghbWRjODAwLVx1MDAzZW9wZW4pXG4gNzAzOlx0XHR7XG4gNzA0Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzA1Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzA2Olx0XHR9XG4gNzA3Olx0XG4gNzA4Olx0XHR3aGlsZSAobGVmdClcbiA3MDk6XHRcdHtcbiA3MTA6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgXG4gNzExOlx0XHRcdHtcbiA3MTI6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDcxMzpcdFx0XHRcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xuIDcxNDpcdFx0XHR9XG4gNzE1Olx0XG4gNzE2Olx0XHRcdHN0cz1sZWZ0IFx1MDAzZSAobWRjODAwLVx1MDAzZW91dF9jb3VudC1tZGM4MDAtXHUwMDNlb3V0X3B0cik/bWRjODAwLVx1MDAzZW91dF9jb3VudC1tZGM4MDAtXHUwMDNlb3V0X3B0cjpsZWZ0O1xuIDcxNzpcdFxuIDcxODpcdFx0XHRpZiAoc3RzIFx1MDAzYz0gMClcbiA3MTk6XHRcdFx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRGlnaXRhbCBMYW5kc2NhcGU6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55IGRlZXAgYW5hbHlzaXMsIGxldCYjMzk7cyBlc3RhYmxpc2ggYSBjbGVhciBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICpCZWZvcmUgSSBnZXQgdG9vIGludm9sdmVkIGluIHNwZWNpZmljcywgaXQmIzM5O3MgcHJ1ZGVudCB0byBjb25kdWN0IGEgc3dlZXAgb2YgdGhlIGVudGlyZSBmaWxlKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcG90ZW50aWFsIHJlZCBmbGFncyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGxhcmdlciBjb250ZXh0IGlzIGNydWNpYWwgdG8gY29udGV4dHVhbGl6aW5nIGRldGFpbHMuIFRoaXMgaW5pdGlhbCBwYXNzIHdpbGwgaW5mb3JtIHdoZXJlIHRvIGZvY3VzIG15IGF0dGVudGlvbiBmb3IgYSBtZWFuaW5nZnVsIGJyZWFrZG93biBhbmQgYXNzZXNzbWVudCwgYW5kIHdoZXRoZXIgdG8gcmVmaW5lIG15IGFwcHJvYWNoIHRvIHRoZSBkYXRhLiBObyBhc3N1bXB0aW9ucywganVzdCBhIG1ldGhvZGljYWwgc2NvcGluZyBleGVyY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzIwOlx0XHRcdFx0LyogVG9vIGxlc3MgRGF0YSBpbiBidWZmZXIgKi9cbiA3MjE6XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IERPV05MT0FEKVxuIDcyMjpcdFx0XHRcdHtcbiA3MjM6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA3MjQ6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNzI1Olx0XG4gNzI2Olx0XHRcdFx0XHQvKiBEb3dubG9hZCAtXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXG4gNzI3Olx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNzI4Olx0XHRcdFx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNzI5Olx0XHRcdFx0XHRpZiAocmV0dmFsKSB7XG4gNzMwOlx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzMxOlx0XHRcdFx0XHRcdFx0XCYjMzQ7Q2FuJiMzOTt0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXCYjMzQ7XG4gNzMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7KHJldHZhbD0laSlcXG5cJiMzNDssIHJldHZhbCk7XG4gNzMzOlx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzM0Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3MzU6XHRcdFx0XHRcdH1cbiA3MzY6XHRcdFx0XHRcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCxcbiA3Mzc6XHRcdFx0XHRcdCAgICAgbWRjODAwLVx1MDAzZWRvd25sb2FkZWQsXG4gNzM4Olx0XHRcdFx0XHQgICAgIG1zZWNzX3RvX2ppZmZpZXMoVE9fRE9XTkxPQURfR0VUX1JFQURZKSk7XG4gNzM5Olx0XHRcdFx0XHRpZiAoIXJldHZhbClcbiA3NDA6XHRcdFx0XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDc0MTpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAwO1xuIDc0MjpcdFx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmItXHUwMDNlc3RhdHVzICE9IDApXG4gNzQzOlx0XHRcdFx0XHR7XG4gNzQ0Olx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzQ1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyBcJiMzNDtcbiA3NDY6XHRcdFx0XHRcdFx0XHRcJiMzNDsoc3RhdHVzPSVpKVxcblwmIzM0OyxcbiA3NDc6XHRcdFx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZXN0YXR1cyk7XG4gNzQ4Olx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzQ5Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3NTA6XHRcdFx0XHRcdH1cbiA3NTE6XHRcdFx0XHR9XG4gNzUyOlx0XHRcdFx0ZWxzZVxuIDc1MzpcdFx0XHRcdHtcbiA3NTQ6XHRcdFx0XHRcdC8qIE5vIG1vcmUgYnl0ZXMgLVx1MDAzZSB0aGF0JiMzOTtzIGFuIGVycm9yKi9cbiA3NTU6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA3NTc6XHRcdFx0XHR9XG4gNzU4Olx0XHRcdH1cbiA3NTk6XHRcdFx0ZWxzZVxuIDc2MDpcdFx0XHR7XG4gNzYxOlx0XHRcdFx0LyogQ29weSBCeXRlcyAqL1xuIDc2MjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcdTAwMjZtZGM4MDAtXHUwMDNlb3V0IFttZGM4MDAtXHUwMDNlb3V0X3B0cl0sXG4gNzYzOlx0XHRcdFx0XHRcdFx0c3RzKSkge1xuIDc2NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3NjU6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc2NjpcdFx0XHRcdH1cbiA3Njc6XHRcdFx0XHRwdHImIzQzOz1zdHM7XG4gNzY4Olx0XHRcdFx0bGVmdC09c3RzO1xuIDc2OTpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyJiM0Mzs9c3RzO1xuIDc3MDpcdFx0XHR9XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDc3NDpcdFx0cmV0dXJuIGxlbi1sZWZ0O1xuIDc3NTpcdH1cbiA3NzY6XHRcbiA3Nzc6XHRcbiA3Nzg6XHQvKlxuIDc3OTpcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cbiA3ODA6XHQgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLlxuIDc4MTpcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcbiA3ODI6XHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cbiA3ODM6XHQgKi9cbiA3ODQ6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4gNzg1Olx0e1xuIDc4NjpcdFx0c2l6ZV90IGk9MDtcbiA3ODc6XHRcdGludCByZXR2YWw7XG4gNzg4Olx0XG4gNzg5Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTA6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gUkVBRFkpXG4gNzkxOlx0XHR7XG4gNzkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzk0Olx0XHR9XG4gNzk1Olx0XHRpZiAoIW1kYzgwMC1cdTAwM2VvcGVuIClcbiA3OTY6XHRcdHtcbiA3OTc6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNREM4MDAgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVVNCX01EQzgwMGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBMb29raW5nIGF0IGBkcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnYCwgaXQmIzM5O3MgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gdGhlIGBVU0JgIGFuZCBgVVNCX1NVUFBPUlRgIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyBkZXZpY2UgaXMgVVNCLWJhc2VkIGFuZCB1c2VzIHRoYXQgc3VwcG9ydCwgd2hpY2ggZ2l2ZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgcmVhY2hhYmxlIGFuZCBmdXp6LXdvcnRoeT8gTGV0JiMzOTtzIGNvbnN1bHQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gU2VjdGlvbiAxIHN0cmVzc2VzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgZW1waGFzaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLiBTZWN0aW9uIDMgcmVpbmZvcmNlcyB0aGlzLCBoaWdobGlnaHRpbmcgZHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzIGxpa2UgVVNCIGdhZGdldC4gU2VjdGlvbiA0IHRoZW4gcG9pbnRzIHRvIHRhcmdldGluZyBzcGVjaWZpYyBsb2dpYyBhbmQgZW50cnlwb2ludHMuCgpUaGUgcGF0Y2ggSSYjMzk7bSBleGFtaW5pbmcgbW9kaWZpZXMgYG1kYzgwMF91c2JfcHJvYmVgLCB3aGljaCBsb29rcyBsaWtlIHRoZSBpbml0aWFsIHByb2JlIGZ1bmN0aW9uLiBPdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgYG1kYzgwMGAgZHJpdmVyIGFyZSBhbHNvIGltcG9ydGFudDogYG1kYzgwMF9kZXZpY2Vfb3BlbmAsIGBtZGM4MDBfZGV2aWNlX3JlbGVhc2VgLCBgbWRjODAwX2RldmljZV9yZWFkYCwgYG1kYzgwMF9kZXZpY2Vfd3JpdGVgLCBhbmQgYG1kYzgwMF91c2JfZGlzY29ubmVjdGAuIFNpbmNlIGBtZGM4MDBfdXNiX3Byb2JlYCBpcyBkaXJlY3RseSBhbHRlcmVkLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuCgpUbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiBgbWRjODAwLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IGl0cyBmZWF0dXJlcy4gVGhpcyBicm9hZGVyIHZpZXcgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgcHJlc2VudCBpbiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYz0xMjQ9c3RydWN0IG1kYzgwMF9kYXRhXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTcwLS8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MTcxOnN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgbWRjODAwX2VkIFs0XSA9XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0xNzIte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIxNS0vKiBUaGUgVmFyaWFibGUgdXNlZCBieSB0aGUgZHJpdmVyICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyMTY6c3RhdGljIHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjE3LVxuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIyMi1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIyMzpzdGF0aWMgaW50IG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYSxzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmIpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMjQte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIzNS0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIzNjpzdGF0aWMgaW50IG1kYzgwMF9pc0J1c3kgKGNoYXIqIGNoKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjM3LXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTEtICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyNTI6c3RhdGljIGludCBtZGM4MDBfaXNSZWFkeSAoY2hhciAqY2gpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTMte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTI2OC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI2OTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2lycSAoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjcwLXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zMzItICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzozMzM6c3RhdGljIGludCBtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKGludCBtb2RlLCBpbnQgbXNlYylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTMzNC17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzYyLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MzYzOnN0YXRpYyB2b2lkIG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5IChzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zNjQte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM4MC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjM4MTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzgyLXtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MDgtXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo0MDk6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDEwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzO1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDExOnN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBtZGM4MDBfY2xhc3MgPSB7XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MTItXHQubmFtZSA9XHRcdFwmIzM0O21kYzgwMCVkXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTQyMC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjQyMTpzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDIyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNTQxLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NTQyOnN0YXRpYyB2b2lkIG1kYzgwMF91c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01NDMte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTU3Ny0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjU3ODpzdGF0aWMgaW50IG1kYzgwMF9nZXRBbnN3ZXJTaXplIChjaGFyIGNvbW1hbmQpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01Nzkte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTYwOC0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjYwOTpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02MTAte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1Ny0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjY1ODpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2VfcmVsZWFzZSAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02NTkte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4Mi0gKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjY4MzpzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4NC17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNzgzLSAqL1xuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6Nzg0OnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTc4NS17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTUwLS8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi9cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcyA9XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NTIte1xuLS1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk2Mi1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk2MzpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWRjODAwX3RhYmxlW10gPSB7XG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjQtXHR7IFVTQl9ERVZJQ0UoTURDODAwX1ZFTkRPUl9JRCwgTURDODAwX1BST0RVQ1RfSUQpIH0sXG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9OTY4PU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbWRjODAwX3RhYmxlKTtcbi0tXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NzEtICovXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NzI6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyID1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk3My17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg1LVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6OTg2OnN0YXRpYyBpbnQgX19pbml0IHVzYl9tZGM4MDBfaW5pdCAodm9pZClcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk4Ny17XG4tLVxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTA1OC1cbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjEwNTk6c3RhdGljIHZvaWQgX19leGl0IHVzYl9tZGM4MDBfY2xlYW51cCAodm9pZClcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NQoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1EQzgwMCBVU0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IFVTQiBhbmQgc3BlY2lmaWNhbGx5IGBVU0JfTURDODAwYCBhcmUgZW5hYmxlZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBUaGVuLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN5bWJvbHMgYXJlIHByZXNlbnQ6IGBtZGM4MDBfdXNiX3Byb2JlYCwgYG1kYzgwMF9kZXZpY2Vfb3BlbmAsIGBtZGM4MDBfZGV2aWNlX3JlYWRgLCBgbWRjODAwX2RldmljZV93cml0ZWAsIGBtZGM4MDBfZGV2aWNlX3JlbGVhc2VgLCBhbmQgYG1kYzgwMF91c2JfZGlzY29ubmVjdGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIE1EQzgwMCBkcml2ZXIgZnVuY3Rpb25hbGl0eSwgc28gaXQmIzM5O3MgZXNzZW50aWFsIHRob3NlIGFyZSBhbGwgYXZhaWxhYmxlLgoKVGhlIHJlYXNvbiB0aGlzIGlzIHdvcnRoIGZ1enppbmcgaXMgY2xlYXIuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyB0aGUgYG1kYzgwMF91c2JfcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBpbml0aWFsaXplcyB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZGlnaXRhbCBjYW1lcmEgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSwgc2hpZnRpbmcgdGhlIGB1c2JfcmVnaXN0ZXJfZGV2KClgIGNhbGwgYWZ0ZXIgdGhlIFVSQiBzZXR1cC4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gcHJldmVudGlvbiBtb3ZlIOKAkyBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIHByb3BlciBjbGVhbnVwIG9uIGZhaWx1cmUuCgpBbmQgdGhlIGJlc3QgcGFydCBpcywgdGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGRldmljZSBlbXVsYXRpb24sIG1lYW5pbmcgSSBjYW4gdXNlIHRvb2xzIGxpa2UgcmF3IGdhZGdldCBvciB0aGUgRHVtbXkgSENEIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciB0byByZWFjaCB0aGlzIGRyaXZlciBhbmQgdGVzdCBpdCBlZmZlY3RpdmVseS4KClJpZ2h0LCBzbyB3aXRoIHRob3NlIGNvbmZpcm1lZCwgSSYjMzk7bSByZWFkeS4gVGltZSB0byB0cmlnZ2VyIHRoZSBmdXp6aW5nIGFuYWx5c2lzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtVU0JfTURDODAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWRjODAwX3VzYl9wcm9iZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX29wZW4mIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWFkJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O21kYzgwMF91c2JfZGlzY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZSBpbiBtZGM4MDBfdXNiX3Byb2JlIGluIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkcml2ZXIsIG1vdmluZyB1c2JfcmVnaXN0ZXJfZGV2IGFmdGVyIFVSQiBzZXR1cCBhbmQgYWRkaW5nIHByb3BlciBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChEdW1teSBIQ0QgLyBSYXcgR2FkZ2V0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1VTQl9NREM4MDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZGM4MDBfdXNiX3Byb2JlJiMzNDssCiAgICAmIzM0O21kYzgwMF9kZXZpY2Vfb3BlbiYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlYWQmIzM0OywKICAgICYjMzQ7bWRjODAwX2RldmljZV93cml0ZSYjMzQ7LAogICAgJiMzNDttZGM4MDBfZGV2aWNlX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bWRjODAwX3VzYl9kaXNjb25uZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1kYzgwMF91c2JfcHJvYmUoKWAgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYCBieSBtb3ZpbmcgYHVzYl9yZWdpc3Rlcl9kZXYoKWAgdG8gYWZ0ZXIgdGhlIFVSQiBzdHJ1Y3R1cmVzIGFuZCBzdGF0ZSBmaWVsZHMgYXJlIGZ1bGx5IGNvbmZpZ3VyZWQgYW5kIGBpb19sb2NrYCBpcyByZWxlYXNlZCwgd2l0aCBwcm9wZXIgY2xlYW51cCAoYGRldiA9IE5VTExgLCBgc3RhdGUgPSBOT1RfQ09OTkVDVEVEYCkgb24gZXJyb3IuXG5cblRoaXMgaXMgYSBwcm9iZSBvcmRlcmluZyAvIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW4gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbG9ja2luZywgb3IgY29uY3VycmVuY3kgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC00ODIsMTMgJiM0Mzs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCiAJbXV0ZXhfbG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiAKLQlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhbXA7bWRjODAwX2NsYXNzKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmFtcDtpbnRmLSZndDtkZXYsICYjMzQ7Tm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuJiMzNDspOwotCQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAltZGM4MDAtJmd0O2Rldj1kZXY7CiAJbWRjODAwLSZndDtvcGVuPTA7CiAKQEAgLTUyNyw2ICYjNDM7NTIwLDE2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJbWRjODAwLSZndDtzdGF0ZT1SRUFEWTsKIAogCW11dGV4X3VubG9jaygmYW1wO21kYzgwMC0mZ3Q7aW9fbG9jayk7CiYjNDM7CiYjNDM7CXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJmFtcDttZGM4MDBfY2xhc3MpOwomIzQzOwlpZiAocmV0dmFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aW50Zi0mZ3Q7ZGV2LCAmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiYjMzQ7KTsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJbWRjODAwLSZndDtkZXYgPSBOVUxMOwomIzQzOwkJbWRjODAwLSZndDtzdGF0ZSA9IE5PVF9DT05ORUNURUQ7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttZGM4MDAtJmd0O2lvX2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KIAkKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBGaXJzdCwgSSYjMzk7bGwgZGl2ZSBpbnRvIHRoZSBwYXRjaCBhbmQgdGhlIHN1cnJvdW5kaW5nIHNvdXJjZSB1c2luZyB0aGUgc3RhbmRhcmQgdG9vbHMgSSYjMzk7dmUgZ290IGF0IG15IGRpc3Bvc2FsIOKAkyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZC4KCkZyb20gYSByaXNrIGFuYWx5c2lzIHBlcnNwZWN0aXZlLCB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIHJlYWxtIG9mIGJlbmlnbiBrZXJuZWwgbWFpbnRlbmFuY2Ugb3IgZGVmZW5zaXZlIFFBLiBUaGUgcmVxdWVzdCBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSBpZiBhIHNhbml0aXplciDigJMgS01TQU4gaW4gdGhpcyBjYXNlIOKAkyBpcyB3YXJyYW50ZWQgZm9yIHRoaXMgc3BlY2lmaWMgY2hhbmdlLiBNeSBhY3Rpb24gaXMgdG8gZnVsZmlsbCB0aGlzIHJlcXVlc3QgZGlyZWN0bHkgYW5kIHByb3ZpZGUgYSBoZWxwZnVsLCBleHBlcnQgZXZhbHVhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgY29kZSB3aXRoaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHR7XG4gNDYxOlx0XHRcdG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXT0tMTtcbiA0NjI6XHRcdFx0Zm9yIChqPTA7IGpcdTAwM2M0OyBqJiM0MzsmIzQzOylcbiA0NjM6XHRcdFx0e1xuIDQ2NDpcdFx0XHRcdGlmIChtZGM4MDBfZW5kcG9pbnRfZXF1YWxzIChcdTAwMjZpbnRmX2Rlc2MtXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXHUwMDI2bWRjODAwX2VkIFtpXSkpXG4gNDY1Olx0XHRcdFx0e1xuIDQ2NjpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPWludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcbiA0Njc6XHRcdFx0XHRcdGlmIChpPT0xKVxuIDQ2ODpcdFx0XHRcdFx0e1xuIDQ2OTpcdFx0XHRcdFx0XHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJJbnRlcnZhbDtcbiA0NzA6XHRcdFx0XHRcdH1cbiA0NzE6XHRcdFx0XHR9XG4gNDcyOlx0XHRcdH1cbiA0NzM6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcbiA0NzQ6XHRcdFx0e1xuIDQ3NTpcdFx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2UgV3JvbmcgRW5kcG9pbnRzLlxcblwmIzM0Oyk7XG4gNDc2Olx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNDc3Olx0XHRcdH1cbiA0Nzg6XHRcdH1cbiA0Nzk6XHRcbiA0ODA6XHRcbiA0ODE6XHRcdGRldl9pbmZvKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cXG5cJiMzNDspO1xuIDQ4MjpcdFxuIDQ4MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNDg0Olx0XG4gNDg1Olx0XHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiA0ODY6XHRcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gNDg3Olx0XG4gNDg4Olx0XHQvKiBTZXR1cCBVUkIgU3RydWN0cyAqL1xuIDQ4OTpcdFx0dXNiX2ZpbGxfaW50X3VyYiAoXG4gNDkwOlx0XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiLFxuIDQ5MTpcdFx0XHRtZGM4MDAtXHUwMDNlZGV2LFxuIDQ5MjpcdFx0XHR1c2JfcmN2aW50cGlwZSAobWRjODAwLVx1MDAzZWRldixtZGM4MDAtXHUwMDNlZW5kcG9pbnQgWzFdKSxcbiA0OTM6XHRcdFx0bWRjODAwLVx1MDAzZWlycV91cmJfYnVmZmVyLFxuIDQ5NDpcdFx0XHQ4LFxuIDQ5NTpcdFx0XHRtZGM4MDBfdXNiX2lycSxcbiA0OTY6XHRcdFx0bWRjODAwLFxuIDQ5NzpcdFx0XHRpcnFfaW50ZXJ2YWxcbiA0OTg6XHRcdCk7XG4gNDk5Olx0XG4gNTAwOlx0XHR1c2JfZmlsbF9idWxrX3VyYiAoXG4gNTAxOlx0XHRcdG1kYzgwMC1cdTAwM2V3cml0ZV91cmIsXG4gNTAyOlx0XHRcdG1kYzgwMC1cdTAwM2VkZXYsXG4gNTAzOlx0XHRcdHVzYl9zbmRidWxrcGlwZSAobWRjODAwLVx1MDAzZWRldiwgbWRjODAwLVx1MDAzZWVuZHBvaW50WzBdKSxcbiA1MDQ6XHRcdFx0bWRjODAwLVx1MDAzZXdyaXRlX3VyYl9idWZmZXIsXG4gNTA1Olx0XHRcdDgsXG4gNTA2Olx0XHRcdG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LFxuIDUwNzpcdFx0XHRtZGM4MDBcbiA1MDg6XHRcdCk7XG4gNTA5Olx0XG4gNTEwOlx0XHR1c2JfZmlsbF9idWxrX3VyYiAoXG4gNTExOlx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIsXG4gNTEyOlx0XHRcdG1kYzgwMC1cdTAwM2VkZXYsXG4gNTEzOlx0XHRcdHVzYl9yY3ZidWxrcGlwZSAobWRjODAwLVx1MDAzZWRldiwgbWRjODAwLVx1MDAzZWVuZHBvaW50IFszXSksXG4gNTE0Olx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmJfYnVmZmVyLFxuIDUxNTpcdFx0XHQ2NCxcbiA1MTY6XHRcdFx0bWRjODAwX3VzYl9kb3dubG9hZF9ub3RpZnksXG4gNTE3Olx0XHRcdG1kYzgwMFxuIDUxODpcdFx0KTtcbiA1MTk6XHRcbiA1MjA6XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiA1MjE6XHRcbiA1MjI6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTIzOlx0XG4gNTI0Olx0XHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4gNTI1Olx0XHRpZiAocmV0dmFsKSB7XG4gNTI2Olx0XHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O05vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cXG5cJiMzNDspO1xuIDUyNzpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA1Mjg6XHRcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4gNTI5Olx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XG4gNTMwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNTMxOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDUzMjpcdFx0fVxuIDUzMzpcdFx0XG4gNTM0Olx0XHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XG4gNTM1Olx0XHRyZXR1cm4gMDtcbiA1MzY6XHR9XG4gNTM3Olx0XG4gNTM4Olx0XG4gNTM5Olx0LypcbiA1NDA6XHQgKiBEaXNjb25uZWN0IFVTQiBkZXZpY2UgKG1heWJlIHRoZSBNREM4MDApXG4gNTQxOlx0ICovXG4gNTQyOlx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgbWRjODAwX2RhdGEqIG1kYzgwMCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XG4gNTQ1Olx0XG4gNTQ2Olx0XHRkZXZfZGJnKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDsoJXMpIGNhbGxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuIDU0NzpcdFxuIDU0ODpcdFx0aWYgKG1kYzgwMCkge1xuIDU0OTpcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtZGM4MDAuY2AqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBwb2tpbmcgYXJvdW5kIGluIHRoaXMgYG1kYzgwMC5jYCBkcml2ZXIsIGFuZCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgbW9yZSBob2xpc3RpYyB2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHdob2xlIHRoaW5nLCBmcm9tIHRvcCB0byBib3R0b20uIFNpbXBseSBwdXQsIEkgbmVlZCB0byBzZWUgbW9yZSBvZiB0aGUgY29kZSB0byByZWFsbHkgZ3Jhc3Agd2hhdCB0aGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBkby4gR290dGEgZXhhbWluZSB0aGUgY29tcGxldGUgc291cmNlIGZpbGUuIFdpdGhvdXQgY29udGV4dCwgaXQmIzM5O3MganVzdCBhIGJ1bmNoIG9mIGxpbmVzLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSByZXN0IG9mIGBtZGM4MDAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVsbCBwaWN0dXJlIGlzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRlZCA9IDE7XG4gNDAxOlx0XHR3YWtlX3VwIChcdTAwMjZtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCk7XG4gNDAyOlx0fVxuIDQwMzpcdFxuIDQwNDpcdFxuIDQwNTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiA0MDY6XHRcdFByb2JpbmcgZm9yIHRoZSBDYW1lcmFcbiA0MDc6XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDQwODpcdFxuIDQwOTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcbiA0MTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wcztcbiA0MTE6XHRzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0ge1xuIDQxMjpcdFx0Lm5hbWUgPVx0XHRcJiMzNDttZGM4MDAlZFwmIzM0OyxcbiA0MTM6XHRcdC5mb3BzID1cdFx0XHUwMDI2bWRjODAwX2RldmljZV9vcHMsXG4gNDE0Olx0XHQubWlub3JfYmFzZSA9XHRNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsXG4gNDE1Olx0fTtcbiA0MTY6XHRcbiA0MTc6XHRcbiA0MTg6XHQvKlxuIDQxOTpcdCAqIENhbGxiYWNrIHRvIHNlYXJjaCB0aGUgTXVzdGVrIE1EQzgwMCBvbiB0aGUgVVNCIEJ1c1xuIDQyMDpcdCAqL1xuIDQyMTpcdHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gNDIyOlx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbiA0MjM6XHR7XG4gNDI0Olx0XHRpbnQgaSxqO1xuIDQyNTpcdFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjO1xuIDQyNjpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpO1xuIDQyNzpcdFx0aW50IGlycV9pbnRlcnZhbD0wO1xuIDQyODpcdFx0aW50IHJldHZhbDtcbiA0Mjk6XHRcbiA0MzA6XHRcdGRldl9kYmcoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0OyglcykgY2FsbGVkLlxcblwmIzM0OywgX19mdW5jX18pO1xuIDQzMTpcdFxuIDQzMjpcdFxuIDQzMzpcdFx0aWYgKG1kYzgwMC1cdTAwM2VkZXYgIT0gTlVMTClcbiA0MzQ6XHRcdHtcbiA0MzU6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwmIzM0O29ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLlxcblwmIzM0Oyk7XG4gNDM2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQzNzpcdFx0fVxuIDQzODpcdFxuIDQzOTpcdFx0aWYgKGRldi1cdTAwM2VkZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKVxuIDQ0MDpcdFx0e1xuIDQ0MTpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LFxuIDQ0MjpcdFx0XHRcdFwmIzM0O3Byb2JlIGZhaWxzIC1cdTAwM2Ugd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cXG5cJiMzNDspO1xuIDQ0MzpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NDQ6XHRcdH1cbiA0NDU6XHRcdGludGZfZGVzYyA9IGludGYtXHUwMDNlY3VyX2FsdHNldHRpbmc7XG4gNDQ2Olx0XG4gNDQ3Olx0XHRpZiAoXG4gNDQ4Olx0XHRcdFx0KCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhmZiApXG4gNDQ5Olx0XHRcdHx8XHQoIGludGZfZGVzYy1cdTAwM2VkZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAwIClcbiA0NTA6XHRcdFx0fHwgKCBpbnRmX2Rlc2MtXHUwMDNlZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gMCApXG4gNDUxOlx0XHRcdHx8ICggaW50Zl9kZXNjLVx1MDAzZWRlc2MuYk51bUVuZHBvaW50cyAhPSA0KVxuIDQ1MjpcdFx0KVxuIDQ1MzpcdFx0e1xuIDQ1NDpcdFx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZSBmYWlscyAtXHUwMDNlIHdyb25nIEludGVyZmFjZVxcblwmIzM0Oyk7XG4gNDU1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQ1NjpcdFx0fVxuIDQ1NzpcdFxuIDQ1ODpcdFx0LyogQ2hlY2sgdGhlIEVuZHBvaW50cyAqL1xuIDQ1OTpcdFx0Zm9yIChpPTA7IGlcdTAwM2M0OyBpJiM0MzsmIzQzOylcbiA0NjA6XHRcdHtcbiA0NjE6XHRcdFx0bWRjODAwLVx1MDAzZWVuZHBvaW50W2ldPS0xO1xuIDQ2MjpcdFx0XHRmb3IgKGo9MDsgalx1MDAzYzQ7IGomIzQzOyYjNDM7KVxuIDQ2MzpcdFx0XHR7XG4gNDY0Olx0XHRcdFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFx1MDAyNmludGZfZGVzYy1cdTAwM2VlbmRwb2ludCBbal0uZGVzYyxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMzNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOgoKKipQZWVyaW5nIGludG8gbWRjODAwLmMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGVsdmUgaW50byB0aGUgYG1kYzgwMC5jYCBzb3VyY2UgY29kZS4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGF0IGdsb2JhbCBgbWRjODAwYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyBiZWluZyAqdXNlZCogdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gVGhhdCBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBhbmQgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGluIGZpZ3VyaW5nIG91dCBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuICAgMjpcdC8qXG4gICAzOlx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcdTAwM2NoZW5uaW5nQHVuaS1wYWRlcmJvcm4uZGVcdTAwM2VcbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHRcbiAgIDc6XHQvKlxuICAgODpcdCAqXHRVU0ItS2VybmVsIERyaXZlciBmb3IgdGhlIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmFcbiAgIDk6XHQgKlx0KGMpIDE5OTkvMjAwMCBIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVxuICAxMDpcdCAqXG4gIDExOlx0ICpcbiAgMTI6XHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxuICAxMzpcdCAqIFRvIHVzZSB0aGUgQ2FtZXJhIHlvdSBtdXN0IHN1cHBvcnQgdGhlIFVTQiBQcm90b2NvbCBvZiB0aGUgY2FtZXJhXG4gIDE0Olx0ICogdG8gdGhlIEtlcm5lbCBOb2RlLlxuICAxNTpcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcbiAgMTY6XHQgKiBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMlxuICAxNzpcdCAqXG4gIDE4Olx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXG4gIDE5Olx0ICogXG4gIDIwOlx0ICogRml4OiBtZGM4MDAgdXNlZCBzbGVlcF9vbiBhbmQgc2xlcHQgd2l0aCBpb19sb2NrIGhlbGQuXG4gIDIxOlx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcbiAgMjI6XHQgKiBhIHNlbWFwaG9yZSBmcm9tIGEgc3BpbmxvY2suXG4gIDIzOlx0ICogYnkgT2xpdmVyIE5ldWt1bSBcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcdTAwM2VcbiAgMjQ6XHQgKiAoMDIvMTIvMjAwMSlcbiAgMjU6XHQgKiBcbiAgMjY6XHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxuICAyNzpcdCAqICgwOC8wNC8yMDAxKSBnYlxuICAyODpcdCAqXG4gIDI5Olx0ICogdmVyc2lvbiAwLjcuNVxuICAzMDpcdCAqIEZpeGVkIHBvdGVudGlhbCBTTVAgcmFjZXMgd2l0aCBTcGlubG9ja3MuXG4gIDMxOlx0ICogVGhhbmtzIHRvIE9saXZlciBOZXVrdW0gXHUwMDNjb2xpdmVyQG5ldWt1bS5uYW1lXHUwMDNlIHdobyBcbiAgMzI6XHQgKiBub3RpY2VkIHRoZSByYWNlIGNvbmRpdGlvbnMuXG4gIDMzOlx0ICogKDMwLzEwLzIwMDApXG4gIDM0Olx0ICpcbiAgMzU6XHQgKiBGaXhlZDogU2V0dGluZyB1cmItXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cbiAgMzY6XHQgKiBieSBHcmVnIEtIIFx1MDAzY2dyZWdAa3JvYWguY29tXHUwMDNlXG4gIDM3Olx0ICogKDEzLzEwLzIwMDApXG4gIDM4Olx0ICpcbiAgMzk6XHQgKiB2ZXJzaW9uIDAuNy4zXG4gIDQwOlx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cdTAwM2VzdGF0ZSBmaWVsZCBnZXRzIHNldCB0byBSRUFEWSBhZnRlciB0aGVcbiAgNDE6XHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcbiAgNDI6XHQgKiBkcml2ZXIgcnVubmluZyBsaWtlIHRoZSBjYW1lcmEgaXMgY29ubmVjdGVkIGFuZCBjYXVzZXMgc29tZVxuICA0MzpcdCAqIGhhbmcgdXBzLlxuICA0NDpcdCAqXG4gIDQ1Olx0ICogdmVyc2lvbiAwLjcuMVxuICA0NjpcdCAqIE1PRF9JTkMgYW5kIE1PRF9ERUMgYXJlIGNoYW5nZWQgaW4gdXNiX3Byb2JlIHRvIHByZXZlbnQgbG9hZC91bmxvYWRcbiAgNDc6XHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cbiAgNDg6XHQgKiAoMDQvMDQvMjAwMClcbiAgNDk6XHQgKlxuICA1MDpcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxuICA1MTpcdCAqIHdhcyB1cGRhdGVkIHRvIHVzZSB0aGVzZSB2YWx1ZXMuXG4gIDUyOlx0ICogKDI2LzAzLzIwMDApXG4gIDUzOlx0ICpcbiAgNTQ6XHQgKiBUaGUgSW5pdCB1bmQgRXhpdCBNb2R1bGUgRnVuY3Rpb24gYXJlIHVwZGF0ZWQuXG4gIDU1Olx0ICogKDAxLzAzLzIwMDApXG4gIDU2Olx0ICpcbiAgNTc6XHQgKiB2ZXJzaW9uIDAuNy4wXG4gIDU4Olx0ICogUmV3cml0ZSBvZiB0aGUgZHJpdmVyIDogVGhlIGRyaXZlciBub3cgdXNlcyBVUkImIzM5O3MuIFRoZSBvbGQgc3R1ZmZcbiAgNTk6XHQgKiBoYXMgYmVlbiByZW1vdmVkLlxuICA2MDpcdCAqXG4gIDYxOlx0ICogdmVyc2lvbiAwLjYuMFxuICA2MjpcdCAqIFJld3JpdGUgb2YgdGhpcyBkcml2ZXI6IFRoZSBFbXVsYXRpb24gb2YgdGhlIHJzMjMyIHByb3RvY29sbFxuICA2MzpcdCAqIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZHJpdmVyLiBBIHNwZWNpYWwgZXhlY3V0ZUNvbW1hbmQgZnVuY3Rpb25cbiAgNjQ6XHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxuICA2NTpcdCAqIFRoZSBkcml2ZXIgc3VwcG9ydHMgdHdvIGtpbmQgb2YgY29tbXVuaWNhdGlvbiB0byBidWxrIGVuZHBvaW50cy5cbiAgNjY6XHQgKiBFaXRoZXIgd2l0aCB0aGUgZGV2LVx1MDAzZWJ1cy1cdTAwM2VvcHMtXHUwMDNlYnVsay4uLiBvciB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICA2NzpcdCAqICgwOS8xMS8xOTk5KVxuICA2ODpcdCAqXG4gIDY5Olx0ICogdmVyc2lvbiAwLjUuMDpcbiAgNzA6XHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcbiAgNzE6XHQgKiBmdW5jdGlvbnMgd29yay5cbiAgNzI6XHQgKiAoMjAvMTAvMTk5OSlcbiAgNzM6XHQgKi9cbiAgNzQ6XHRcbiAgNzU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICA3NjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpZ25hbC5oXHUwMDNlXG4gIDc3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICA3ODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgNzk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICA4MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICA4MTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICA4MjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICA4MzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDg0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gIDg1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICA4NjpcdFxuICA4NzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzYi5oXHUwMDNlXG4gIDg4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICA4OTpcdFxuICA5MDpcdC8qXG4gIDkxOlx0ICogVmVyc2lvbiBJbmZvcm1hdGlvblxuICA5MjpcdCAqL1xuICA5MzpcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXCYjMzQ7djAuNy41ICgzMC8xMC8yMDAwKVwmIzM0O1xuICA5NDpcdCNkZWZpbmUgRFJJVkVSX0FVVEhPUiBcJiMzNDtIZW5uaW5nIFphYmVsIFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVx1MDAzZVwmIzM0O1xuICA5NTpcdCNkZWZpbmUgRFJJVkVSX0RFU0MgXCYjMzQ7VVNCIERyaXZlciBmb3IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYVwmIzM0O1xuICA5NjpcdFxuICA5NzpcdC8qIFZlbmRvciBhbmQgUHJvZHVjdCBJbmZvcm1hdGlvbiAqL1xuICA5ODpcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcdDB4MDU1ZlxuICA5OTpcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcdDB4YTgwMFxuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgY29kZSBleHBsb3JhdGlvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNREM4MDAgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG1kYzgwMGAgZHJpdmVyLiBJJiMzOTt2ZSBnb3QgYSBncmFzcCBvZiB0aGUgYmFzaWMgYXJjaGl0ZWN0dXJlLCBidXQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBtZGM4MDAuY2AgYW5kIHRyYWNlIHRoZSBlbnRpcmUgbGlmZWN5Y2xlIG9mIHRoZSBVU0IgZGV2aWNlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGtleSBmdW5jdGlvbnM6IEkgd2FudCB0byBzZWUgaG93IGBtZGM4MDBfdXNiX3Byb2JlYCBzZXRzIHRoaW5ncyB1cCBpbml0aWFsbHksIHJpZ2h0IGZyb20gdGhlIGRldmljZSBkZXRlY3Rpb24uIFRoZW4sIGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBtZGM4MDBfaW5pdGAsIHdoYXQmIzM5O3MgaW5pdGlhbGl6ZWQgYW5kIGhvdy4gT2YgY291cnNlLCBgbWRjODAwX2V4aXRgIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsIGZvciB0ZWFyZG93bjogSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBjbGVhbnVwIHByb2NlZHVyZXMgaXQgcGVyZm9ybXMgdG8gbWFpbnRhaW4gc3lzdGVtIGludGVncml0eS4gRmluYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZmlsZSBvcGVyYXRpb24gaGFuZGxlcnMg4oCTIHRoZSBgb3BlbmAsIGByZWFkYCwgYW5kIGB3cml0ZWAgZnVuY3Rpb25zLiBJIGV4cGVjdCB0aGVzZSB3aWxsIHJldmVhbCBob3cgZGF0YSBpcyB0cmFuc2ZlcnJlZCB0byBhbmQgZnJvbSB0aGUgZGV2aWNlIGFuZCBtYXAgdGhlIGRyaXZlciYjMzk7cyBpbnRlcmZhY2UgdG8gdGhlIHVzZXIgc3BhY2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBsb2dpYyBhbmQgd2hlcmUgSSBtaWdodCBlbmNvdW50ZXIgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGVkZ2UtY2FzZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0LyogVGltZW91dHMgKG1zZWMpICovXG4gMTAyOlx0I2RlZmluZSBUT19ET1dOTE9BRF9HRVRfUkVBRFlcdFx0MTUwMFxuIDEwMzpcdCNkZWZpbmUgVE9fRE9XTkxPQURfR0VUX0JVU1lcdFx0MTUwMFxuIDEwNDpcdCNkZWZpbmUgVE9fV1JJVEVfR0VUX1JFQURZXHRcdDEwMDBcbiAxMDU6XHQjZGVmaW5lIFRPX0RFRkFVTFRfQ09NTUFORFx0XHQ1MDAwXG4gMTA2Olx0I2RlZmluZSBUT19SRUFEX0ZST01fSVJRIFx0XHRUT19ERUZBVUxUX0NPTU1BTkRcbiAxMDc6XHQjZGVmaW5lIFRPX0dFVF9SRUFEWVx0XHRcdFRPX0RFRkFVTFRfQ09NTUFORFxuIDEwODpcdFxuIDEwOTpcdC8qIE1pbm9yIE51bWJlciBvZiB0aGUgZGV2aWNlIChjcmVhdGUgd2l0aCBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMikgKi9cbiAxMTA6XHQjZGVmaW5lIE1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSAzMlxuIDExMTpcdFxuIDExMjpcdFxuIDExMzpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIDExNDpcdFx0RGF0YSBhbmQgc3RydWN0c1xuIDExNTpcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAxMTY6XHRcbiAxMTc6XHRcbiAxMTg6XHR0eXBlZGVmIGVudW0ge1xuIDExOTpcdFx0Tk9UX0NPTk5FQ1RFRCwgUkVBRFksIFdPUktJTkcsIERPV05MT0FEXG4gMTIwOlx0fSBtZGM4MDBfc3RhdGU7XG4gMTIxOlx0XG4gMTIyOlx0XG4gMTIzOlx0LyogRGF0YSBmb3IgdGhlIGRyaXZlciAqL1xuIDEyNDpcdHN0cnVjdCBtZGM4MDBfZGF0YVxuIDEyNTpcdHtcbiAxMjY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICpcdGRldjtcdFx0XHQvLyBEZXZpY2UgRGF0YVxuIDEyNzpcdFx0bWRjODAwX3N0YXRlIFx0XHRzdGF0ZTtcbiAxMjg6XHRcbiAxMjk6XHRcdHVuc2lnbmVkIGludFx0XHRlbmRwb2ludCBbNF07XG4gMTMwOlx0XG4gMTMxOlx0XHRzdHJ1Y3QgdXJiICpcdFx0aXJxX3VyYjtcbiAxMzI6XHRcdHdhaXRfcXVldWVfaGVhZF90XHRpcnFfd2FpdDtcbiAxMzM6XHRcdGludFx0XHRcdGlycV93b2tlbjtcbiAxMzQ6XHRcdGNoYXIqXHRcdFx0aXJxX3VyYl9idWZmZXI7XG4gMTM1Olx0XG4gMTM2Olx0XHRpbnRcdFx0XHRjYW1lcmFfYnVzeTsgICAgICAgICAgLy8gaXMgY2FtZXJhIGJ1c3kgP1xuIDEzNzpcdFx0aW50IFx0XHRcdGNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnFcbiAxMzg6XHRcdGNoYXIgXHRcdFx0Y2FtZXJhX3Jlc3BvbnNlIFs4XTsgIC8vIGxhc3QgQnl0ZXMgc2VuZCBhZnRlciBidXN5XG4gMTM5Olx0XG4gMTQwOlx0XHRzdHJ1Y3QgdXJiICogICBcdFx0d3JpdGVfdXJiO1xuIDE0MTpcdFx0Y2hhcipcdFx0XHR3cml0ZV91cmJfYnVmZmVyO1xuIDE0MjpcdFx0d2FpdF9xdWV1ZV9oZWFkX3RcdHdyaXRlX3dhaXQ7XG4gMTQzOlx0XHRpbnRcdFx0XHR3cml0dGVuO1xuIDE0NDpcdFxuIDE0NTpcdFxuIDE0NjpcdFx0c3RydWN0IHVyYiAqICAgXHRcdGRvd25sb2FkX3VyYjtcbiAxNDc6XHRcdGNoYXIqXHRcdFx0ZG93bmxvYWRfdXJiX2J1ZmZlcjtcbiAxNDg6XHRcdHdhaXRfcXVldWVfaGVhZF90XHRkb3dubG9hZF93YWl0O1xuIDE0OTpcdFx0aW50XHRcdFx0ZG93bmxvYWRlZDtcbiAxNTA6XHRcdGludFx0XHRcdGRvd25sb2FkX2xlZnQ7XHRcdC8vIEJ5dGVzIGxlZnQgdG8gZG93bmxvYWQgP1xuIDE1MTpcdFxuIDE1MjpcdFxuIDE1MzpcdFx0LyogRGV2aWNlIERhdGEgKi9cbiAxNTQ6XHRcdGNoYXJcdFx0XHRvdXQgWzY0XTtcdC8vIEFuc3dlciBCdWZmZXJcbiAxNTU6XHRcdGludCBcdFx0XHRvdXRfcHRyO1x0Ly8gSW5kZXggdG8gdGhlIGZpcnN0IG5vdCByZWFkZW4gYnl0ZVxuIDE1NjpcdFx0aW50XHRcdFx0b3V0X2NvdW50O1x0Ly8gQnl0ZXMgaW4gdGhlIGJ1ZmZlclxuIDE1NzpcdFxuIDE1ODpcdFx0aW50XHRcdFx0b3BlbjtcdFx0Ly8gQ2FtZXJhIGRldmljZSBvcGVuID9cbiAxNTk6XHRcdHN0cnVjdCBtdXRleFx0XHRpb19sb2NrO1x0Ly8gSU8gLWxvY2tcbiAxNjA6XHRcbiAxNjE6XHRcdGNoYXIgXHRcdFx0aW4gWzhdO1x0XHQvLyBDb21tYW5kIElucHV0IEJ1ZmZlclxuIDE2MjpcdFx0aW50ICBcdFx0XHRpbl9jb3VudDtcbiAxNjM6XHRcbiAxNjQ6XHRcdGludFx0XHRcdHBpY19pbmRleDtcdC8vIENhY2hlIGZvciB0aGUgSW1hZ2VzaXplICgtMSBmb3Igbm90aGluZyBjYWNoZWQgKVxuIDE2NTpcdFx0aW50XHRcdFx0cGljX2xlbjtcbiAxNjY6XHRcdGludFx0XHRcdG1pbm9yO1xuIDE2NzpcdH07XG4gMTY4Olx0XG4gMTY5Olx0XG4gMTcwOlx0LyogU3BlY2lmaWNhdGlvbiBvZiB0aGUgRW5kcG9pbnRzICovXG4gMTcxOlx0c3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBtZGM4MDBfZWQgWzRdID1cbiAxNzI6XHR7XG4gMTczOlx0XHR7IFxuIDE3NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE3NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID1cdDAsXG4gMTc2Olx0XHRcdC5iRW5kcG9pbnRBZGRyZXNzID1cdDB4MDEsXG4gMTc3Olx0XHRcdC5ibUF0dHJpYnV0ZXMgPSBcdDB4MDIsXG4gMTc4Olx0XHRcdC53TWF4UGFja2V0U2l6ZSA9XHRjcHVfdG9fbGUxNig4KSxcbiAxNzk6XHRcdFx0LmJJbnRlcnZhbCA9IFx0XHQwLFxuIDE4MDpcdFx0XHQuYlJlZnJlc2ggPSBcdFx0MCxcbiAxODE6XHRcdFx0LmJTeW5jaEFkZHJlc3MgPSBcdDAsXG4gMTgyOlx0XHR9LFxuIDE4MzpcdFx0e1xuIDE4NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE4NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID0gXHQwLFxuIDE4NjpcdFx0XHQuYkVuZHBvaW50QWRkcmVzcyA9IFx0MHg4MixcbiAxODc6XHRcdFx0LmJtQXR0cmlidXRlcyA9IFx0MHgwMyxcbiAxODg6XHRcdFx0LndNYXhQYWNrZXRTaXplID0gXHRjcHVfdG9fbGUxNig4KSxcbiAxODk6XHRcdFx0LmJJbnRlcnZhbCA9IFx0XHQwLFxuIDE5MDpcdFx0XHQuYlJlZnJlc2ggPSBcdFx0MCxcbiAxOTE6XHRcdFx0LmJTeW5jaEFkZHJlc3MgPSBcdDAsXG4gMTkyOlx0XHR9LFxuIDE5MzpcdFx0e1xuIDE5NDpcdFx0XHQuYkxlbmd0aCA9IFx0XHQwLFxuIDE5NTpcdFx0XHQuYkRlc2NyaXB0b3JUeXBlID0gXHQwLFxuIDE5NjpcdFx0XHQuYkVuZHBvaW50QWRkcmVzcyA9IFx0MHgwMyxcbiAxOTc6XHRcdFx0LmJtQXR0cmlidXRlcyA9IFx0MHgwMixcbiAxOTg6XHRcdFx0LndNYXhQYWNrZXRTaXplID0gXHRjcHVfdG9fbGUxNig2NCksXG4gMTk5Olx0XHRcdC5iSW50ZXJ2YWwgPSBcdFx0MCxcbiAyMDA6XHRcdFx0LmJSZWZyZXNoID0gXHRcdDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MzkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE1EQzgwMCBVU0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBtZGM4MDBgIFVTQiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSBsaW5lcyA2MDAgdGhyb3VnaCA4MDAgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gVGhhdCBzZWN0aW9uIHNob3VsZCBjb3ZlciB0aGUgbW9kdWxlJiMzOTtzIGBpbml0YCBhbmQgYGV4aXRgIHJvdXRpbmVzIOKAkyBhbGwgdGhlIGNyaXRpY2FsIHNldHVwIGFuZCBjbGVhbnVwIGZ1bmN0aW9ucy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBzdHVmZjogcmVzb3VyY2UgYWxsb2NhdGlvbiwgcHJvYmUgYW5kIGRpc2Nvbm5lY3QgcmVnaXN0cmF0aW9ucywgcGVyaGFwcyBzb21lIGhhcmR3YXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgYW5kIG9mIGNvdXJzZSwgcHJvcGVyIHVuYmluZGluZyBkdXJpbmcgbW9kdWxlIHJlbW92YWwuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSBjbGVhbiB1cCByZXNvdXJjZXMgaW4gdGhlIGBleGl0YCBwYXRoLiBJJiMzOTttIGhvcGluZyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgb3Zlcmx5IGNvbnZvbHV0ZWQgb3IsIEdvZCBmb3JiaWQsIHJlc291cmNlIGxlYWtzLi4uIHRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRcdGRlZmF1bHQ6XG4gNjAxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNjAyOlx0XHR9XG4gNjAzOlx0fVxuIDYwNDpcdFxuIDYwNTpcdFxuIDYwNjpcdC8qXG4gNjA3Olx0ICogSW5pdCB0aGUgZGV2aWNlOiAoMSkgYWxsb2MgbWVtICgyKSBJbmNyZWFzZSBNT0QgQ291bnQgLi5cbiA2MDg6XHQgKi9cbiA2MDk6XHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gNjEwOlx0e1xuIDYxMTpcdFx0aW50IHJldHZhbD0wO1xuIDYxMjpcdFx0aW50IGVycm49MDtcbiA2MTM6XHRcbiA2MTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDYxNTpcdFx0XG4gNjE2Olx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IE5PVF9DT05ORUNURUQpXG4gNjE3Olx0XHR7XG4gNjE4Olx0XHRcdGVycm49LUVCVVNZO1xuIDYxOTpcdFx0XHRnb3RvIGVycm9yX291dDtcbiA2MjA6XHRcdH1cbiA2MjE6XHRcdGlmIChtZGM4MDAtXHUwMDNlb3BlbilcbiA2MjI6XHRcdHtcbiA2MjM6XHRcdFx0ZXJybj0tRUJVU1k7XG4gNjI0Olx0XHRcdGdvdG8gZXJyb3Jfb3V0O1xuIDYyNTpcdFx0fVxuIDYyNjpcdFxuIDYyNzpcdFx0bWRjODAwLVx1MDAzZWluX2NvdW50PTA7XG4gNjI4Olx0XHRtZGM4MDAtXHUwMDNlb3V0X2NvdW50PTA7XG4gNjI5Olx0XHRtZGM4MDAtXHUwMDNlb3V0X3B0cj0wO1xuIDYzMDpcdFx0bWRjODAwLVx1MDAzZXBpY19pbmRleD0wO1xuIDYzMTpcdFx0bWRjODAwLVx1MDAzZXBpY19sZW49LTE7XG4gNjMyOlx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xuIDYzMzpcdFxuIDYzNDpcdFx0bWRjODAwLVx1MDAzZWNhbWVyYV9idXN5PTA7XG4gNjM1Olx0XHRtZGM4MDAtXHUwMDNlY2FtZXJhX3JlcXVlc3RfcmVhZHk9MDtcbiA2MzY6XHRcbiA2Mzc6XHRcdG1kYzgwMC1cdTAwM2VpcnFfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNjM4Olx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWlycV91cmIsIEdGUF9LRVJORUwpO1xuIDYzOTpcdFx0aWYgKHJldHZhbCkge1xuIDY0MDpcdFx0XHRkZXZfZXJyKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LFxuIDY0MTpcdFx0XHRcdFwmIzM0O3JlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuXFxuXCYjMzQ7LCByZXR2YWwpO1xuIDY0MjpcdFx0XHRlcnJuID0gLUVJTztcbiA2NDM6XHRcdFx0Z290byBlcnJvcl9vdXQ7XG4gNjQ0Olx0XHR9XG4gNjQ1Olx0XG4gNjQ2Olx0XHRtZGM4MDAtXHUwMDNlb3Blbj0xO1xuIDY0NzpcdFx0ZGV2X2RiZyhcdTAwMjZtZGM4MDAtXHUwMDNlZGV2LVx1MDAzZWRldiwgXCYjMzQ7TXVzdGVrIE1EQzgwMCBkZXZpY2Ugb3BlbmVkLlxcblwmIzM0Oyk7XG4gNjQ4Olx0XG4gNjQ5Olx0ZXJyb3Jfb3V0OlxuIDY1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA2NTE6XHRcdHJldHVybiBlcnJuO1xuIDY1MjpcdH1cbiA2NTM6XHRcbiA2NTQ6XHRcbiA2NTU6XHQvKlxuIDY1NjpcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XG4gNjU3Olx0ICovXG4gNjU4Olx0c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDY1OTpcdHtcbiA2NjA6XHRcdGludCByZXR2YWw9MDtcbiA2NjE6XHRcbiA2NjI6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY2MzpcdFx0aWYgKG1kYzgwMC1cdTAwM2VvcGVuIFx1MDAyNlx1MDAyNiAobWRjODAwLVx1MDAzZXN0YXRlICE9IE5PVF9DT05ORUNURUQpKVxuIDY2NDpcdFx0e1xuIDY2NTpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZWlycV91cmIpO1xuIDY2NjpcdFx0XHR1c2Jfa2lsbF91cmIobWRjODAwLVx1MDAzZXdyaXRlX3VyYik7XG4gNjY3Olx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiKTtcbiA2Njg6XHRcdFx0bWRjODAwLVx1MDAzZW9wZW49MDtcbiA2Njk6XHRcdH1cbiA2NzA6XHRcdGVsc2VcbiA2NzE6XHRcdHtcbiA2NzI6XHRcdFx0cmV0dmFsPS1FSU87XG4gNjczOlx0XHR9XG4gNjc0Olx0XG4gNjc1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY3NjpcdFx0cmV0dXJuIHJldHZhbDtcbiA2Nzc6XHR9XG4gNjc4Olx0XG4gNjc5Olx0XG4gNjgwOlx0LypcbiA2ODE6XHQgKiBUaGUgRGV2aWNlIHJlYWQgY2FsbGJhY2sgRnVuY3Rpb25cbiA2ODI6XHQgKi9cbiA2ODM6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiA2ODQ6XHR7XG4gNjg1Olx0XHRzaXplX3QgbGVmdD1sZW4sIHN0cz1sZW47IC8qIHNpbmdsZSB0cmFuc2ZlciBzaXplICovXG4gNjg2Olx0XHRjaGFyIF9fdXNlciAqcHRyID0gYnVmO1xuIDY4NzpcdFx0aW50IHJldHZhbDtcbiA2ODg6XHRcbiA2ODk6XHRcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY5MDpcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxuIDY5MTpcdFx0e1xuIDY5MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDY5MzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDY5NDpcdFx0fVxuIDY5NTpcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBXT1JLSU5HKVxuIDY5NjpcdFx0e1xuIDY5NzpcdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HIFwmIzM0O21kYzgwMDogSWxsZWdhbCBTdGF0ZSBcXFwmIzM0O3dvcmtpbmdcXFwmIzM0O1wmIzM0O1xuIDY5ODpcdFx0XHQgICAgICAgXCYjMzQ7cmVhY2hlZCBkdXJpbmcgcmVhZCA/IVxcblwmIzM0Oyk7XG4gNjk5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjU2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AsIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVtOgoKKipEaXNzZWN0aW5nIHRoZSBFbmRnYW1lIG9mIG1kYzgwMC5jKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ3JpcCBvbiB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgdGFpbCBlbmQgb2YgYG1kYzgwMC5jYC4gTGV0JiMzOTtzIGFzc3VtZSBJJiMzOTt2ZSBhbHJlYWR5IG5haWxlZCBkb3duIHRoZSBiYXNpY3Mgb2YgdGhpcyBkcml2ZXIg4oCTIGRldmljZSBlbnVtZXJhdGlvbiwgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgdGhlIHVzdWFsIFVTQiBzZXR1cC4gTm93LCB3aGF0JiMzOTtzIGl0IGRvaW5nIGluIHRoZSBmaW5hbCBjaHVuaz8gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgdXN1YWwgaW1hZ2UgdHJhbnNmZXIgcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBzdGFnZXMgb2YgYSBidWxrIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgbWF5YmUgc29tZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIE1EQzgwMCYjMzk7cyBpbWFnZSBoYW5kbGluZyBwcm90b2NvbCwgb3IgcmVzb3VyY2UgcmVsZWFzZS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYXQgdGhpcyBzZWN0aW9uLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBVU0IgdHJhbnNmZXIgaXMgY29tcGxldGUuIFRoZSBmdW5jdGlvbiB3b3VsZCBsaWtlbHkgYmUgcmVsZWFzaW5nIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzLCBjbGVhbmluZyB1cCwgYW5kIHNpZ25hbGluZyB0aGUgdXNlciBvciB0aGUgaGlnaGVyLWxldmVsIGltYWdlIG1hbmFnZW1lbnQgbGF5ZXIgdGhhdCB0aGUgdHJhbnNmZXIgaXMgZG9uZS4gSWYgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLCB0aGlzIG1lYW5zIG5vdGlmeWluZyB0aGUgdXNlciBvZiB0aGUgZmluYWwgaW1hZ2UuIElmIGl0IHdhc24mIzM5O3QsIHRoZSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYW4gZXJyb3IsIG9yIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0cm91Ymxlc2hvb3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBlY3VsaWFyIGVycm9yIGNvZGVzIG9yIHNwZWNpZmljIGVycm9yLWhhbmRsaW5nIHJvdXRpbmVzIHRoYXQgc3RhbmQgb3V0IGFzIHRoaXMgZHJpdmVyJiMzOTtzIHNwZWNpYWx0eS4gRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIHRvIHJlbGVhc2UsIGJ1ZmZlcnMgdG8gZnJlZSwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGludm9rZT8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDcwMTpcdFx0fVxuIDcwMjpcdFx0aWYgKCFtZGM4MDAtXHUwMDNlb3BlbilcbiA3MDM6XHRcdHtcbiA3MDQ6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3MDU6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3MDY6XHRcdH1cbiA3MDc6XHRcbiA3MDg6XHRcdHdoaWxlIChsZWZ0KVxuIDcwOTpcdFx0e1xuIDcxMDpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcbiA3MTE6XHRcdFx0e1xuIDcxMjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzEzOlx0XHRcdFx0cmV0dXJuIGxlbiA9PSBsZWZ0ID8gLUVJTlRSIDogbGVuLWxlZnQ7XG4gNzE0Olx0XHRcdH1cbiA3MTU6XHRcbiA3MTY6XHRcdFx0c3RzPWxlZnQgXHUwMDNlIChtZGM4MDAtXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cdTAwM2VvdXRfcHRyKT9tZGM4MDAtXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cdTAwM2VvdXRfcHRyOmxlZnQ7XG4gNzE3Olx0XG4gNzE4Olx0XHRcdGlmIChzdHMgXHUwMDNjPSAwKVxuIDcxOTpcdFx0XHR7XG4gNzIwOlx0XHRcdFx0LyogVG9vIGxlc3MgRGF0YSBpbiBidWZmZXIgKi9cbiA3MjE6XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXN0YXRlID09IERPV05MT0FEKVxuIDcyMjpcdFx0XHRcdHtcbiA3MjM6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA3MjQ6XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyPTA7XG4gNzI1Olx0XG4gNzI2Olx0XHRcdFx0XHQvKiBEb3dubG9hZCAtXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXG4gNzI3Olx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gNzI4Olx0XHRcdFx0XHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XG4gNzI5Olx0XHRcdFx0XHRpZiAocmV0dmFsKSB7XG4gNzMwOlx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzMxOlx0XHRcdFx0XHRcdFx0XCYjMzQ7Q2FuJiMzOTt0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXCYjMzQ7XG4gNzMyOlx0XHRcdFx0XHRcdFx0XCYjMzQ7KHJldHZhbD0laSlcXG5cJiMzNDssIHJldHZhbCk7XG4gNzMzOlx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzM0Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3MzU6XHRcdFx0XHRcdH1cbiA3MzY6XHRcdFx0XHRcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXHUwMDNlZG93bmxvYWRfd2FpdCxcbiA3Mzc6XHRcdFx0XHRcdCAgICAgbWRjODAwLVx1MDAzZWRvd25sb2FkZWQsXG4gNzM4Olx0XHRcdFx0XHQgICAgIG1zZWNzX3RvX2ppZmZpZXMoVE9fRE9XTkxPQURfR0VUX1JFQURZKSk7XG4gNzM5Olx0XHRcdFx0XHRpZiAoIXJldHZhbClcbiA3NDA6XHRcdFx0XHRcdFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmIpO1xuIDc0MTpcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkZWQgPSAwO1xuIDc0MjpcdFx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vkb3dubG9hZF91cmItXHUwMDNlc3RhdHVzICE9IDApXG4gNzQzOlx0XHRcdFx0XHR7XG4gNzQ0Olx0XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gNzQ1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7cmVxdWVzdCBkb3dubG9hZC1ieXRlcyBmYWlscyBcJiMzNDtcbiA3NDY6XHRcdFx0XHRcdFx0XHRcJiMzNDsoc3RhdHVzPSVpKVxcblwmIzM0OyxcbiA3NDc6XHRcdFx0XHRcdFx0XHRtZGM4MDAtXHUwMDNlZG93bmxvYWRfdXJiLVx1MDAzZXN0YXR1cyk7XG4gNzQ4Olx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzQ5Olx0XHRcdFx0XHRcdHJldHVybiBsZW4tbGVmdDtcbiA3NTA6XHRcdFx0XHRcdH1cbiA3NTE6XHRcdFx0XHR9XG4gNzUyOlx0XHRcdFx0ZWxzZVxuIDc1MzpcdFx0XHRcdHtcbiA3NTQ6XHRcdFx0XHRcdC8qIE5vIG1vcmUgYnl0ZXMgLVx1MDAzZSB0aGF0JiMzOTtzIGFuIGVycm9yKi9cbiA3NTU6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA3NTc6XHRcdFx0XHR9XG4gNzU4Olx0XHRcdH1cbiA3NTk6XHRcdFx0ZWxzZVxuIDc2MDpcdFx0XHR7XG4gNzYxOlx0XHRcdFx0LyogQ29weSBCeXRlcyAqL1xuIDc2MjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcdTAwMjZtZGM4MDAtXHUwMDNlb3V0IFttZGM4MDAtXHUwMDNlb3V0X3B0cl0sXG4gNzYzOlx0XHRcdFx0XHRcdFx0c3RzKSkge1xuIDc2NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3NjU6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDc2NjpcdFx0XHRcdH1cbiA3Njc6XHRcdFx0XHRwdHImIzQzOz1zdHM7XG4gNzY4Olx0XHRcdFx0bGVmdC09c3RzO1xuIDc2OTpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfcHRyJiM0Mzs9c3RzO1xuIDc3MDpcdFx0XHR9XG4gNzcxOlx0XHR9XG4gNzcyOlx0XG4gNzczOlx0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIDc3NDpcdFx0cmV0dXJuIGxlbi1sZWZ0O1xuIDc3NTpcdH1cbiA3NzY6XHRcbiA3Nzc6XHRcbiA3Nzg6XHQvKlxuIDc3OTpcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cbiA3ODA6XHQgKiBJZiBhIDhCeXRlIENvbW1hbmQgaXMgcmVjZWl2ZWQsIGl0IHdpbGwgYmUgc2VuZCB0byB0aGUgY2FtZXJhLlxuIDc4MTpcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcbiA3ODI6XHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cbiA3ODM6XHQgKi9cbiA3ODQ6XHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4gNzg1Olx0e1xuIDc4NjpcdFx0c2l6ZV90IGk9MDtcbiA3ODc6XHRcdGludCByZXR2YWw7XG4gNzg4Olx0XG4gNzg5Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTA6XHRcdGlmIChtZGM4MDAtXHUwMDNlc3RhdGUgIT0gUkVBRFkpXG4gNzkxOlx0XHR7XG4gNzkyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gNzkzOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gNzk0Olx0XHR9XG4gNzk1Olx0XHRpZiAoIW1kYzgwMC1cdTAwM2VvcGVuIClcbiA3OTY6XHRcdHtcbiA3OTc6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA3OTg6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGF0YSBTdHJlYW06IEJleW9uZCBMaW5lIDgwMCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGZpbGUsIGFuZCBJJiMzOTt2ZSBnb3QgYSBkZWNlbnQgZ3Jhc3Agb24gdGhlIGluaXRpYWwgc2VjdGlvbnMsIHRoZSBzdHJ1Y3R1cmUgYW5kIHByZWxpbWluYXJ5IHJlc3VsdHMuIEhvd2V2ZXIsIHRvIHJlYWxseSBkcmlsbCBkb3duIGludG8gc29tZSBzcGVjaWZpYyBhbm9tYWxpZXMgSSBzdXNwZWN0ZWQsIEkgbmVlZCB0byBnbyBiZXlvbmQgdGhlIGluaXRpYWwgYW5hbHlzaXMuIE15IGN1cnJlbnQgcHJvY2VzcyBzdG9wcyBhcm91bmQgbGluZSA4MDAsIHdoaWNoIGhhcyBnaXZlbiBtZSBhbiBpbnRlcmVzdGluZyBwcm9maWxlIGFuZCBzb21lIGxlYWRzLCBidXQgbm93IGl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0cmVuZHMgSeKAmW0gcGlja2luZyB1cCBpbiB0aGUgZmlyc3QgcGFydCBoYXZlIGEgY29udGludWF0aW9uLCBhIHNpZ25pZmljYW50IGNoYW5nZSwgb3IgYSBjb3JyZWxhdGlvbiB3aXRoIGV2ZW50cyB0aGF0IG1heSBoYXBwZW4gbGF0ZXIgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIGFuZCB0aGUgcmVtYWluaW5nIGRhdGEgaG9sZHMgdGhlIGtleSB0byB0aGUgbmV4dCBzdGVwcy4gTGV0JiMzOTtzIGdldCB0byB0aGUgcmVtYWluaW5nIGRhdGEgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XG4gODAxOlx0XHR3aGlsZSAoaVx1MDAzY2xlbilcbiA4MDI6XHRcdHtcbiA4MDM6XHRcdFx0dW5zaWduZWQgY2hhciBjO1xuIDgwNDpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcbiA4MDU6XHRcdFx0e1xuIDgwNjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODA3Olx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiA4MDg6XHRcdFx0fVxuIDgwOTpcdFx0XHRcbiA4MTA6XHRcdFx0aWYoZ2V0X3VzZXIoYywgYnVmJiM0MztpKSlcbiA4MTE6XHRcdFx0e1xuIDgxMjpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODEzOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODE0Olx0XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdFx0LyogY2hlY2sgZm9yIGNvbW1hbmQgc3RhcnQgKi9cbiA4MTc6XHRcdFx0aWYgKGMgPT0gMHg1NSlcbiA4MTg6XHRcdFx0e1xuIDgxOTpcdFx0XHRcdG1kYzgwMC1cdTAwM2Vpbl9jb3VudD0wO1xuIDgyMDpcdFx0XHRcdG1kYzgwMC1cdTAwM2VvdXRfY291bnQ9MDtcbiA4MjE6XHRcdFx0XHRtZGM4MDAtXHUwMDNlb3V0X3B0cj0wO1xuIDgyMjpcdFx0XHRcdG1kYzgwMC1cdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XG4gODIzOlx0XHRcdH1cbiA4MjQ6XHRcbiA4MjU6XHRcdFx0Lyogc2F2ZSBjb21tYW5kIGJ5dGUgKi9cbiA4MjY6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vpbl9jb3VudCBcdTAwM2MgOClcbiA4Mjc6XHRcdFx0e1xuIDgyODpcdFx0XHRcdG1kYzgwMC1cdTAwM2VpblttZGM4MDAtXHUwMDNlaW5fY291bnRdID0gYztcbiA4Mjk6XHRcdFx0XHRtZGM4MDAtXHUwMDNlaW5fY291bnQmIzQzOyYjNDM7O1xuIDgzMDpcdFx0XHR9XG4gODMxOlx0XHRcdGVsc2VcbiA4MzI6XHRcdFx0e1xuIDgzMzpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODM0Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4gODM1Olx0XHRcdH1cbiA4MzY6XHRcbiA4Mzc6XHRcdFx0LyogQ29tbWFuZCBCdWZmZXIgZnVsbCA/IC1cdTAwM2Ugc2VuZCBpdCB0byBjYW1lcmEgKi9cbiA4Mzg6XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2Vpbl9jb3VudCA9PSA4KVxuIDgzOTpcdFx0XHR7XG4gODQwOlx0XHRcdFx0aW50IGFuc3dlcnNpemU7XG4gODQxOlx0XG4gODQyOlx0XHRcdFx0aWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKVxuIDg0MzpcdFx0XHRcdHtcbiA4NDQ6XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gODQ1Olx0XHRcdFx0XHRcdFwmIzM0O0NhbWVyYSBkaWRuJiMzOTt0IGdldCByZWFkeS5cXG5cJiMzNDspO1xuIDg0NjpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbiA4NDc6XHRcdFx0XHRcdHJldHVybiAtRUlPO1xuIDg0ODpcdFx0XHRcdH1cbiA4NDk6XHRcbiA4NTA6XHRcdFx0XHRhbnN3ZXJzaXplPW1kYzgwMF9nZXRBbnN3ZXJTaXplIChtZGM4MDAtXHUwMDNlaW5bMV0pO1xuIDg1MTpcdFxuIDg1MjpcdFx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1XT1JLSU5HO1xuIDg1MzpcdFx0XHRcdG1lbWNweSAobWRjODAwLVx1MDAzZXdyaXRlX3VyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXIsIG1kYzgwMC1cdTAwM2Vpbiw4KTtcbiA4NTQ6XHRcdFx0XHRtZGM4MDAtXHUwMDNld3JpdGVfdXJiLVx1MDAzZWRldiA9IG1kYzgwMC1cdTAwM2VkZXY7XG4gODU1Olx0XHRcdFx0cmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKG1kYzgwMC1cdTAwM2V3cml0ZV91cmIsIEdGUF9LRVJORUwpO1xuIDg1NjpcdFx0XHRcdGlmIChyZXR2YWwpIHtcbiA4NTc6XHRcdFx0XHRcdGRldl9lcnIoXHUwMDI2bWRjODAwLVx1MDAzZWRldi1cdTAwM2VkZXYsXG4gODU4Olx0XHRcdFx0XHRcdFwmIzM0O3N1Ym1pdHRpbmcgd3JpdGUgdXJiIGZhaWxzIFwmIzM0O1xuIDg1OTpcdFx0XHRcdFx0XHRcJiMzNDsocmV0dmFsPSVpKVxcblwmIzM0OywgcmV0dmFsKTtcbiA4NjA6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODYxOlx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA4NjI6XHRcdFx0XHR9XG4gODYzOlx0XHRcdFx0d2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC1cdTAwM2V3cml0ZV93YWl0LCBtZGM4MDAtXHUwMDNld3JpdHRlbixcbiA4NjQ6XHRcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhUT19XUklURV9HRVRfUkVBRFkpKTtcbiA4NjU6XHRcdFx0XHRtZGM4MDAtXHUwMDNld3JpdHRlbiA9IDA7XG4gODY2Olx0XHRcdFx0aWYgKG1kYzgwMC1cdTAwM2VzdGF0ZSA9PSBXT1JLSU5HKVxuIDg2NzpcdFx0XHRcdHtcbiA4Njg6XHRcdFx0XHRcdHVzYl9raWxsX3VyYihtZGM4MDAtXHUwMDNld3JpdGVfdXJiKTtcbiA4Njk6XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODcwOlx0XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA4NzE6XHRcdFx0XHR9XG4gODcyOlx0XG4gODczOlx0XHRcdFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgbWRjODAwLVx1MDAzZWluWzFdKVxuIDg3NDpcdFx0XHRcdHtcbiA4NzU6XHRcdFx0XHRcdGNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi9cbiA4NzY6XHRcdFx0XHRcdGNhc2UgMHgzZTogLyogVGFrZSBzaG90IGluIEZpbmUgTW9kZSAoV0NhbSBNb2RlKSAqL1xuIDg3NzpcdFx0XHRcdFx0XHRpZiAobWRjODAwLVx1MDAzZXBpY19sZW4gXHUwMDNjIDApXG4gODc4Olx0XHRcdFx0XHRcdHtcbiA4Nzk6XHRcdFx0XHRcdFx0XHRkZXZfZXJyKFx1MDAyNm1kYzgwMC1cdTAwM2VkZXYtXHUwMDNlZGV2LFxuIDg4MDpcdFx0XHRcdFx0XHRcdFx0XCYjMzQ7Y2FsbCAweDA3IGJlZm9yZSBcJiMzNDtcbiA4ODE6XHRcdFx0XHRcdFx0XHRcdFwmIzM0OzB4MDUsMHgzZVxcblwmIzM0Oyk7XG4gODgyOlx0XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZXN0YXRlPVJFQURZO1xuIDg4MzpcdFx0XHRcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gODg0Olx0XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gODg1Olx0XHRcdFx0XHRcdH1cbiA4ODY6XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZXBpY19sZW49LTE7XG4gODg3Olx0XHRcdFx0XHRcdGZhbGx0aHJvdWdoO1xuIDg4ODpcdFxuIDg4OTpcdFx0XHRcdFx0Y2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi9cbiA4OTA6XHRcdFx0XHRcdFx0bWRjODAwLVx1MDAzZWRvd25sb2FkX2xlZnQ9YW5zd2Vyc2l6ZSYjNDM7NjQ7XG4gODkxOlx0XHRcdFx0XHRcdG1kYzgwMC1cdTAwM2VzdGF0ZT1ET1dOTE9BRDtcbiA4OTI6XHRcdFx0XHRcdFx0bWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0RPV05MT0FEX0dFVF9CVVNZKTtcbiA4OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gODk0Olx0XG4gODk1Olx0XG4gODk2Olx0XHRcdFx0XHRkZWZhdWx0OlxuIDg5NzpcdFx0XHRcdFx0XHRpZiAoYW5zd2Vyc2l6ZSlcbiA4OTg6XHRcdFx0XHRcdFx0e1xuIDg5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI2MQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiAxNzIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUHJvYmUgUGF0Y2ggYW5kIEtNU0FOIEp1c3RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHJlZ2lzdGVyZWQgdGhlIFVTQiBkZXZpY2Ugd2l0aCBgdXNiX3JlZ2lzdGVyX2RldmAgKmJlZm9yZSogZnVsbHkgaW5pdGlhbGl6aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSBhbmQgVVJCcywgY3JlYXRpbmcgYSB3aW5kb3cgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gb2NjdXIgYmVmb3JlIHRoZSBkcml2ZXIgd2FzIHJlYWR5LiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlLiBUaGUgcGF0Y2ggc21hcnRseSByZW9yZGVycyB0aGUgcmVnaXN0cmF0aW9uLCBtb3ZpbmcgaXQgdG8gKmFmdGVyKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSBhbmQgdGhlIGBpb19sb2NrYCBoYXMgYmVlbiByZWxlYXNlZC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nLiBJZiBgdXNiX3JlZ2lzdGVyX2RldmAgZmFpbHMsIHRoZSBgbWRjODAwLSZndDtkZXZgIHBvaW50ZXIgaXMgc2V0IHRvIGBOVUxMYCBhbmQgdGhlIGBtZGM4MDAtJmd0O3N0YXRlYCBpcyBzZXQgdG8gYE5PVF9DT05ORUNURURgLCBlbnN1cmluZyBhIGNsZWFuIHRlYXJkb3duLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJiMzOTtzIHB1cnBvc2UsIG5vLCBpdCBkb2VzIG5vdC4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gSG93ZXZlciwgdGhlIHBhdGNoIGl0c2VsZiAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyBzb2xlbHkgYWJvdXQgc3luY2hyb25pemF0aW9uIGFuZCBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcGF0Y2ggcmVhcnJhbmdlcyAqd2hlbiogdGhlIGRyaXZlciBiZWNvbWVzIGFjY2Vzc2libGU7IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBhbnkgbmV3IGNvZGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGlzIHVzZWQuIFRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGZvY3VzIG9uIHRoZSBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSwgc3BlY2lmaWNhbGx5IG9uIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIHRvIGhhbmRsZSB0aGUgZGV2aWNlJiMzOTtzIG9wZW4vY2xvc2UgY2FsbHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBsb2NrIHVzYWdlLCBvciBkZXZpY2UgbGlmZWN5Y2xlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcyBvZiBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBXZSYjMzk7cmUgYWxyZWFkeSBydW5uaW5nIHRob3NlIGNoZWNrcywgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4KClRoZSByZWFzb25pbmcgSSYjMzk7bGwgcHJvdmlkZSBpcyB0aGlzOiBUaGlzIHBhdGNoIHJlb3JnYW5pemVzIFVTQiBkZXZpY2UgcmVnaXN0cmF0aW9uIChgdXNiX3JlZ2lzdGVyX2RldigpYCkgaW4gYG1kYzgwMF91c2JfcHJvYmUoKWAgdG8gb2NjdXIgYWZ0ZXIgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgdGhlIGRldmljZSBzdGF0ZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIGBpb19sb2NrYCBpcyB1bmxvY2tlZC4gRXJyb3IgaGFuZGxpbmcgaXMgYWRkZWQgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIGlmIHJlZ2lzdHJhdGlvbiBmYWlscy4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSBmb2N1cyBpcyByZXNvbHZpbmcgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgZGV2aWNlIHByb2JlLiBUaGVzZSBraW5kcyBvZiBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGlzc3VlcyBhcmUgYmVzdCBhZGRyZXNzZWQgdXNpbmcgS0FTQU4gYW5kIExPQ0tERVAgYW5kIHRoZSBzdGFuZGFyZCBkZWJ1ZyBmYWNpbGl0aWVzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4gaXMgdW5uZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxuXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDAuNTA4ODkyNTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0OTA0MDQ0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCXCIsXG4gICAgXCJVU0JfTURDODAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRjODAwX3VzYl9wcm9iZVwiLFxuICAgIFwibWRjODAwX2RldmljZV9vcGVuXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlYWRcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfd3JpdGVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2VfcmVsZWFzZVwiLFxuICAgIFwibWRjODAwX3VzYl9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZSBpbiBtZGM4MDBfdXNiX3Byb2JlIGluIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkcml2ZXIsIG1vdmluZyB1c2JfcmVnaXN0ZXJfZGV2IGFmdGVyIFVSQiBzZXR1cCBhbmQgYWRkaW5nIHByb3BlciBmYWlsdXJlIGhhbmRsaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBnYWRnZXQgZW11bGF0aW9uIChEdW1teSBIQ0QgLyBSYXcgR2FkZ2V0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDAuNTA4ODk4MTczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1NzIwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YmZiZmE2OWFmYzdmMzVhMmQ2ODc2NWMxN2NlZjcxMTVhMDU0ODNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xcbmluZGV4IGNhMjg3Yjc3MGU4Y2IuLjAxOTMxNDcwMmUyNmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcXG4rKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xcbkBAIC00ODIsMTMgKzQ4Miw2IEBAIHN0YXRpYyBpbnQgbWRjODAwX3VzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiBcXG4tXFx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcXHUwMDI2bWRjODAwX2NsYXNzKTtcXG4tXFx0aWYgKHJldHZhbCkge1xcbi1cXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxcXG5cXFwiKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbi1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4tXFx0fVxcbi1cXG4gXFx0bWRjODAwLVxcdTAwM2VkZXY9ZGV2O1xcbiBcXHRtZGM4MDAtXFx1MDAzZW9wZW49MDtcXG4gXFxuQEAgLTUyNyw2ICs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gXFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1SRUFEWTtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4rXFxuK1xcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXFx1MDAyNm1kYzgwMF9jbGFzcyk7XFxuK1xcdGlmIChyZXR2YWwpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcXFxuXFxcIik7XFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuK1xcdFxcdG1kYzgwMC1cXHUwMDNlZGV2ID0gTlVMTDtcXG4rXFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4gXFx0XFxuIFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgbWRjODAwKTtcXG4gXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjAxLjA1MTI5ODQ3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzg4NjQ5ODc0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCXCIsXG4gICAgXCJVU0JfTURDODAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWRjODAwX3VzYl9wcm9iZVwiLFxuICAgIFwibWRjODAwX2RldmljZV9vcGVuXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlYWRcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfd3JpdGVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2VfcmVsZWFzZVwiLFxuICAgIFwibWRjODAwX3VzYl9kaXNjb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gc2VxdWVuY2UgaW4gbWRjODAwX3VzYl9wcm9iZSBpbiB0aGUgTXVzdGVrIE1EQzgwMCBVU0IgZHJpdmVyLCBtb3ZpbmcgdXNiX3JlZ2lzdGVyX2RldiBhZnRlciBVUkIgc2V0dXAgYW5kIGFkZGluZyBwcm9wZXIgZmFpbHVyZSBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiAoRHVtbXkgSENEIC8gUmF3IEdhZGdldCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2JmYmZhNjlhZmM3ZjM1YTJkNjg3NjVjMTdjZWY3MTE1YTA1NDgzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjA6NTg6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5pbmRleCBjYTI4N2I3NzBlOGNiLi4wMTkzMTQ3MDJlMjZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcbisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG5AQCAtNDgyLDEzICs0ODIsNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4gXG4tXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4tXHRpZiAocmV0dmFsKSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcblwiKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4tXG4gXHRtZGM4MDAtXHUwMDNlZGV2PWRldjtcbiBcdG1kYzgwMC1cdTAwM2VvcGVuPTA7XG4gXG5AQCAtNTI3LDYgKzUyMCwxNiBAQCBzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuIFx0bWRjODAwLVx1MDAzZXN0YXRlPVJFQURZO1xuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbitcbitcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXHUwMDI2bWRjODAwX2NsYXNzKTtcbitcdGlmIChyZXR2YWwpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZpbnRmLVx1MDAzZWRldiwgXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxuXCIpO1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm1kYzgwMC1cdTAwM2Vpb19sb2NrKTtcbitcdFx0bWRjODAwLVx1MDAzZWRldiA9IE5VTEw7XG4rXHRcdG1kYzgwMC1cdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuIFx0XG4gXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjAxLjA1MTMwMDkxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMzIwNTkwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGV2YWx1YXRlIGEgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYSBjaGFuZ2UgaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0J3MgZGl2ZSByaWdodCBpbiBhbmQgbG9vayBhdCB0aGUgZGlmZi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcylgIHdhcyBtb3ZlZCAqYWZ0ZXIqIGBtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spYCBpbiB0aGUgYG1kYzgwMF91c2JfcHJvYmVgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhcyBvcmRlcmluZyBvZiBtdXRleCBvcGVyYXRpb25zIGFuZCByZWdpc3RyYXRpb24gaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd2lkZXIgY29udGV4dC4gSSBuZWVkIHRvIGtub3cgaG93IGBtZGM4MDAuY2AgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBib3RoIGBtZGM4MDAuY2AgaXRzZWxmIGFuZCBpdHMgY29ycmVzcG9uZGluZyBLY29uZmlnIGZpbGUuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhY2Nlc3NpYmxlIGl0IGlzIGZvciB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBJIGNhbiBnZXQgdG8gaXQgdGhyb3VnaCBzeXprYWxsZXIsIHBlcmhhcHMgdmlhIHJhdyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi5cblxuSSdtIGdvaW5nIHRvIGdyYWIgdGhvc2UgZmlsZXMgbm93LCBlaXRoZXIgd2l0aCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGdldCB0aGUgbmVlZGVkIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTowOC4xODMzNjU2OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNTYxNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlVTQl9NREM4MDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX1VTQilcXHRcXHQrPSBzdG9yYWdlL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ2LVxcbmRyaXZlcnMvdXNiL01ha2VmaWxlOjQ3Om9iai0kKENPTkZJR19VU0JfTURDODAwKVxcdCs9IGltYWdlL1xcbmRyaXZlcnMvdXNiL01ha2VmaWxlLTQ4LW9iai0kKENPTkZJR19VU0JfTUlDUk9URUspXFx0Kz0gaW1hZ2UvXFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnPTU9Y29tbWVudCBcXFwiVVNCIEltYWdpbmcgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnLTYtXFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZzo3OmNvbmZpZyBVU0JfTURDODAwXFxuZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VU0JfTURDODAwKVxcdCs9IG1kYzgwMC5vXFxuZHJpdmVycy91c2IvaW1hZ2UvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKVxcdCs9IG1pY3JvdGVrLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MDguMzI2OTM1NjY1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMTE0NjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgZm9yIFVTQiBJbWFnaW5nIERyaXZlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVVNCIGltYWdpbmcgZGV2aWNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgZXhwb3NlZCwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBhbmQgdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBiZWluZyBtYW5hZ2VkIGZyb20gYSBjb25maWd1cmF0aW9uIHN0YW5kcG9pbnQuIEknbGwgYmUgcXVpY2tseSBhc3Nlc3NpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBzeW1ib2xzIHVzZWQsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgaW52b2x2ZWQuIFRoaXMgaW5pdGlhbCBzY2FuIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBoaWdoLWxldmVsIGRlc2lnbiBjaG9pY2VzIG1hZGUgZm9yIHRoZXNlIGRyaXZlcnM6IEhvdyBhcmUgZGlmZmVyZW50IFVTQiBpbWFnaW5nIGRldmljZXMgc3VwcG9ydGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgY29uZmxpY3RzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBsYXRlcj9cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjEwLjYzODA4NDI4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBJbWFnaW5nIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiVVNCIEltYWdpbmcgZGV2aWNlc1xcXCJcXG4gICA2OlxcdFxcbiAgIDc6XFx0Y29uZmlnIFVTQl9NREM4MDBcXG4gICA4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYSBzdXBwb3J0XFxcIlxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHN0aWxsIGNhbWVyYSB0b1xcbiAgMTE6XFx0XFx0ICB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgZHJpdmVyIGNhbiBiZSB1c2VkIHdpdGggZ3Bob3RvIDAuNC4zXFxuICAxMjpcXHRcXHQgIGFuZCBoaWdoZXIgKGxvb2sgYXQgXFx1MDAzY2h0dHA6Ly93d3cuZ3Bob3RvLm9yZy9cXHUwMDNlKS5cXG4gIDEzOlxcdFxcdCAgVG8gdXNlIGl0IGNyZWF0ZSBhIGRldmljZSBub2RlIHdpdGggXFxcIm1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxcIiBhbmRcXG4gIDE0OlxcdFxcdCAgY29uZmlndXJlIGl0IGluIHlvdXIgc29mdHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZGM4MDAuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBVU0JfTUlDUk9URUtcXG4gIDIwOlxcdFxcdHRyaXN0YXRlIFxcXCJNaWNyb3RlayBYNlVTQiBzY2FubmVyIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgTWljcm90ZWsgWDZVU0IgYW5kXFxuICAyNDpcXHRcXHQgIHBvc3NpYmx5IHRoZSBQaGFudG9tIDMzNkNYLCBQaGFudG9tIEM2IGFuZCBTY2FuTWFrZXIgVjZVKFMpTC5cXG4gIDI1OlxcdFxcdCAgU3VwcG9ydCBmb3IgYW55dGhpbmcgYnV0IHRoZSBYNiBpcyBleHBlcmltZW50YWwuXFxuICAyNjpcXHRcXHQgIFBsZWFzZSByZXBvcnQgZmFpbHVyZXMgYW5kIHN1Y2Nlc3Nlcy5cXG4gIDI3OlxcdFxcdCAgVGhlIHNjYW5uZXIgd2lsbCBhcHBlYXIgYXMgYSBzY3NpIGdlbmVyaWMgZGV2aWNlIHRvIHRoZSByZXN0XFxuICAyODpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFNjc2kgc3VwcG9ydCBpcyByZXF1aXJlZC5cXG4gIDI5OlxcdFxcdCAgVGhpcyBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBjYWxsZWQgbWljcm90ZWsuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjEwLjYzODE0OTc0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNjY3NDk1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgVVNCIE1EQzgwMCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBgVVNCX01EQzgwMGAgaXMgdGhlIGtleSBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgd2l0aGluIHRoZSBVU0Igc3Vic3lzdGVtJ3MgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgZmlsZXMuIEknZCBoZWFkIHN0cmFpZ2h0IGZvciB0aGUgY29yZTogZWl0aGVyIGBkcml2ZXJzL3VzYi9LY29uZmlnYCBvciBgZHJpdmVycy91c2IvTWFrZWZpbGVgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBvYmplY3QgZmlsZSBpbmNsdXNpb24gd2lsbCByZXNpZGUuIEJ1dCwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgKmNvbmZpZ3VyYXRpb24qIGl0ZW0sIHJhdGhlciB0aGFuIGEgYnVpbGQgKnRhcmdldCosIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIHByaW9yaXRpemUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpcnN0LiBJJ20gbG9va2luZyBmb3IgYW55IGBjb25maWdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGF2YWlsYWJpbGl0eSBvciBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvciB0aGUgYE1EQzgwMGAgZGV2aWNlLiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AuIExldCdzIHNlZSB3aGF0J3MgaW4gYGRyaXZlcnMvdXNiL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjE5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxMy4wMDQ5MDE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc3NzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbWFnZS9LY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL0tjb25maWc9MTE2PXNvdXJjZSBcXFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTE4OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3VzYi9LY29uZmlnLTExOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MTMuMDYzNjg1MjM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1MDA4NjkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgbWRjODAwLmNgIGZvciBVU0IgSW5zaWdodCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgbWRjODAwX3VzYl9wcm9iZWAg4oCTIHRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0aGF04oCZbGwgdGVsbCBtZSBob3cgdGhpcyBwYXJ0aWN1bGFyIFVTQiBkZXZpY2UgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSB3YW50IHRvIHNlZSB3aGF0IGluaXRpYWxpemF0aW9uIHN0ZXBzIHRoZXkncmUgdGFraW5nLCBob3cgdGhleSdyZSBoYW5kbGluZyBkZXZpY2UgZGV0ZWN0aW9uLCBhbmQgd2hhdCBzcGVjaWZpYyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIE1EQzgwMCB0aGV5J3JlIGFkZHJlc3NpbmcgcmlnaHQgb2ZmIHRoZSBiYXQuIEJleW9uZCB0aGF0IGluaXRpYWwgcHJvYmUsIEknbSBhbHNvIGdvaW5nIHRvIHNraW0gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGBtZGM4MDBfdXNiX3Byb2JlYCwgYW5kIGxvb2sgZm9yIGFueSBpbnRlcmVzdGluZyBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gQXJlIHRoZXJlIGFueSBjdXN0b20gZXJyb3IgaGFuZGxpbmcgcm91dGluZXM/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBzcGVjaWFsIGF0dGVudGlvbiB0bz8gVGhlIGJpZ2dlciBwaWN0dXJlIG1hdHRlcnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZ29vZCBtZW50YWwgbW9kZWwgb2YgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIncyBhcmNoaXRlY3R1cmUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIG5ldyBvciBkaWZmZXJlbnQgY29tcGFyZWQgdG8gcHJldmlvdXMgdmVyc2lvbnMuIEl0J3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjE1LjQxMzc3NTEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdHtcXG4gNDYxOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09LTE7XFxuIDQ2MjpcXHRcXHRcXHRmb3IgKGo9MDsgalxcdTAwM2M0OyBqKyspXFxuIDQ2MzpcXHRcXHRcXHR7XFxuIDQ2NDpcXHRcXHRcXHRcXHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXFx1MDAyNmludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxcbiA0NjU6XFx0XFx0XFx0XFx0e1xcbiA0NjY6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VlbmRwb2ludFtpXT1pbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgO1xcbiA0Njc6XFx0XFx0XFx0XFx0XFx0aWYgKGk9PTEpXFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHR7XFxuIDQ2OTpcXHRcXHRcXHRcXHRcXHRcXHRpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iSW50ZXJ2YWw7XFxuIDQ3MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDQ3MTpcXHRcXHRcXHRcXHR9XFxuIDQ3MjpcXHRcXHRcXHR9XFxuIDQ3MzpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VlbmRwb2ludFtpXSA9PSAtMSlcXG4gNDc0OlxcdFxcdFxcdHtcXG4gNDc1OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcInByb2JlIGZhaWxzIC1cXHUwMDNlIFdyb25nIEVuZHBvaW50cy5cXFxcblxcXCIpO1xcbiA0NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ3NzpcXHRcXHRcXHR9XFxuIDQ3ODpcXHRcXHR9XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcIkZvdW5kIE11c3RlayBNREM4MDAgb24gVVNCLlxcXFxuXFxcIik7XFxuIDQ4MjpcXHRcXG4gNDgzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2PWRldjtcXG4gNDg2OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3Blbj0wO1xcbiA0ODc6XFx0XFxuIDQ4ODpcXHRcXHQvKiBTZXR1cCBVUkIgU3RydWN0cyAqL1xcbiA0ODk6XFx0XFx0dXNiX2ZpbGxfaW50X3VyYiAoXFxuIDQ5MDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWlycV91cmIsXFxuIDQ5MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldixcXG4gNDkyOlxcdFxcdFxcdHVzYl9yY3ZpbnRwaXBlIChtZGM4MDAtXFx1MDAzZWRldixtZGM4MDAtXFx1MDAzZWVuZHBvaW50IFsxXSksXFxuIDQ5MzpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWlycV91cmJfYnVmZmVyLFxcbiA0OTQ6XFx0XFx0XFx0OCxcXG4gNDk1OlxcdFxcdFxcdG1kYzgwMF91c2JfaXJxLFxcbiA0OTY6XFx0XFx0XFx0bWRjODAwLFxcbiA0OTc6XFx0XFx0XFx0aXJxX2ludGVydmFsXFxuIDQ5ODpcXHRcXHQpO1xcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYiAoXFxuIDUwMTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYixcXG4gNTAyOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2LFxcbiA1MDM6XFx0XFx0XFx0dXNiX3NuZGJ1bGtwaXBlIChtZGM4MDAtXFx1MDAzZWRldiwgbWRjODAwLVxcdTAwM2VlbmRwb2ludFswXSksXFxuIDUwNDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYl9idWZmZXIsXFxuIDUwNTpcXHRcXHRcXHQ4LFxcbiA1MDY6XFx0XFx0XFx0bWRjODAwX3VzYl93cml0ZV9ub3RpZnksXFxuIDUwNzpcXHRcXHRcXHRtZGM4MDBcXG4gNTA4OlxcdFxcdCk7XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdHVzYl9maWxsX2J1bGtfdXJiIChcXG4gNTExOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLFxcbiA1MTI6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYsXFxuIDUxMzpcXHRcXHRcXHR1c2JfcmN2YnVsa3BpcGUgKG1kYzgwMC1cXHUwMDNlZGV2LCBtZGM4MDAtXFx1MDAzZWVuZHBvaW50IFszXSksXFxuIDUxNDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYl9idWZmZXIsXFxuIDUxNTpcXHRcXHRcXHQ2NCxcXG4gNTE2OlxcdFxcdFxcdG1kYzgwMF91c2JfZG93bmxvYWRfbm90aWZ5LFxcbiA1MTc6XFx0XFx0XFx0bWRjODAwXFxuIDUxODpcXHRcXHQpO1xcbiA1MTk6XFx0XFxuIDUyMDpcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVJFQURZO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdHJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgXFx1MDAyNm1kYzgwMF9jbGFzcyk7XFxuIDUyNTpcXHRcXHRpZiAocmV0dmFsKSB7XFxuIDUyNjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXFxcXG5cXFwiKTtcXG4gNTI3OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUyODpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDUyOTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlID0gTk9UX0NPTk5FQ1RFRDtcXG4gNTMwOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNTMxOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1MzI6XFx0XFx0fVxcbiA1MzM6XFx0XFx0XFxuIDUzNDpcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1kYzgwMCk7XFxuIDUzNTpcXHRcXHRyZXR1cm4gMDtcXG4gNTM2OlxcdH1cXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFxuIDUzOTpcXHQvKlxcbiA1NDA6XFx0ICogRGlzY29ubmVjdCBVU0IgZGV2aWNlIChtYXliZSB0aGUgTURDODAwKVxcbiA1NDE6XFx0ICovXFxuIDU0MjpcXHRzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiA1NDM6XFx0e1xcbiA1NDQ6XFx0XFx0c3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRkZXZfZGJnKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCIoJXMpIGNhbGxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA1NDc6XFx0XFxuIDU0ODpcXHRcXHRpZiAobWRjODAwKSB7XFxuIDU0OTpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxNS40MTM5MDQwMjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNjk1Mzg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbWRjODAwLmNgKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhlIGluaXRpYWwgc25pcHBldHMgb2YgYG1kYzgwMC5jYCwgYnV0IHRvICpyZWFsbHkqIGdyYXNwIHRoaXMgZHJpdmVyJ3MgZnVuY3Rpb25hbGl0eSwgSSBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgdGhpbmcuIFRoZSBwYXJ0aWFsIHZpZXdzIGFyZSBoZWxwZnVsIGZvciBjb250ZXh0LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZHJpdmVyIGxpZmVjeWNsZSwgdGhlIGludGVycnVwdCBoYW5kbGluZywgdGhlIHJlZ2lzdGVyIGludGVyYWN0aW9ucyDigJMgYWxsIG9mIHRoYXQgcmVxdWlyZXMgYSBjb21wcmVoZW5zaXZlIHZpZXcuIEkgY2FuIHByb2JhYmx5IGluZmVyIGEgbG90IGZyb20gd2hhdCBJJ3ZlIHNlZW4sIGJ1dCB0aGUgbnVhbmNlcyBhcmUgb2Z0ZW4gaGlkZGVuIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IHZpc2libGUuIFdoYXQgYXJlIHRoZSBzdWJ0bGUgaW50ZXJhY3Rpb25zPyBIb3cgZG9lcyBlcnJvciBoYW5kbGluZyB3b3JrIGluIGEgcmVhbC13b3JsZCBzY2VuYXJpbz8gR2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgd2lsbCBhbGxvdyBtZSB0byBtYWtlIGFueSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb25zLCBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHN1Z2dlc3QgaW1wcm92ZW1lbnRzIHRvIHRoZSBhcmNoaXRlY3R1cmUgd2l0aCBjb25maWRlbmNlLiBMZXQncyBnZXQgdGhlIHdob2xlIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjE3LjQ1MDg2MDQzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqXFx0VVNCLUtlcm5lbCBEcml2ZXIgZm9yIHRoZSBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxuICAgOTpcXHQgKlxcdChjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqXFxuICAxMjpcXHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxcbiAgMTM6XFx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcXG4gIDE0OlxcdCAqIHRvIHRoZSBLZXJuZWwgTm9kZS5cXG4gIDE1OlxcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcXG4gIDE2OlxcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxuICAxNzpcXHQgKlxcbiAgMTg6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXFxuICAxOTpcXHQgKiBcXG4gIDIwOlxcdCAqIEZpeDogbWRjODAwIHVzZWQgc2xlZXBfb24gYW5kIHNsZXB0IHdpdGggaW9fbG9jayBoZWxkLlxcbiAgMjE6XFx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcXG4gIDIyOlxcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cXG4gIDIzOlxcdCAqIGJ5IE9saXZlciBOZXVrdW0gXFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVxcdTAwM2VcXG4gIDI0OlxcdCAqICgwMi8xMi8yMDAxKVxcbiAgMjU6XFx0ICogXFxuICAyNjpcXHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxcbiAgMjc6XFx0ICogKDA4LzA0LzIwMDEpIGdiXFxuICAyODpcXHQgKlxcbiAgMjk6XFx0ICogdmVyc2lvbiAwLjcuNVxcbiAgMzA6XFx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cXG4gIDMxOlxcdCAqIFRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIFxcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcXHUwMDNlIHdobyBcXG4gIDMyOlxcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cXG4gIDMzOlxcdCAqICgzMC8xMC8yMDAwKVxcbiAgMzQ6XFx0ICpcXG4gIDM1OlxcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cXG4gIDM2OlxcdCAqIGJ5IEdyZWcgS0ggXFx1MDAzY2dyZWdAa3JvYWguY29tXFx1MDAzZVxcbiAgMzc6XFx0ICogKDEzLzEwLzIwMDApXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICogdmVyc2lvbiAwLjcuM1xcbiAgNDA6XFx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cXHUwMDNlc3RhdGUgZmllbGQgZ2V0cyBzZXQgdG8gUkVBRFkgYWZ0ZXIgdGhlXFxuICA0MTpcXHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcXG4gIDQyOlxcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXFxuICA0MzpcXHQgKiBoYW5nIHVwcy5cXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKiB2ZXJzaW9uIDAuNy4xXFxuICA0NjpcXHQgKiBNT0RfSU5DIGFuZCBNT0RfREVDIGFyZSBjaGFuZ2VkIGluIHVzYl9wcm9iZSB0byBwcmV2ZW50IGxvYWQvdW5sb2FkXFxuICA0NzpcXHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cXG4gIDQ4OlxcdCAqICgwNC8wNC8yMDAwKVxcbiAgNDk6XFx0ICpcXG4gIDUwOlxcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxcbiAgNTE6XFx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cXG4gIDUyOlxcdCAqICgyNi8wMy8yMDAwKVxcbiAgNTM6XFx0ICpcXG4gIDU0OlxcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cXG4gIDU1OlxcdCAqICgwMS8wMy8yMDAwKVxcbiAgNTY6XFx0ICpcXG4gIDU3OlxcdCAqIHZlcnNpb24gMC43LjBcXG4gIDU4OlxcdCAqIFJld3JpdGUgb2YgdGhlIGRyaXZlciA6IFRoZSBkcml2ZXIgbm93IHVzZXMgVVJCJ3MuIFRoZSBvbGQgc3R1ZmZcXG4gIDU5OlxcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXFxuICA2MDpcXHQgKlxcbiAgNjE6XFx0ICogdmVyc2lvbiAwLjYuMFxcbiAgNjI6XFx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXFxuICA2MzpcXHQgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRyaXZlci4gQSBzcGVjaWFsIGV4ZWN1dGVDb21tYW5kIGZ1bmN0aW9uXFxuICA2NDpcXHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxcbiAgNjU6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxcbiAgNjY6XFx0ICogRWl0aGVyIHdpdGggdGhlIGRldi1cXHUwMDNlYnVzLVxcdTAwM2VvcHMtXFx1MDAzZWJ1bGsuLi4gb3Igd2l0aCBjYWxsYmFjayBmdW5jdGlvbi5cXG4gIDY3OlxcdCAqICgwOS8xMS8xOTk5KVxcbiAgNjg6XFx0ICpcXG4gIDY5OlxcdCAqIHZlcnNpb24gMC41LjA6XFxuICA3MDpcXHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcXG4gIDcxOlxcdCAqIGZ1bmN0aW9ucyB3b3JrLlxcbiAgNzI6XFx0ICogKDIwLzEwLzE5OTkpXFxuICA3MzpcXHQgKi9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAgNzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgNzc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICA3ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDc5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4gIDgwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICA4MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgODI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDgzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDg0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICA4NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDg2OlxcdFxcbiAgODc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgODg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXFxuICA5MjpcXHQgKi9cXG4gIDkzOlxcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXFxcInYwLjcuNSAoMzAvMTAvMjAwMClcXFwiXFxuICA5NDpcXHQjZGVmaW5lIERSSVZFUl9BVVRIT1IgXFxcIkhlbm5pbmcgWmFiZWwgXFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVxcdTAwM2VcXFwiXFxuICA5NTpcXHQjZGVmaW5lIERSSVZFUl9ERVNDIFxcXCJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxcIlxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi9cXG4gIDk4OlxcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcXHQweDA1NWZcXG4gIDk5OlxcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcXHQweGE4MDBcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToxNy40NTEwMTM5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEzNjg2NTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBtZGM4MDAuYyBVU0IgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBkcml2ZXIgYmV0dGVyLiBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgVVNCIGltYWdlIGNsYXNzIGFuZCBob3cgaXQgZ2VuZXJhbGx5IHdvcmtzLCBzbyBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBgbWRjODAwYCBpbXBsZW1lbnRhdGlvbiBkZXZpYXRlcyBmcm9tIHRoZSBzdGFuZGFyZC4gV2hhdCBhcmUgaXRzIHNwZWNpZmljIHF1aXJrcyBhbmQgb3B0aW1pemF0aW9ucz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBwb3RlbnRpYWwgYnVncyBsdXJraW5nPyBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIHRoZSBlbmRwb2ludHMgZmlyc3QgYW5kIHRyeSBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCB0aGVuIGludmVzdGlnYXRlIHRoZSB1bnVzdWFsIGFzcGVjdHMgb2YgdGhlIGRldmljZSdzIGNvbnRyb2wgaW50ZXJmYWNlLCBhbmQgZmluYWxseSB0cnkgYW5kIGlkZW50aWZ5IGFueSBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciByZWFkcyBvciB3cml0ZXMuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGdldCBhIGZlZWwgZm9yIGhvdyB0aGUgZGV2aWNlIGludGVyYWN0cyB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MjEuNTg3ODgyMTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkID0gMTtcXG4gNDAxOlxcdFxcdHdha2VfdXAgKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3dhaXQpO1xcbiA0MDI6XFx0fVxcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXG4gNDA1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4gNDA2OlxcdFxcdFByb2JpbmcgZm9yIHRoZSBDYW1lcmFcXG4gNDA3OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDQwODpcXHRcXG4gNDA5OlxcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcXG4gNDEwOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzO1xcbiA0MTE6XFx0c3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIG1kYzgwMF9jbGFzcyA9IHtcXG4gNDEyOlxcdFxcdC5uYW1lID1cXHRcXHRcXFwibWRjODAwJWRcXFwiLFxcbiA0MTM6XFx0XFx0LmZvcHMgPVxcdFxcdFxcdTAwMjZtZGM4MDBfZGV2aWNlX29wcyxcXG4gNDE0OlxcdFxcdC5taW5vcl9iYXNlID1cXHRNREM4MDBfREVWSUNFX01JTk9SX0JBU0UsXFxuIDQxNTpcXHR9O1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXG4gNDE4OlxcdC8qXFxuIDQxOTpcXHQgKiBDYWxsYmFjayB0byBzZWFyY2ggdGhlIE11c3RlayBNREM4MDAgb24gdGhlIFVTQiBCdXNcXG4gNDIwOlxcdCAqL1xcbiA0MjE6XFx0c3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4gNDIyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDQyMzpcXHR7XFxuIDQyNDpcXHRcXHRpbnQgaSxqO1xcbiA0MjU6XFx0XFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50Zl9kZXNjO1xcbiA0MjY6XFx0XFx0c3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpO1xcbiA0Mjc6XFx0XFx0aW50IGlycV9pbnRlcnZhbD0wO1xcbiA0Mjg6XFx0XFx0aW50IHJldHZhbDtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWQuXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZGV2ICE9IE5VTEwpXFxuIDQzNDpcXHRcXHR7XFxuIDQzNTpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwib25seSBvbmUgTXVzdGVrIE1EQzgwMCBpcyBzdXBwb3J0ZWQuXFxcXG5cXFwiKTtcXG4gNDM2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Mzc6XFx0XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VkZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKVxcbiA0NDA6XFx0XFx0e1xcbiA0NDE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LFxcbiA0NDI6XFx0XFx0XFx0XFx0XFxcInByb2JlIGZhaWxzIC1cXHUwMDNlIHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4gNDQzOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFx0aW50Zl9kZXNjID0gaW50Zi1cXHUwMDNlY3VyX2FsdHNldHRpbmc7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmIChcXG4gNDQ4OlxcdFxcdFxcdFxcdCggaW50Zl9kZXNjLVxcdTAwM2VkZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAweGZmIClcXG4gNDQ5OlxcdFxcdFxcdHx8XFx0KCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDAgKVxcbiA0NTA6XFx0XFx0XFx0fHwgKCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZVByb3RvY29sICE9IDAgKVxcbiA0NTE6XFx0XFx0XFx0fHwgKCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYk51bUVuZHBvaW50cyAhPSA0KVxcbiA0NTI6XFx0XFx0KVxcbiA0NTM6XFx0XFx0e1xcbiA0NTQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwicHJvYmUgZmFpbHMgLVxcdTAwM2Ugd3JvbmcgSW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4gNDU1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0NTY6XFx0XFx0fVxcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBDaGVjayB0aGUgRW5kcG9pbnRzICovXFxuIDQ1OTpcXHRcXHRmb3IgKGk9MDsgaVxcdTAwM2M0OyBpKyspXFxuIDQ2MDpcXHRcXHR7XFxuIDQ2MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWVuZHBvaW50W2ldPS0xO1xcbiA0NjI6XFx0XFx0XFx0Zm9yIChqPTA7IGpcXHUwMDNjNDsgaisrKVxcbiA0NjM6XFx0XFx0XFx0e1xcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFxcdTAwMjZpbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcXG4gNDY1OlxcdFxcdFxcdFxcdHtcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcXG4gNDY3OlxcdFxcdFxcdFxcdFxcdGlmIChpPT0xKVxcbiA0Njg6XFx0XFx0XFx0XFx0XFx0e1xcbiA0Njk6XFx0XFx0XFx0XFx0XFx0XFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsO1xcbiA0NzA6XFx0XFx0XFx0XFx0XFx0fVxcbiA0NzE6XFx0XFx0XFx0XFx0fVxcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXFxuIDQ3NDpcXHRcXHRcXHR7XFxuIDQ3NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSBXcm9uZyBFbmRwb2ludHMuXFxcXG5cXFwiKTtcXG4gNDc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Nzc6XFx0XFx0XFx0fVxcbiA0Nzg6XFx0XFx0fVxcbiA0Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjIxLjU4Nzk5OTM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ5MjA2MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTURDODAwIFVTQiBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGBVU0JfTURDODAwYCBkcml2ZXIgaXMgc3VzY2VwdGlibGUgdG8gZnV6emluZyB2aWEgc3l6a2FsbGVyJ3MgVVNCIGdhZGdldCBlbXVsYXRpb24gd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGdvb2QgbmV3cyBpcywgaXQgc2VlbXMgbGlrZSBgVVNCX01EQzgwMGAgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQncyBleGNlbGxlbnQuIFN5emthbGxlciBsZXZlcmFnZXMgdGhlIFVTQiBSYXcgR2FkZ2V0IGFuZCBEdW1teSBIQ0QgdG8gZW11bGF0ZSB0aGVzZSBkZXZpY2VzLCBhbmQgdGFyZ2V0cyBkcml2ZXJzIHdpdGggcHJvYmVzLCBmdW5jdGlvbiBwb2ludGVycyAoZm9wcyksIGFuZCBzbyBvbiwgd2hpY2ggbWFrZXMgdGhpcyBhIHByaW1lIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBzeXprYWxsZXIgdXRpbGl6ZXMgcHJpbWl0aXZlcyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6X3VzYl9jb250cm9sX2lvYCB0byBpbnRlcmFjdCB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLCB3aGljaCBpcyBrZXkuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYG1kYzgwMF91c2JfcHJvYmVgLiBUaGUgcGF0Y2ggaXMgZm9jdXNlZCBvbiB0aGlzIGZ1bmN0aW9uIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIFByZXZpb3VzbHksIHRoZSBjb2RlIGNhbGxlZCBgdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpYCAqYmVmb3JlKiBpbml0aWFsaXppbmcgVVJCIHN0cnVjdHMgYW5kIHNldHRpbmcgdGhlIGBtZGM4MDAtXHUwMDNlZGV2YCBhbmQgYG1kYzgwMC1cdTAwM2VzdGF0ZWAgbWVtYmVycy4gVGhpcyBpcyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24uIElmLCBmb3IgaW5zdGFuY2UsIGBvcGVuYCwgYHJlYWRgLCBvciBgd3JpdGVgIHdlcmUgY2FsbGVkICpkdXJpbmcqIHRoaXMgdnVsbmVyYWJsZSBwZXJpb2QsIG9yIGlmIHRoZSByZWdpc3RyYXRpb24gaXRzZWxmIGZhaWxlZCwgdGhlIHN5c3RlbSBjb3VsZCBlbnRlciBhbiB1bmRlZmluZWQgc3RhdGUuIFRoZSBwYXRjaCdzIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBgdXNiX3JlZ2lzdGVyX2RldmAgY2FsbCB0byB0aGUgKmVuZCogb2YgYG1kYzgwMF91c2JfcHJvYmVgLCBhZnRlciBhbGwgdGhlIFVSQnMgYXJlIGluaXRpYWxpemVkIGFuZCB0aGUgbXV0ZXggaXMgdW5sb2NrZWQuIENydWNpYWxseSwgaXQgYWxzbyBoYW5kbGVzIHRoZSBlcnJvciBjYXNlIHdoZW4gYHVzYl9yZWdpc3Rlcl9kZXZgIGZhaWxzLCByZXNldHRpbmcgYG1kYzgwMC1cdTAwM2VkZXZgIGFuZCBgbWRjODAwLVx1MDAzZXN0YXRlYCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZC5cblxuVG8gZ2V0IGEgZnVsbCB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgZW50aXJlIGBtZGM4MDAuY2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyBhbGwgdGhlIHN5bWJvbHMsIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgZmlsZSBvcGVyYXRpb25zIChgZm9wc2ApIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJpdmVyLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OToyNi4xMzcyMDkxNDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdCAqIERpc2Nvbm5lY3QgVVNCIGRldmljZSAobWF5YmUgdGhlIE1EQzgwMClcXG4gNTQxOlxcdCAqL1xcbiA1NDI6XFx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gNTQzOlxcdHtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1kYzgwMCkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG4gNTUwOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0XFx0dXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsIFxcdTAwMjZtZGM4MDBfY2xhc3MpO1xcbiA1NTM6XFx0XFxuIDU1NDpcXHRcXHRcXHQvKiBtdXN0IGJlIHVuZGVyIGxvY2sgdG8gbWFrZSBzdXJlIG5vIFVSQlxcbiA1NTU6XFx0XFx0XFx0ICAgaXMgc3VibWl0dGVkIGFmdGVyIHVzYl9raWxsX3VyYigpICovXFxuIDU1NjpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1NTc6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1OT1RfQ09OTkVDVEVEO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNTYwOlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDU2MTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA1NjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1NjM6XFx0XFxuIDU2NDpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldiA9IE5VTEw7XFxuIDU2NTpcXHRcXHRcXHR1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpO1xcbiA1NjY6XFx0XFx0fVxcbiA1Njc6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmludGYtXFx1MDAzZWRldiwgXFxcIk11c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxcXFxuXFxcIik7XFxuIDU2ODpcXHR9XFxuIDU2OTpcXHRcXG4gNTcwOlxcdFxcbiA1NzE6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA1NzI6XFx0XFx0VGhlIE1pc2MgZGV2aWNlIFBhcnQgKGZpbGVfb3BlcmF0aW9ucylcXG4gNTczOlxcdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDU3NDpcXHRcXG4gNTc1OlxcdC8qXFxuIDU3NjpcXHQgKiBUaGlzIEZ1bmN0aW9uIGNhbGMgdGhlIEFuc3dlcnNpemUgZm9yIGEgY29tbWFuZC5cXG4gNTc3OlxcdCAqL1xcbiA1Nzg6XFx0c3RhdGljIGludCBtZGM4MDBfZ2V0QW5zd2VyU2l6ZSAoY2hhciBjb21tYW5kKVxcbiA1Nzk6XFx0e1xcbiA1ODA6XFx0XFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgY29tbWFuZClcXG4gNTgxOlxcdFxcdHtcXG4gNTgyOlxcdFxcdFxcdGNhc2UgMHgyYTpcXG4gNTgzOlxcdFxcdFxcdGNhc2UgMHg0OTpcXG4gNTg0OlxcdFxcdFxcdGNhc2UgMHg1MTpcXG4gNTg1OlxcdFxcdFxcdGNhc2UgMHgwZDpcXG4gNTg2OlxcdFxcdFxcdGNhc2UgMHgyMDpcXG4gNTg3OlxcdFxcdFxcdGNhc2UgMHgwNzpcXG4gNTg4OlxcdFxcdFxcdGNhc2UgMHgwMTpcXG4gNTg5OlxcdFxcdFxcdGNhc2UgMHgyNTpcXG4gNTkwOlxcdFxcdFxcdGNhc2UgMHgwMDpcXG4gNTkxOlxcdFxcdFxcdFxcdHJldHVybiA4O1xcbiA1OTI6XFx0XFxuIDU5MzpcXHRcXHRcXHRjYXNlIDB4MDU6XFxuIDU5NDpcXHRcXHRcXHRjYXNlIDB4M2U6XFxuIDU5NTpcXHRcXHRcXHRcXHRyZXR1cm4gbWRjODAwLVxcdTAwM2VwaWNfbGVuO1xcbiA1OTY6XFx0XFxuIDU5NzpcXHRcXHRcXHRjYXNlIDB4MDk6XFxuIDU5ODpcXHRcXHRcXHRcXHRyZXR1cm4gNDA5NjtcXG4gNTk5OlxcdFxcbiA2MDA6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gNjAxOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA2MDI6XFx0XFx0fVxcbiA2MDM6XFx0fVxcbiA2MDQ6XFx0XFxuIDYwNTpcXHRcXG4gNjA2OlxcdC8qXFxuIDYwNzpcXHQgKiBJbml0IHRoZSBkZXZpY2U6ICgxKSBhbGxvYyBtZW0gKDIpIEluY3JlYXNlIE1PRCBDb3VudCAuLlxcbiA2MDg6XFx0ICovXFxuIDYwOTpcXHRzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRpbnQgcmV0dmFsPTA7XFxuIDYxMjpcXHRcXHRpbnQgZXJybj0wO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2MTU6XFx0XFx0XFxuIDYxNjpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2MTc6XFx0XFx0e1xcbiA2MTg6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYxOTpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MjYuMTM3MzEwMDA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTA0ODcyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBVU0IgRHJpdmVyIGZvciB0aGUgTURDODAwIENhbWVyYSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoZSBgbWRjODAwLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy91c2IvaW1hZ2VgIGRpcmVjdG9yeS4gSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGluaXRpYWwgcGFydHMgb2YgdGhlIGZ1bmN0aW9uIEkgd2FzIGV4YW1pbmluZy4gQnV0LCBhcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcywgc3BlY2lmaWNhbGx5IFVTQiBkZXZpY2UgZHJpdmVycywgSSByZWFsbHkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY2FuIHRoZSByZXN0IG9mIHRoaXMgYG1kYzgwMC5jYCBmaWxlLiBJIG5lZWQgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSByb3V0aW5lcywgdW5kZXJzdGFuZCBkYXRhIGZsb3csIGFuZCBtYXliZSBldmVuIGdldCBhIHNlbnNlIG9mIGhvdyB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBlbmRwb2ludCBjb25maWd1cmF0aW9uLCBhbmQgaW1hZ2UgY2FwdHVyZSBwcm9jZXNzZXMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25uZWN0IHRoZSBkb3RzIHdpdGggdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3MgaW4gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjI4LjM4Nzc5OTk4OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYyMDpcXHRcXHR9XFxuIDYyMTpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VvcGVuKVxcbiA2MjI6XFx0XFx0e1xcbiA2MjM6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYyNDpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG4gNjI1OlxcdFxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA2Mjg6XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gNjI5OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA2MzA6XFx0XFx0bWRjODAwLVxcdTAwM2VwaWNfaW5kZXg9MDtcXG4gNjMxOlxcdFxcdG1kYzgwMC1cXHUwMDNlcGljX2xlbj0tMTtcXG4gNjMyOlxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9idXN5PTA7XFxuIDYzNTpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdG1kYzgwMC1cXHUwMDNlaXJxX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDYzODpcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2VpcnFfdXJiLCBHRlBfS0VSTkVMKTtcXG4gNjM5OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNjQwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsXFxuIDY0MTpcXHRcXHRcXHRcXHRcXFwicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXFxcblxcXCIsIHJldHZhbCk7XFxuIDY0MjpcXHRcXHRcXHRlcnJuID0gLUVJTztcXG4gNjQzOlxcdFxcdFxcdGdvdG8gZXJyb3Jfb3V0O1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MTtcXG4gNjQ3OlxcdFxcdGRldl9kYmcoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxcXG5cXFwiKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0ZXJyb3Jfb3V0OlxcbiA2NTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NTE6XFx0XFx0cmV0dXJuIGVycm47XFxuIDY1MjpcXHR9XFxuIDY1MzpcXHRcXG4gNjU0OlxcdFxcbiA2NTU6XFx0LypcXG4gNjU2OlxcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XFxuIDY1NzpcXHQgKi9cXG4gNjU4OlxcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGludCByZXR2YWw9MDtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjYzOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZW9wZW4gXFx1MDAyNlxcdTAwMjYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXFxuIDY2NDpcXHRcXHR7XFxuIDY2NTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNjY2OlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDY2NzpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA2Njg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvcGVuPTA7XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHR7XFxuIDY3MjpcXHRcXHRcXHRyZXR2YWw9LUVJTztcXG4gNjczOlxcdFxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NzY6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjc3OlxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFxuIDY4MDpcXHQvKlxcbiA2ODE6XFx0ICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uXFxuIDY4MjpcXHQgKi9cXG4gNjgzOlxcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0c2l6ZV90IGxlZnQ9bGVuLCBzdHM9bGVuOyAvKiBzaW5nbGUgdHJhbnNmZXIgc2l6ZSAqL1xcbiA2ODY6XFx0XFx0Y2hhciBfX3VzZXIgKnB0ciA9IGJ1ZjtcXG4gNjg3OlxcdFxcdGludCByZXR2YWw7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDY5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2OTE6XFx0XFx0e1xcbiA2OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjk0OlxcdFxcdH1cXG4gNjk1OlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlID09IFdPUktJTkcpXFxuIDY5NjpcXHRcXHR7XFxuIDY5NzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXFxcXFxcXCJ3b3JraW5nXFxcXFxcXCJcXFwiXFxuIDY5ODpcXHRcXHRcXHQgICAgICAgXFxcInJlYWNoZWQgZHVyaW5nIHJlYWQgPyFcXFxcblxcXCIpO1xcbiA2OTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzAxOlxcdFxcdH1cXG4gNzAyOlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuKVxcbiA3MDM6XFx0XFx0e1xcbiA3MDQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzA2OlxcdFxcdH1cXG4gNzA3OlxcdFxcbiA3MDg6XFx0XFx0d2hpbGUgKGxlZnQpXFxuIDcwOTpcXHRcXHR7XFxuIDcxMDpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcXG4gNzExOlxcdFxcdFxcdHtcXG4gNzEyOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzEzOlxcdFxcdFxcdFxcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xcbiA3MTQ6XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzdHM9bGVmdCBcXHUwMDNlIChtZGM4MDAtXFx1MDAzZW91dF9jb3VudC1tZGM4MDAtXFx1MDAzZW91dF9wdHIpP21kYzgwMC1cXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cXHUwMDNlb3V0X3B0cjpsZWZ0O1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoc3RzIFxcdTAwM2M9IDApXFxuIDcxOTpcXHRcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjI4LjM4NzkzMjA1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NzY1NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIERpZ2l0YWwgTGFuZHNjYXBlOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55IGRlZXAgYW5hbHlzaXMsIGxldCdzIGVzdGFibGlzaCBhIGNsZWFyIGJhc2VsaW5lLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgKkJlZm9yZSBJIGdldCB0b28gaW52b2x2ZWQgaW4gc3BlY2lmaWNzLCBpdCdzIHBydWRlbnQgdG8gY29uZHVjdCBhIHN3ZWVwIG9mIHRoZSBlbnRpcmUgZmlsZSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSwgc3RydWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZSBsYXJnZXIgY29udGV4dCBpcyBjcnVjaWFsIHRvIGNvbnRleHR1YWxpemluZyBkZXRhaWxzLiBUaGlzIGluaXRpYWwgcGFzcyB3aWxsIGluZm9ybSB3aGVyZSB0byBmb2N1cyBteSBhdHRlbnRpb24gZm9yIGEgbWVhbmluZ2Z1bCBicmVha2Rvd24gYW5kIGFzc2Vzc21lbnQsIGFuZCB3aGV0aGVyIHRvIHJlZmluZSBteSBhcHByb2FjaCB0byB0aGUgZGF0YS4gTm8gYXNzdW1wdGlvbnMsIGp1c3QgYSBtZXRob2RpY2FsIHNjb3BpbmcgZXhlcmNpc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozMC42MjY3MDAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdFxcdFxcdC8qIFRvbyBsZXNzIERhdGEgaW4gYnVmZmVyICovXFxuIDcyMTpcXHRcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBET1dOTE9BRClcXG4gNzIyOlxcdFxcdFxcdFxcdHtcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X2NvdW50PTA7XFxuIDcyNDpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZW91dF9wdHI9MDtcXG4gNzI1OlxcdFxcbiA3MjY6XFx0XFx0XFx0XFx0XFx0LyogRG93bmxvYWQgLVxcdTAwM2UgUmVxdWVzdCBuZXcgYnl0ZXMgKi9cXG4gNzI3OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLVxcdTAwM2VkZXYgPSBtZGM4MDAtXFx1MDAzZWRldjtcXG4gNzI4OlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYiwgR0ZQX0tFUk5FTCk7XFxuIDcyOTpcXHRcXHRcXHRcXHRcXHRpZiAocmV0dmFsKSB7XFxuIDczMDpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA3MzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgXFxcIlxcbiA3MzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIihyZXR2YWw9JWkpXFxcXG5cXFwiLCByZXR2YWwpO1xcbiA3MzM6XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MzQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGxlbi1sZWZ0O1xcbiA3MzU6XFx0XFx0XFx0XFx0XFx0fVxcbiA3MzY6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gd2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfd2FpdCxcXG4gNzM3OlxcdFxcdFxcdFxcdFxcdCAgICAgbWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkLFxcbiA3Mzg6XFx0XFx0XFx0XFx0XFx0ICAgICBtc2Vjc190b19qaWZmaWVzKFRPX0RPV05MT0FEX0dFVF9SRUFEWSkpO1xcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0aWYgKCFyZXR2YWwpXFxuIDc0MDpcXHRcXHRcXHRcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA3NDE6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZGVkID0gMDtcXG4gNzQyOlxcdFxcdFxcdFxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYi1cXHUwMDNlc3RhdHVzICE9IDApXFxuIDc0MzpcXHRcXHRcXHRcXHRcXHR7XFxuIDc0NDpcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA3NDU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcInJlcXVlc3QgZG93bmxvYWQtYnl0ZXMgZmFpbHMgXFxcIlxcbiA3NDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIihzdGF0dXM9JWkpXFxcXG5cXFwiLFxcbiA3NDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmItXFx1MDAzZXN0YXR1cyk7XFxuIDc0ODpcXHRcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc0OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbGVuLWxlZnQ7XFxuIDc1MDpcXHRcXHRcXHRcXHRcXHR9XFxuIDc1MTpcXHRcXHRcXHRcXHR9XFxuIDc1MjpcXHRcXHRcXHRcXHRlbHNlXFxuIDc1MzpcXHRcXHRcXHRcXHR7XFxuIDc1NDpcXHRcXHRcXHRcXHRcXHQvKiBObyBtb3JlIGJ5dGVzIC1cXHUwMDNlIHRoYXQncyBhbiBlcnJvciovXFxuIDc1NTpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc1NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNzU3OlxcdFxcdFxcdFxcdH1cXG4gNzU4OlxcdFxcdFxcdH1cXG4gNzU5OlxcdFxcdFxcdGVsc2VcXG4gNzYwOlxcdFxcdFxcdHtcXG4gNzYxOlxcdFxcdFxcdFxcdC8qIENvcHkgQnl0ZXMgKi9cXG4gNzYyOlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIocHRyLCBcXHUwMDI2bWRjODAwLVxcdTAwM2VvdXQgW21kYzgwMC1cXHUwMDNlb3V0X3B0cl0sXFxuIDc2MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHMpKSB7XFxuIDc2NDpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc2NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNzY2OlxcdFxcdFxcdFxcdH1cXG4gNzY3OlxcdFxcdFxcdFxcdHB0cis9c3RzO1xcbiA3Njg6XFx0XFx0XFx0XFx0bGVmdC09c3RzO1xcbiA3Njk6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfcHRyKz1zdHM7XFxuIDc3MDpcXHRcXHRcXHR9XFxuIDc3MTpcXHRcXHR9XFxuIDc3MjpcXHRcXG4gNzczOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzc0OlxcdFxcdHJldHVybiBsZW4tbGVmdDtcXG4gNzc1OlxcdH1cXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFxuIDc3ODpcXHQvKlxcbiA3Nzk6XFx0ICogVGhlIERldmljZSB3cml0ZSBjYWxsYmFjayBGdW5jdGlvblxcbiA3ODA6XFx0ICogSWYgYSA4Qnl0ZSBDb21tYW5kIGlzIHJlY2VpdmVkLCBpdCB3aWxsIGJlIHNlbmQgdG8gdGhlIGNhbWVyYS5cXG4gNzgxOlxcdCAqIEFmdGVyIHRoaXMgdGhlIGRyaXZlciBpbml0aWF0ZXMgdGhlIHJlcXVlc3QgZm9yIHRoZSBhbnN3ZXIgb3JcXG4gNzgyOlxcdCAqIGp1c3Qgd2FpdHMgdW50aWwgdGhlIGNhbWVyYSBiZWNvbWVzIHJlYWR5LlxcbiA3ODM6XFx0ICovXFxuIDc4NDpcXHRzdGF0aWMgc3NpemVfdCBtZGM4MDBfZGV2aWNlX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIDc4NTpcXHR7XFxuIDc4NjpcXHRcXHRzaXplX3QgaT0wO1xcbiA3ODc6XFx0XFx0aW50IHJldHZhbDtcXG4gNzg4OlxcdFxcbiA3ODk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzkwOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlICE9IFJFQURZKVxcbiA3OTE6XFx0XFx0e1xcbiA3OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzk0OlxcdFxcdH1cXG4gNzk1OlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuIClcXG4gNzk2OlxcdFxcdHtcXG4gNzk3OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDc5OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjMwLjYyNjgwNDIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njg5OTkxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNREM4MDAgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgQ09ORklHX1VTQl9NREM4MDBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCBgZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ2AsIGl0J3MgYSB0cmlzdGF0ZSBvcHRpb24gYW5kIGRlcGVuZHMgb24gdGhlIGBVU0JgIGFuZCBgVVNCX1NVUFBPUlRgIGNvbmZpZ3VyYXRpb25zLiBTbywgdGhpcyBkZXZpY2UgaXMgVVNCLWJhc2VkIGFuZCB1c2VzIHRoYXQgc3VwcG9ydCwgd2hpY2ggZ2l2ZXMgaXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGRyaXZlciByZWFjaGFibGUgYW5kIGZ1enotd29ydGh5PyBMZXQncyBjb25zdWx0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFNlY3Rpb24gMSBzdHJlc3NlcyByZWFjaGFiaWxpdHkgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGVtcGhhc2l6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cy4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpcywgaGlnaGxpZ2h0aW5nIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyBsaWtlIFVTQiBnYWRnZXQuIFNlY3Rpb24gNCB0aGVuIHBvaW50cyB0byB0YXJnZXRpbmcgc3BlY2lmaWMgbG9naWMgYW5kIGVudHJ5cG9pbnRzLlxuXG5UaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZWAsIHdoaWNoIGxvb2tzIGxpa2UgdGhlIGluaXRpYWwgcHJvYmUgZnVuY3Rpb24uIE90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBgbWRjODAwYCBkcml2ZXIgYXJlIGFsc28gaW1wb3J0YW50OiBgbWRjODAwX2RldmljZV9vcGVuYCwgYG1kYzgwMF9kZXZpY2VfcmVsZWFzZWAsIGBtZGM4MDBfZGV2aWNlX3JlYWRgLCBgbWRjODAwX2RldmljZV93cml0ZWAsIGFuZCBgbWRjODAwX3VzYl9kaXNjb25uZWN0YC4gU2luY2UgYG1kYzgwMF91c2JfcHJvYmVgIGlzIGRpcmVjdGx5IGFsdGVyZWQsIGl0J3MgZGVmaW5pdGVseSBhIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiBgbWRjODAwLmNgIHRvIGlkZW50aWZ5IGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IGl0cyBmZWF0dXJlcy4gVGhpcyBicm9hZGVyIHZpZXcgd2lsbCBnaXZlIG1lIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBwcmVzZW50IGluIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjM1LjQ5NTgwNjI4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4OTA3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9MTI0PXN0cnVjdCBtZGM4MDBfZGF0YVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMTcwLS8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjE3MTpzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG1kYzgwMF9lZCBbNF0gPVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMTUtLyogVGhlIFZhcmlhYmxlIHVzZWQgYnkgdGhlIGRyaXZlciAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIxNjpzdGF0aWMgc3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDA7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjE3LVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjIyLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjIyMzpzdGF0aWMgaW50IG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYSxzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmIpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTIzNS0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzoyMzY6c3RhdGljIGludCBtZGM4MDBfaXNCdXN5IChjaGFyKiBjaClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yMzcte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjUxLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI1MjpzdGF0aWMgaW50IG1kYzgwMF9pc1JlYWR5IChjaGFyICpjaClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0yNTMte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMjY4LSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjI2OTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2lycSAoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTI3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zMzItICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MzMzOnN0YXRpYyBpbnQgbWRjODAwX3VzYl93YWl0Rm9ySVJRIChpbnQgbW9kZSwgaW50IG1zZWMpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzM0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM2Mi0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzozNjM6c3RhdGljIHZvaWQgbWRjODAwX3VzYl93cml0ZV9ub3RpZnkgKHN0cnVjdCB1cmIgKnVyYilcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy0zNjQte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtMzgwLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjM4MTpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTM4Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy00MDgtXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDA5OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtZGM4MDBfdXNiX2RyaXZlcjtcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo0MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NDExOnN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBtZGM4MDBfY2xhc3MgPSB7XFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDEyLVxcdC5uYW1lID1cXHRcXHRcXFwibWRjODAwJWRcXFwiLFxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNDIwLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjQyMTpzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTQyMi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNTQxLSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjU0MjpzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTU0My17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01NzctICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NTc4OnN0YXRpYyBpbnQgbWRjODAwX2dldEFuc3dlclNpemUgKGNoYXIgY29tbWFuZClcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy01Nzkte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNjA4LSAqL1xcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjYwOTpzdGF0aWMgaW50IG1kYzgwMF9kZXZpY2Vfb3BlbiAoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtNjEwLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1Ny0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo2NTg6c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY1OS17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy02ODItICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6NjgzOnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTY4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy03ODMtICovXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6Nzg0OnN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2Vfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy03ODUte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTUwLS8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHMgPVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk1Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjItXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6OTYzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtZGM4MDBfdGFibGVbXSA9IHtcXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NjQtXFx0eyBVU0JfREVWSUNFKE1EQzgwMF9WRU5ET1JfSUQsIE1EQzgwMF9QUk9EVUNUX0lEKSB9LFxcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM9OTY4PU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbWRjODAwX3RhYmxlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTk3MS0gKi9cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYzo5NzI6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyID1cXG5kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYy05NzMte1xcbi0tXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg1LVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jOjk4NjpzdGF0aWMgaW50IF9faW5pdCB1c2JfbWRjODAwX2luaXQgKHZvaWQpXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMtOTg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNTgtXFxuZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmM6MTA1OTpzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX21kYzgwMF9jbGVhbnVwICh2b2lkKVxcbmRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jLTEwNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozNS41NDM3MDA0MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE5OTcxMjk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTURDODAwIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scy4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IFVTQiBhbmQgc3BlY2lmaWNhbGx5IGBVU0JfTURDODAwYCBhcmUgZW5hYmxlZCwgdGhhdCdzIGNydWNpYWwuIFRoZW4sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3ltYm9scyBhcmUgcHJlc2VudDogYG1kYzgwMF91c2JfcHJvYmVgLCBgbWRjODAwX2RldmljZV9vcGVuYCwgYG1kYzgwMF9kZXZpY2VfcmVhZGAsIGBtZGM4MDBfZGV2aWNlX3dyaXRlYCwgYG1kYzgwMF9kZXZpY2VfcmVsZWFzZWAsIGFuZCBgbWRjODAwX3VzYl9kaXNjb25uZWN0YC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBNREM4MDAgZHJpdmVyIGZ1bmN0aW9uYWxpdHksIHNvIGl0J3MgZXNzZW50aWFsIHRob3NlIGFyZSBhbGwgYXZhaWxhYmxlLlxuXG5UaGUgcmVhc29uIHRoaXMgaXMgd29ydGggZnV6emluZyBpcyBjbGVhci4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24sIHdoaWNoIGluaXRpYWxpemVzIHRoZSBNdXN0ZWsgTURDODAwIFVTQiBkaWdpdGFsIGNhbWVyYSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UsIHNoaWZ0aW5nIHRoZSBgdXNiX3JlZ2lzdGVyX2RldigpYCBjYWxsIGFmdGVyIHRoZSBVUkIgc2V0dXAuIFRoaXMgaXMgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gbW92ZSDigJMgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIGFuZCBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBvbiBmYWlsdXJlLlxuXG5BbmQgdGhlIGJlc3QgcGFydCBpcywgdGhpcyBkcml2ZXIgaXMgcmVhY2hhYmxlIHRocm91Z2ggVVNCIGRldmljZSBlbXVsYXRpb24sIG1lYW5pbmcgSSBjYW4gdXNlIHRvb2xzIGxpa2UgcmF3IGdhZGdldCBvciB0aGUgRHVtbXkgSENEIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciB0byByZWFjaCB0aGlzIGRyaXZlciBhbmQgdGVzdCBpdCBlZmZlY3RpdmVseS5cblxuUmlnaHQsIHNvIHdpdGggdGhvc2UgY29uZmlybWVkLCBJJ20gcmVhZHkuIFRpbWUgdG8gdHJpZ2dlciB0aGUgZnV6emluZyBhbmFseXNpcyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY1LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS43NDM0Mjc3MjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NTQxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQlwiLFxuICAgIFwiVVNCX01EQzgwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kYzgwMF91c2JfcHJvYmVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfb3BlblwiLFxuICAgIFwibWRjODAwX2RldmljZV9yZWFkXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3dyaXRlXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlbGVhc2VcIixcbiAgICBcIm1kYzgwMF91c2JfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQlwiLFxuICAgIFwiVVNCX01EQzgwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1kYzgwMF91c2JfcHJvYmVcIixcbiAgICBcIm1kYzgwMF9kZXZpY2Vfb3BlblwiLFxuICAgIFwibWRjODAwX2RldmljZV9yZWFkXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3dyaXRlXCIsXG4gICAgXCJtZGM4MDBfZGV2aWNlX3JlbGVhc2VcIixcbiAgICBcIm1kYzgwMF91c2JfZGlzY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHNlcXVlbmNlIGluIG1kYzgwMF91c2JfcHJvYmUgaW4gdGhlIE11c3RlayBNREM4MDAgVVNCIGRyaXZlciwgbW92aW5nIHVzYl9yZWdpc3Rlcl9kZXYgYWZ0ZXIgVVJCIHNldHVwIGFuZCBhZGRpbmcgcHJvcGVyIGZhaWx1cmUgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGdhZGdldCBlbXVsYXRpb24gKER1bW15IEhDRCAvIFJhdyBHYWRnZXQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS45MTYyOTExNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDgyOTkzNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6MzkuOTE2ODkwNzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzYwODIzODkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZGM4MDBfdXNiX3Byb2JlKClgIGluIGBkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY2AgYnkgbW92aW5nIGB1c2JfcmVnaXN0ZXJfZGV2KClgIHRvIGFmdGVyIHRoZSBVUkIgc3RydWN0dXJlcyBhbmQgc3RhdGUgZmllbGRzIGFyZSBmdWxseSBjb25maWd1cmVkIGFuZCBgaW9fbG9ja2AgaXMgcmVsZWFzZWQsIHdpdGggcHJvcGVyIGNsZWFudXAgKGBkZXYgPSBOVUxMYCwgYHN0YXRlID0gTk9UX0NPTk5FQ1RFRGApIG9uIGVycm9yLlxcblxcblRoaXMgaXMgYSBwcm9iZSBvcmRlcmluZyAvIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZpeCB0aGF0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIGJ1Z3MgaW4gZGV2aWNlIHJlZ2lzdHJhdGlvbiwgbG9ja2luZywgb3IgY29uY3VycmVuY3kgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiZmJmYTY5YWZjN2YzNWEyZDY4NzY1YzE3Y2VmNzExNWEwNTQ4M2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIwOjU4OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xuaW5kZXggY2EyODdiNzcwZThjYi4uMDE5MzE0NzAyZTI2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXG4rKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1xuQEAgLTQ4MiwxMyArNDgyLDYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuIFxuLVx0cmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCBcdTAwMjZtZGM4MDBfY2xhc3MpO1xuLVx0aWYgKHJldHZhbCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmludGYtXHUwMDNlZGV2LCBcIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cXG5cIik7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuLVx0fVxuLVxuIFx0bWRjODAwLVx1MDAzZWRldj1kZXY7XG4gXHRtZGM4MDAtXHUwMDNlb3Blbj0wO1xuIFxuQEAgLTUyNyw2ICs1MjAsMTYgQEAgc3RhdGljIGludCBtZGM4MDBfdXNiX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbiBcdG1kYzgwMC1cdTAwM2VzdGF0ZT1SRUFEWTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXG4rXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFx1MDAyNm1kYzgwMF9jbGFzcyk7XG4rXHRpZiAocmV0dmFsKSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2aW50Zi1cdTAwM2VkZXYsIFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcblwiKTtcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZtZGM4MDAtXHUwMDNlaW9fbG9jayk7XG4rXHRcdG1kYzgwMC1cdTAwM2VkZXYgPSBOVUxMO1xuK1x0XHRtZGM4MDAtXHUwMDNlc3RhdGUgPSBOT1RfQ09OTkVDVEVEO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWRjODAwLVx1MDAzZWlvX2xvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbiBcdFxuIFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTozOS45MTY4OTE4NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExMzMzMzY5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgTmVlZCBmb3IgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGFuZCBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgcHJvY2VzcyBhbHdheXMgc3RhcnRzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgY29kZSBjaGFuZ2UgaXRzZWxmLiBGaXJzdCwgSSdsbCBkaXZlIGludG8gdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgc291cmNlIHVzaW5nIHRoZSBzdGFuZGFyZCB0b29scyBJJ3ZlIGdvdCBhdCBteSBkaXNwb3NhbCDigJMgbGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkLlxuXG5Gcm9tIGEgcmlzayBhbmFseXNpcyBwZXJzcGVjdGl2ZSwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSByZWFsbSBvZiBiZW5pZ24ga2VybmVsIG1haW50ZW5hbmNlIG9yIGRlZmVuc2l2ZSBRQS4gVGhlIHJlcXVlc3QgaXMgc3RyYWlnaHRmb3J3YXJkOiBkZXRlcm1pbmUgaWYgYSBzYW5pdGl6ZXIg4oCTIEtNU0FOIGluIHRoaXMgY2FzZSDigJMgaXMgd2FycmFudGVkIGZvciB0aGlzIHNwZWNpZmljIGNoYW5nZS4gTXkgYWN0aW9uIGlzIHRvIGZ1bGZpbGwgdGhpcyByZXF1ZXN0IGRpcmVjdGx5IGFuZCBwcm92aWRlIGEgaGVscGZ1bCwgZXhwZXJ0IGV2YWx1YXRpb24uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgY29kZSB3aXRoaW4gYGRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jYC4gTGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1MS4wNTAyMzI2ODVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHR7XFxuIDQ2MTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWVuZHBvaW50W2ldPS0xO1xcbiA0NjI6XFx0XFx0XFx0Zm9yIChqPTA7IGpcXHUwMDNjNDsgaisrKVxcbiA0NjM6XFx0XFx0XFx0e1xcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKFxcdTAwMjZpbnRmX2Rlc2MtXFx1MDAzZWVuZHBvaW50IFtqXS5kZXNjLFxcdTAwMjZtZGM4MDBfZWQgW2ldKSlcXG4gNDY1OlxcdFxcdFxcdFxcdHtcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09aW50Zl9kZXNjLVxcdTAwM2VlbmRwb2ludCBbal0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzIDtcXG4gNDY3OlxcdFxcdFxcdFxcdFxcdGlmIChpPT0xKVxcbiA0Njg6XFx0XFx0XFx0XFx0XFx0e1xcbiA0Njk6XFx0XFx0XFx0XFx0XFx0XFx0aXJxX2ludGVydmFsPWludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MuYkludGVydmFsO1xcbiA0NzA6XFx0XFx0XFx0XFx0XFx0fVxcbiA0NzE6XFx0XFx0XFx0XFx0fVxcbiA0NzI6XFx0XFx0XFx0fVxcbiA0NzM6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV0gPT0gLTEpXFxuIDQ3NDpcXHRcXHRcXHR7XFxuIDQ3NTpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSBXcm9uZyBFbmRwb2ludHMuXFxcXG5cXFwiKTtcXG4gNDc2OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0Nzc6XFx0XFx0XFx0fVxcbiA0Nzg6XFx0XFx0fVxcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdGRldl9pbmZvKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi5cXFxcblxcXCIpO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRtZGM4MDAtXFx1MDAzZWRldj1kZXY7XFxuIDQ4NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MDtcXG4gNDg3OlxcdFxcbiA0ODg6XFx0XFx0LyogU2V0dXAgVVJCIFN0cnVjdHMgKi9cXG4gNDg5OlxcdFxcdHVzYl9maWxsX2ludF91cmIgKFxcbiA0OTA6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VpcnFfdXJiLFxcbiA0OTE6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYsXFxuIDQ5MjpcXHRcXHRcXHR1c2JfcmN2aW50cGlwZSAobWRjODAwLVxcdTAwM2VkZXYsbWRjODAwLVxcdTAwM2VlbmRwb2ludCBbMV0pLFxcbiA0OTM6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VpcnFfdXJiX2J1ZmZlcixcXG4gNDk0OlxcdFxcdFxcdDgsXFxuIDQ5NTpcXHRcXHRcXHRtZGM4MDBfdXNiX2lycSxcXG4gNDk2OlxcdFxcdFxcdG1kYzgwMCxcXG4gNDk3OlxcdFxcdFxcdGlycV9pbnRlcnZhbFxcbiA0OTg6XFx0XFx0KTtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0dXNiX2ZpbGxfYnVsa191cmIgKFxcbiA1MDE6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2V3cml0ZV91cmIsXFxuIDUwMjpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRldixcXG4gNTAzOlxcdFxcdFxcdHVzYl9zbmRidWxrcGlwZSAobWRjODAwLVxcdTAwM2VkZXYsIG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbMF0pLFxcbiA1MDQ6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2V3cml0ZV91cmJfYnVmZmVyLFxcbiA1MDU6XFx0XFx0XFx0OCxcXG4gNTA2OlxcdFxcdFxcdG1kYzgwMF91c2Jfd3JpdGVfbm90aWZ5LFxcbiA1MDc6XFx0XFx0XFx0bWRjODAwXFxuIDUwODpcXHRcXHQpO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHR1c2JfZmlsbF9idWxrX3VyYiAoXFxuIDUxMTpcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYixcXG4gNTEyOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZGV2LFxcbiA1MTM6XFx0XFx0XFx0dXNiX3JjdmJ1bGtwaXBlIChtZGM4MDAtXFx1MDAzZWRldiwgbWRjODAwLVxcdTAwM2VlbmRwb2ludCBbM10pLFxcbiA1MTQ6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmJfYnVmZmVyLFxcbiA1MTU6XFx0XFx0XFx0NjQsXFxuIDUxNjpcXHRcXHRcXHRtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSxcXG4gNTE3OlxcdFxcdFxcdG1kYzgwMFxcbiA1MTg6XFx0XFx0KTtcXG4gNTE5OlxcdFxcbiA1MjA6XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1SRUFEWTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1MjM6XFx0XFxuIDUyNDpcXHRcXHRyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsIFxcdTAwMjZtZGM4MDBfY2xhc3MpO1xcbiA1MjU6XFx0XFx0aWYgKHJldHZhbCkge1xcbiA1MjY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxcXFxuXFxcIik7XFxuIDUyNzpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA1Mjg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VkZXYgPSBOVUxMO1xcbiA1Mjk6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZSA9IE5PVF9DT05ORUNURUQ7XFxuIDUzMDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTMyOlxcdFxcdH1cXG4gNTMzOlxcdFxcdFxcbiA1MzQ6XFx0XFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApO1xcbiA1MzU6XFx0XFx0cmV0dXJuIDA7XFxuIDUzNjpcXHR9XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0LypcXG4gNTQwOlxcdCAqIERpc2Nvbm5lY3QgVVNCIGRldmljZSAobWF5YmUgdGhlIE1EQzgwMClcXG4gNTQxOlxcdCAqL1xcbiA1NDI6XFx0c3RhdGljIHZvaWQgbWRjODAwX3VzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gNTQzOlxcdHtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTtcXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0ZGV2X2RiZyhcXHUwMDI2aW50Zi1cXHUwMDNlZGV2LCBcXFwiKCVzKSBjYWxsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0aWYgKG1kYzgwMCkge1xcbiA1NDk6XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6NTEuMDUwMzU4NDY1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjU3MDg4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYG1kYzgwMC5jYCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBwb2tpbmcgYXJvdW5kIGluIHRoaXMgYG1kYzgwMC5jYCBkcml2ZXIsIGFuZCBJIHRoaW5rIGl0J3MgdGltZSB0byBnZXQgYSBtb3JlIGhvbGlzdGljIHZpZXcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgd2hvbGUgdGhpbmcsIGZyb20gdG9wIHRvIGJvdHRvbS4gU2ltcGx5IHB1dCwgSSBuZWVkIHRvIHNlZSBtb3JlIG9mIHRoZSBjb2RlIHRvIHJlYWxseSBncmFzcCB3aGF0IHRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIGRvLiBHb3R0YSBleGFtaW5lIHRoZSBjb21wbGV0ZSBzb3VyY2UgZmlsZS4gV2l0aG91dCBjb250ZXh0LCBpdCdzIGp1c3QgYSBidW5jaCBvZiBsaW5lcy4gTGV0J3MgZ2V0IHRvIHRoZSByZXN0IG9mIGBtZGM4MDAuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZnVsbCBwaWN0dXJlIGlzLiBJJ20gcmVhZHkgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTIwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Mi44MTYwNzEwNzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkZWQgPSAxO1xcbiA0MDE6XFx0XFx0d2FrZV91cCAoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZG93bmxvYWRfd2FpdCk7XFxuIDQwMjpcXHR9XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcbiA0MDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiA0MDY6XFx0XFx0UHJvYmluZyBmb3IgdGhlIENhbWVyYVxcbiA0MDc6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gNDA4OlxcdFxcbiA0MDk6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyO1xcbiA0MTA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7XFxuIDQxMTpcXHRzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0ge1xcbiA0MTI6XFx0XFx0Lm5hbWUgPVxcdFxcdFxcXCJtZGM4MDAlZFxcXCIsXFxuIDQxMzpcXHRcXHQuZm9wcyA9XFx0XFx0XFx1MDAyNm1kYzgwMF9kZXZpY2Vfb3BzLFxcbiA0MTQ6XFx0XFx0Lm1pbm9yX2Jhc2UgPVxcdE1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSxcXG4gNDE1OlxcdH07XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcbiA0MTg6XFx0LypcXG4gNDE5OlxcdCAqIENhbGxiYWNrIHRvIHNlYXJjaCB0aGUgTXVzdGVrIE1EQzgwMCBvbiB0aGUgVVNCIEJ1c1xcbiA0MjA6XFx0ICovXFxuIDQyMTpcXHRzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbiA0MjI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4gNDIzOlxcdHtcXG4gNDI0OlxcdFxcdGludCBpLGo7XFxuIDQyNTpcXHRcXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7XFxuIDQyNjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7XFxuIDQyNzpcXHRcXHRpbnQgaXJxX2ludGVydmFsPTA7XFxuIDQyODpcXHRcXHRpbnQgcmV0dmFsO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRkZXZfZGJnKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCIoJXMpIGNhbGxlZC5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VkZXYgIT0gTlVMTClcXG4gNDM0OlxcdFxcdHtcXG4gNDM1OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC5cXFxcblxcXCIpO1xcbiA0MzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQzNzpcXHRcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdGlmIChkZXYtXFx1MDAzZWRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpXFxuIDQ0MDpcXHRcXHR7XFxuIDQ0MTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsXFxuIDQ0MjpcXHRcXHRcXHRcXHRcXFwicHJvYmUgZmFpbHMgLVxcdTAwM2Ugd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbiA0NDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ0NDpcXHRcXHR9XFxuIDQ0NTpcXHRcXHRpbnRmX2Rlc2MgPSBpbnRmLVxcdTAwM2VjdXJfYWx0c2V0dGluZztcXG4gNDQ2OlxcdFxcbiA0NDc6XFx0XFx0aWYgKFxcbiA0NDg6XFx0XFx0XFx0XFx0KCBpbnRmX2Rlc2MtXFx1MDAzZWRlc2MuYkludGVyZmFjZUNsYXNzICE9IDB4ZmYgKVxcbiA0NDk6XFx0XFx0XFx0fHxcXHQoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCApXFxuIDQ1MDpcXHRcXHRcXHR8fCAoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gMCApXFxuIDQ1MTpcXHRcXHRcXHR8fCAoIGludGZfZGVzYy1cXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzICE9IDQpXFxuIDQ1MjpcXHRcXHQpXFxuIDQ1MzpcXHRcXHR7XFxuIDQ1NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZpbnRmLVxcdTAwM2VkZXYsIFxcXCJwcm9iZSBmYWlscyAtXFx1MDAzZSB3cm9uZyBJbnRlcmZhY2VcXFxcblxcXCIpO1xcbiA0NTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ1NjpcXHRcXHR9XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdC8qIENoZWNrIHRoZSBFbmRwb2ludHMgKi9cXG4gNDU5OlxcdFxcdGZvciAoaT0wOyBpXFx1MDAzYzQ7IGkrKylcXG4gNDYwOlxcdFxcdHtcXG4gNDYxOlxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZW5kcG9pbnRbaV09LTE7XFxuIDQ2MjpcXHRcXHRcXHRmb3IgKGo9MDsgalxcdTAwM2M0OyBqKyspXFxuIDQ2MzpcXHRcXHRcXHR7XFxuIDQ2NDpcXHRcXHRcXHRcXHRpZiAobWRjODAwX2VuZHBvaW50X2VxdWFscyAoXFx1MDAyNmludGZfZGVzYy1cXHUwMDNlZW5kcG9pbnQgW2pdLmRlc2MsXFx1MDAyNm1kYzgwMF9lZCBbaV0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Mi44MTYyMTU4NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyOTIyODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6XG5cbioqUGVlcmluZyBpbnRvIG1kYzgwMC5jKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBgbWRjODAwLmNgIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoYXQgZ2xvYmFsIGBtZGM4MDBgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBpdCdzIGRlZmluZWQgYW5kLCBqdXN0IGFzIGltcG9ydGFudGx5LCBob3cgaXQncyBiZWluZyAqdXNlZCogdGhyb3VnaG91dCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gVGhhdCBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byB1bnBhY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBhbmQgZnVuY3Rpb24uIEkgaGF2ZSBhIGh1bmNoIGl0IHdpbGwgZ2l2ZSBtZSB2YWx1YWJsZSBpbnNpZ2h0IGluIGZpZ3VyaW5nIG91dCBob3cgaXQgb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjU2LjQ0NTQ0ODAzM1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdFxcbiAgIDc6XFx0LypcXG4gICA4OlxcdCAqXFx0VVNCLUtlcm5lbCBEcml2ZXIgZm9yIHRoZSBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxuICAgOTpcXHQgKlxcdChjKSAxOTk5LzIwMDAgSGVubmluZyBaYWJlbCBcXHUwMDNjaGVubmluZ0B1bmktcGFkZXJib3JuLmRlXFx1MDAzZVxcbiAgMTA6XFx0ICpcXG4gIDExOlxcdCAqXFxuICAxMjpcXHQgKiBUaGUgZHJpdmVyIGJyaW5ncyB0aGUgVVNCIGZ1bmN0aW9ucyBvZiB0aGUgTURDODAwIHRvIExpbnV4LlxcbiAgMTM6XFx0ICogVG8gdXNlIHRoZSBDYW1lcmEgeW91IG11c3Qgc3VwcG9ydCB0aGUgVVNCIFByb3RvY29sIG9mIHRoZSBjYW1lcmFcXG4gIDE0OlxcdCAqIHRvIHRoZSBLZXJuZWwgTm9kZS5cXG4gIDE1OlxcdCAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDpcXG4gIDE2OlxcdCAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyXFxuICAxNzpcXHQgKlxcbiAgMTg6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuXFxuICAxOTpcXHQgKiBcXG4gIDIwOlxcdCAqIEZpeDogbWRjODAwIHVzZWQgc2xlZXBfb24gYW5kIHNsZXB0IHdpdGggaW9fbG9jayBoZWxkLlxcbiAgMjE6XFx0ICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2tcXG4gIDIyOlxcdCAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay5cXG4gIDIzOlxcdCAqIGJ5IE9saXZlciBOZXVrdW0gXFx1MDAzY29saXZlckBuZXVrdW0ubmFtZVxcdTAwM2VcXG4gIDI0OlxcdCAqICgwMi8xMi8yMDAxKVxcbiAgMjU6XFx0ICogXFxuICAyNjpcXHQgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLlxcbiAgMjc6XFx0ICogKDA4LzA0LzIwMDEpIGdiXFxuICAyODpcXHQgKlxcbiAgMjk6XFx0ICogdmVyc2lvbiAwLjcuNVxcbiAgMzA6XFx0ICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy5cXG4gIDMxOlxcdCAqIFRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIFxcdTAwM2NvbGl2ZXJAbmV1a3VtLm5hbWVcXHUwMDNlIHdobyBcXG4gIDMyOlxcdCAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy5cXG4gIDMzOlxcdCAqICgzMC8xMC8yMDAwKVxcbiAgMzQ6XFx0ICpcXG4gIDM1OlxcdCAqIEZpeGVkOiBTZXR0aW5nIHVyYi1cXHUwMDNlZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi5cXG4gIDM2OlxcdCAqIGJ5IEdyZWcgS0ggXFx1MDAzY2dyZWdAa3JvYWguY29tXFx1MDAzZVxcbiAgMzc6XFx0ICogKDEzLzEwLzIwMDApXFxuICAzODpcXHQgKlxcbiAgMzk6XFx0ICogdmVyc2lvbiAwLjcuM1xcbiAgNDA6XFx0ICogYnVnZml4IDogVGhlIG1kYzgwMC1cXHUwMDNlc3RhdGUgZmllbGQgZ2V0cyBzZXQgdG8gUkVBRFkgYWZ0ZXIgdGhlXFxuICA0MTpcXHQgKiBkaXNjb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGVcXG4gIDQyOlxcdCAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lXFxuICA0MzpcXHQgKiBoYW5nIHVwcy5cXG4gIDQ0OlxcdCAqXFxuICA0NTpcXHQgKiB2ZXJzaW9uIDAuNy4xXFxuICA0NjpcXHQgKiBNT0RfSU5DIGFuZCBNT0RfREVDIGFyZSBjaGFuZ2VkIGluIHVzYl9wcm9iZSB0byBwcmV2ZW50IGxvYWQvdW5sb2FkXFxuICA0NzpcXHQgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS5cXG4gIDQ4OlxcdCAqICgwNC8wNC8yMDAwKVxcbiAgNDk6XFx0ICpcXG4gIDUwOlxcdCAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvblxcbiAgNTE6XFx0ICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy5cXG4gIDUyOlxcdCAqICgyNi8wMy8yMDAwKVxcbiAgNTM6XFx0ICpcXG4gIDU0OlxcdCAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC5cXG4gIDU1OlxcdCAqICgwMS8wMy8yMDAwKVxcbiAgNTY6XFx0ICpcXG4gIDU3OlxcdCAqIHZlcnNpb24gMC43LjBcXG4gIDU4OlxcdCAqIFJld3JpdGUgb2YgdGhlIGRyaXZlciA6IFRoZSBkcml2ZXIgbm93IHVzZXMgVVJCJ3MuIFRoZSBvbGQgc3R1ZmZcXG4gIDU5OlxcdCAqIGhhcyBiZWVuIHJlbW92ZWQuXFxuICA2MDpcXHQgKlxcbiAgNjE6XFx0ICogdmVyc2lvbiAwLjYuMFxcbiAgNjI6XFx0ICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsXFxuICA2MzpcXHQgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRyaXZlci4gQSBzcGVjaWFsIGV4ZWN1dGVDb21tYW5kIGZ1bmN0aW9uXFxuICA2NDpcXHQgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLlxcbiAgNjU6XFx0ICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLlxcbiAgNjY6XFx0ICogRWl0aGVyIHdpdGggdGhlIGRldi1cXHUwMDNlYnVzLVxcdTAwM2VvcHMtXFx1MDAzZWJ1bGsuLi4gb3Igd2l0aCBjYWxsYmFjayBmdW5jdGlvbi5cXG4gIDY3OlxcdCAqICgwOS8xMS8xOTk5KVxcbiAgNjg6XFx0ICpcXG4gIDY5OlxcdCAqIHZlcnNpb24gMC41LjA6XFxuICA3MDpcXHQgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWRcXG4gIDcxOlxcdCAqIGZ1bmN0aW9ucyB3b3JrLlxcbiAgNzI6XFx0ICogKDIwLzEwLzE5OTkpXFxuICA3MzpcXHQgKi9cXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAgNzY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpZ25hbC5oXFx1MDAzZVxcbiAgNzc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICA3ODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDc5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4gIDgwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICA4MTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgODI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gIDgzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDg0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICA4NTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDg2OlxcdFxcbiAgODc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzYi5oXFx1MDAzZVxcbiAgODg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICA4OTpcXHRcXG4gIDkwOlxcdC8qXFxuICA5MTpcXHQgKiBWZXJzaW9uIEluZm9ybWF0aW9uXFxuICA5MjpcXHQgKi9cXG4gIDkzOlxcdCNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gXFxcInYwLjcuNSAoMzAvMTAvMjAwMClcXFwiXFxuICA5NDpcXHQjZGVmaW5lIERSSVZFUl9BVVRIT1IgXFxcIkhlbm5pbmcgWmFiZWwgXFx1MDAzY2hlbm5pbmdAdW5pLXBhZGVyYm9ybi5kZVxcdTAwM2VcXFwiXFxuICA5NTpcXHQjZGVmaW5lIERSSVZFUl9ERVNDIFxcXCJVU0IgRHJpdmVyIGZvciBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhXFxcIlxcbiAgOTY6XFx0XFxuICA5NzpcXHQvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSW5mb3JtYXRpb24gKi9cXG4gIDk4OlxcdCNkZWZpbmUgTURDODAwX1ZFTkRPUl9JRCBcXHQweDA1NWZcXG4gIDk5OlxcdCNkZWZpbmUgTURDODAwX1BST0RVQ1RfSURcXHQweGE4MDBcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMDo1OTo1Ni40NDU1OTkzNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2MTkyOTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNvZGUgZXhwbG9yYXRpb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNREM4MDAgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcyBgbWRjODAwYCBkcml2ZXIuIEkndmUgZ290IGEgZ3Jhc3Agb2YgdGhlIGJhc2ljIGFyY2hpdGVjdHVyZSwgYnV0IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGltZSB0byBkaWcgaW50byBgbWRjODAwLmNgIGFuZCB0cmFjZSB0aGUgZW50aXJlIGxpZmVjeWNsZSBvZiB0aGUgVVNCIGRldmljZS4gSSdtIGZvY3VzaW5nIG9uIGtleSBmdW5jdGlvbnM6IEkgd2FudCB0byBzZWUgaG93IGBtZGM4MDBfdXNiX3Byb2JlYCBzZXRzIHRoaW5ncyB1cCBpbml0aWFsbHksIHJpZ2h0IGZyb20gdGhlIGRldmljZSBkZXRlY3Rpb24uIFRoZW4sIGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYG1kYzgwMF9pbml0YCwgd2hhdCdzIGluaXRpYWxpemVkIGFuZCBob3cuIE9mIGNvdXJzZSwgYG1kYzgwMF9leGl0YCBpcyBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdGVhcmRvd246IEknbSBjdXJpb3VzIGFib3V0IHRoZSBjbGVhbnVwIHByb2NlZHVyZXMgaXQgcGVyZm9ybXMgdG8gbWFpbnRhaW4gc3lzdGVtIGludGVncml0eS4gRmluYWxseSwgSSdsbCBleGFtaW5lIHRoZSBmaWxlIG9wZXJhdGlvbiBoYW5kbGVycyDigJMgdGhlIGBvcGVuYCwgYHJlYWRgLCBhbmQgYHdyaXRlYCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRoZXNlIHdpbGwgcmV2ZWFsIGhvdyBkYXRhIGlzIHRyYW5zZmVycmVkIHRvIGFuZCBmcm9tIHRoZSBkZXZpY2UgYW5kIG1hcCB0aGUgZHJpdmVyJ3MgaW50ZXJmYWNlIHRvIHRoZSB1c2VyIHNwYWNlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgbG9naWMgYW5kIHdoZXJlIEkgbWlnaHQgZW5jb3VudGVyIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBlZGdlLWNhc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjA6NTk6NTkuNzA3NTMxOTU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdC8qIFRpbWVvdXRzIChtc2VjKSAqL1xcbiAxMDI6XFx0I2RlZmluZSBUT19ET1dOTE9BRF9HRVRfUkVBRFlcXHRcXHQxNTAwXFxuIDEwMzpcXHQjZGVmaW5lIFRPX0RPV05MT0FEX0dFVF9CVVNZXFx0XFx0MTUwMFxcbiAxMDQ6XFx0I2RlZmluZSBUT19XUklURV9HRVRfUkVBRFlcXHRcXHQxMDAwXFxuIDEwNTpcXHQjZGVmaW5lIFRPX0RFRkFVTFRfQ09NTUFORFxcdFxcdDUwMDBcXG4gMTA2OlxcdCNkZWZpbmUgVE9fUkVBRF9GUk9NX0lSUSBcXHRcXHRUT19ERUZBVUxUX0NPTU1BTkRcXG4gMTA3OlxcdCNkZWZpbmUgVE9fR0VUX1JFQURZXFx0XFx0XFx0VE9fREVGQVVMVF9DT01NQU5EXFxuIDEwODpcXHRcXG4gMTA5OlxcdC8qIE1pbm9yIE51bWJlciBvZiB0aGUgZGV2aWNlIChjcmVhdGUgd2l0aCBta25vZCAvZGV2L211c3RlayBjIDE4MCAzMikgKi9cXG4gMTEwOlxcdCNkZWZpbmUgTURDODAwX0RFVklDRV9NSU5PUl9CQVNFIDMyXFxuIDExMTpcXHRcXG4gMTEyOlxcdFxcbiAxMTM6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuIDExNDpcXHRcXHREYXRhIGFuZCBzdHJ1Y3RzXFxuIDExNTpcXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcbiAxMTg6XFx0dHlwZWRlZiBlbnVtIHtcXG4gMTE5OlxcdFxcdE5PVF9DT05ORUNURUQsIFJFQURZLCBXT1JLSU5HLCBET1dOTE9BRFxcbiAxMjA6XFx0fSBtZGM4MDBfc3RhdGU7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcbiAxMjM6XFx0LyogRGF0YSBmb3IgdGhlIGRyaXZlciAqL1xcbiAxMjQ6XFx0c3RydWN0IG1kYzgwMF9kYXRhXFxuIDEyNTpcXHR7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqXFx0ZGV2O1xcdFxcdFxcdC8vIERldmljZSBEYXRhXFxuIDEyNzpcXHRcXHRtZGM4MDBfc3RhdGUgXFx0XFx0c3RhdGU7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGVuZHBvaW50IFs0XTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0c3RydWN0IHVyYiAqXFx0XFx0aXJxX3VyYjtcXG4gMTMyOlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0aXJxX3dhaXQ7XFxuIDEzMzpcXHRcXHRpbnRcXHRcXHRcXHRpcnFfd29rZW47XFxuIDEzNDpcXHRcXHRjaGFyKlxcdFxcdFxcdGlycV91cmJfYnVmZmVyO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRpbnRcXHRcXHRcXHRjYW1lcmFfYnVzeTsgICAgICAgICAgLy8gaXMgY2FtZXJhIGJ1c3kgP1xcbiAxMzc6XFx0XFx0aW50IFxcdFxcdFxcdGNhbWVyYV9yZXF1ZXN0X3JlYWR5OyAvLyBTdGF0dXMgdG8gc3luY2hyb25pemUgd2l0aCBpcnFcXG4gMTM4OlxcdFxcdGNoYXIgXFx0XFx0XFx0Y2FtZXJhX3Jlc3BvbnNlIFs4XTsgIC8vIGxhc3QgQnl0ZXMgc2VuZCBhZnRlciBidXN5XFxuIDEzOTpcXHRcXG4gMTQwOlxcdFxcdHN0cnVjdCB1cmIgKiAgIFxcdFxcdHdyaXRlX3VyYjtcXG4gMTQxOlxcdFxcdGNoYXIqXFx0XFx0XFx0d3JpdGVfdXJiX2J1ZmZlcjtcXG4gMTQyOlxcdFxcdHdhaXRfcXVldWVfaGVhZF90XFx0d3JpdGVfd2FpdDtcXG4gMTQzOlxcdFxcdGludFxcdFxcdFxcdHdyaXR0ZW47XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0c3RydWN0IHVyYiAqICAgXFx0XFx0ZG93bmxvYWRfdXJiO1xcbiAxNDc6XFx0XFx0Y2hhcipcXHRcXHRcXHRkb3dubG9hZF91cmJfYnVmZmVyO1xcbiAxNDg6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3RcXHRkb3dubG9hZF93YWl0O1xcbiAxNDk6XFx0XFx0aW50XFx0XFx0XFx0ZG93bmxvYWRlZDtcXG4gMTUwOlxcdFxcdGludFxcdFxcdFxcdGRvd25sb2FkX2xlZnQ7XFx0XFx0Ly8gQnl0ZXMgbGVmdCB0byBkb3dubG9hZCA/XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0LyogRGV2aWNlIERhdGEgKi9cXG4gMTU0OlxcdFxcdGNoYXJcXHRcXHRcXHRvdXQgWzY0XTtcXHQvLyBBbnN3ZXIgQnVmZmVyXFxuIDE1NTpcXHRcXHRpbnQgXFx0XFx0XFx0b3V0X3B0cjtcXHQvLyBJbmRleCB0byB0aGUgZmlyc3Qgbm90IHJlYWRlbiBieXRlXFxuIDE1NjpcXHRcXHRpbnRcXHRcXHRcXHRvdXRfY291bnQ7XFx0Ly8gQnl0ZXMgaW4gdGhlIGJ1ZmZlclxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRpbnRcXHRcXHRcXHRvcGVuO1xcdFxcdC8vIENhbWVyYSBkZXZpY2Ugb3BlbiA/XFxuIDE1OTpcXHRcXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRpb19sb2NrO1xcdC8vIElPIC1sb2NrXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdGNoYXIgXFx0XFx0XFx0aW4gWzhdO1xcdFxcdC8vIENvbW1hbmQgSW5wdXQgQnVmZmVyXFxuIDE2MjpcXHRcXHRpbnQgIFxcdFxcdFxcdGluX2NvdW50O1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRcXHRpbnRcXHRcXHRcXHRwaWNfaW5kZXg7XFx0Ly8gQ2FjaGUgZm9yIHRoZSBJbWFnZXNpemUgKC0xIGZvciBub3RoaW5nIGNhY2hlZCApXFxuIDE2NTpcXHRcXHRpbnRcXHRcXHRcXHRwaWNfbGVuO1xcbiAxNjY6XFx0XFx0aW50XFx0XFx0XFx0bWlub3I7XFxuIDE2NzpcXHR9O1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXG4gMTcwOlxcdC8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqL1xcbiAxNzE6XFx0c3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBtZGM4MDBfZWQgWzRdID1cXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdHsgXFxuIDE3NDpcXHRcXHRcXHQuYkxlbmd0aCA9IFxcdFxcdDAsXFxuIDE3NTpcXHRcXHRcXHQuYkRlc2NyaXB0b3JUeXBlID1cXHQwLFxcbiAxNzY6XFx0XFx0XFx0LmJFbmRwb2ludEFkZHJlc3MgPVxcdDB4MDEsXFxuIDE3NzpcXHRcXHRcXHQuYm1BdHRyaWJ1dGVzID0gXFx0MHgwMixcXG4gMTc4OlxcdFxcdFxcdC53TWF4UGFja2V0U2l6ZSA9XFx0Y3B1X3RvX2xlMTYoOCksXFxuIDE3OTpcXHRcXHRcXHQuYkludGVydmFsID0gXFx0XFx0MCxcXG4gMTgwOlxcdFxcdFxcdC5iUmVmcmVzaCA9IFxcdFxcdDAsXFxuIDE4MTpcXHRcXHRcXHQuYlN5bmNoQWRkcmVzcyA9IFxcdDAsXFxuIDE4MjpcXHRcXHR9LFxcbiAxODM6XFx0XFx0e1xcbiAxODQ6XFx0XFx0XFx0LmJMZW5ndGggPSBcXHRcXHQwLFxcbiAxODU6XFx0XFx0XFx0LmJEZXNjcmlwdG9yVHlwZSA9IFxcdDAsXFxuIDE4NjpcXHRcXHRcXHQuYkVuZHBvaW50QWRkcmVzcyA9IFxcdDB4ODIsXFxuIDE4NzpcXHRcXHRcXHQuYm1BdHRyaWJ1dGVzID0gXFx0MHgwMyxcXG4gMTg4OlxcdFxcdFxcdC53TWF4UGFja2V0U2l6ZSA9IFxcdGNwdV90b19sZTE2KDgpLFxcbiAxODk6XFx0XFx0XFx0LmJJbnRlcnZhbCA9IFxcdFxcdDAsXFxuIDE5MDpcXHRcXHRcXHQuYlJlZnJlc2ggPSBcXHRcXHQwLFxcbiAxOTE6XFx0XFx0XFx0LmJTeW5jaEFkZHJlc3MgPSBcXHQwLFxcbiAxOTI6XFx0XFx0fSxcXG4gMTkzOlxcdFxcdHtcXG4gMTk0OlxcdFxcdFxcdC5iTGVuZ3RoID0gXFx0XFx0MCxcXG4gMTk1OlxcdFxcdFxcdC5iRGVzY3JpcHRvclR5cGUgPSBcXHQwLFxcbiAxOTY6XFx0XFx0XFx0LmJFbmRwb2ludEFkZHJlc3MgPSBcXHQweDAzLFxcbiAxOTc6XFx0XFx0XFx0LmJtQXR0cmlidXRlcyA9IFxcdDB4MDIsXFxuIDE5ODpcXHRcXHRcXHQud01heFBhY2tldFNpemUgPSBcXHRjcHVfdG9fbGUxNig2NCksXFxuIDE5OTpcXHRcXHRcXHQuYkludGVydmFsID0gXFx0XFx0MCxcXG4gMjAwOlxcdFxcdFxcdC5iUmVmcmVzaCA9IFxcdFxcdDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIwOjU5OjU5LjcwNzY2MjQ0OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxNDA5NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1EQzgwMCBVU0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYG1kYzgwMGAgVVNCIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcHJvY2VkdXJlcy4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IGxpbmVzIDYwMCB0aHJvdWdoIDgwMCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGNvdmVyIHRoZSBtb2R1bGUncyBgaW5pdGAgYW5kIGBleGl0YCByb3V0aW5lcyDigJMgYWxsIHRoZSBjcml0aWNhbCBzZXR1cCBhbmQgY2xlYW51cCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgc3R1ZmY6IHJlc291cmNlIGFsbG9jYXRpb24sIHByb2JlIGFuZCBkaXNjb25uZWN0IHJlZ2lzdHJhdGlvbnMsIHBlcmhhcHMgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciB1bmJpbmRpbmcgZHVyaW5nIG1vZHVsZSByZW1vdmFsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IGhhbmRsZSBlcnJvciBjb25kaXRpb25zIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgaG93IGdyYWNlZnVsbHkgdGhleSBjbGVhbiB1cCByZXNvdXJjZXMgaW4gdGhlIGBleGl0YCBwYXRoLiBJJ20gaG9waW5nIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG92ZXJseSBjb252b2x1dGVkIG9yLCBHb2QgZm9yYmlkLCByZXNvdXJjZSBsZWFrcy4uLiB0aW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzOSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjE6MDA6MDIuMTY5MDc1MjM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDYwMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjAyOlxcdFxcdH1cXG4gNjAzOlxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFxuIDYwNjpcXHQvKlxcbiA2MDc6XFx0ICogSW5pdCB0aGUgZGV2aWNlOiAoMSkgYWxsb2MgbWVtICgyKSBJbmNyZWFzZSBNT0QgQ291bnQgLi5cXG4gNjA4OlxcdCAqL1xcbiA2MDk6XFx0c3RhdGljIGludCBtZGM4MDBfZGV2aWNlX29wZW4gKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA2MTA6XFx0e1xcbiA2MTE6XFx0XFx0aW50IHJldHZhbD0wO1xcbiA2MTI6XFx0XFx0aW50IGVycm49MDtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjE1OlxcdFxcdFxcbiA2MTY6XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gTk9UX0NPTk5FQ1RFRClcXG4gNjE3OlxcdFxcdHtcXG4gNjE4OlxcdFxcdFxcdGVycm49LUVCVVNZO1xcbiA2MTk6XFx0XFx0XFx0Z290byBlcnJvcl9vdXQ7XFxuIDYyMDpcXHRcXHR9XFxuIDYyMTpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VvcGVuKVxcbiA2MjI6XFx0XFx0e1xcbiA2MjM6XFx0XFx0XFx0ZXJybj0tRUJVU1k7XFxuIDYyNDpcXHRcXHRcXHRnb3RvIGVycm9yX291dDtcXG4gNjI1OlxcdFxcdH1cXG4gNjI2OlxcdFxcbiA2Mjc6XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA2Mjg6XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gNjI5OlxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA2MzA6XFx0XFx0bWRjODAwLVxcdTAwM2VwaWNfaW5kZXg9MDtcXG4gNjMxOlxcdFxcdG1kYzgwMC1cXHUwMDNlcGljX2xlbj0tMTtcXG4gNjMyOlxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD0wO1xcbiA2MzM6XFx0XFxuIDYzNDpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9idXN5PTA7XFxuIDYzNTpcXHRcXHRtZGM4MDAtXFx1MDAzZWNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdG1kYzgwMC1cXHUwMDNlaXJxX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDYzODpcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2VpcnFfdXJiLCBHRlBfS0VSTkVMKTtcXG4gNjM5OlxcdFxcdGlmIChyZXR2YWwpIHtcXG4gNjQwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsXFxuIDY0MTpcXHRcXHRcXHRcXHRcXFwicmVxdWVzdCBVU0IgaXJxIGZhaWxzIChzdWJtaXRfcmV0dmFsPSVpKS5cXFxcblxcXCIsIHJldHZhbCk7XFxuIDY0MjpcXHRcXHRcXHRlcnJuID0gLUVJTztcXG4gNjQzOlxcdFxcdFxcdGdvdG8gZXJyb3Jfb3V0O1xcbiA2NDQ6XFx0XFx0fVxcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRtZGM4MDAtXFx1MDAzZW9wZW49MTtcXG4gNjQ3OlxcdFxcdGRldl9kYmcoXFx1MDAyNm1kYzgwMC1cXHUwMDNlZGV2LVxcdTAwM2VkZXYsIFxcXCJNdXN0ZWsgTURDODAwIGRldmljZSBvcGVuZWQuXFxcXG5cXFwiKTtcXG4gNjQ4OlxcdFxcbiA2NDk6XFx0ZXJyb3Jfb3V0OlxcbiA2NTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NTE6XFx0XFx0cmV0dXJuIGVycm47XFxuIDY1MjpcXHR9XFxuIDY1MzpcXHRcXG4gNjU0OlxcdFxcbiA2NTU6XFx0LypcXG4gNjU2OlxcdCAqIENsb3NlIHRoZSBDYW1lcmEgYW5kIHJlbGVhc2UgTWVtb3J5XFxuIDY1NzpcXHQgKi9cXG4gNjU4OlxcdHN0YXRpYyBpbnQgbWRjODAwX2RldmljZV9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNjU5OlxcdHtcXG4gNjYwOlxcdFxcdGludCByZXR2YWw9MDtcXG4gNjYxOlxcdFxcbiA2NjI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNjYzOlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZW9wZW4gXFx1MDAyNlxcdTAwMjYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgIT0gTk9UX0NPTk5FQ1RFRCkpXFxuIDY2NDpcXHRcXHR7XFxuIDY2NTpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2VpcnFfdXJiKTtcXG4gNjY2OlxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDY2NzpcXHRcXHRcXHR1c2Jfa2lsbF91cmIobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIpO1xcbiA2Njg6XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvcGVuPTA7XFxuIDY2OTpcXHRcXHR9XFxuIDY3MDpcXHRcXHRlbHNlXFxuIDY3MTpcXHRcXHR7XFxuIDY3MjpcXHRcXHRcXHRyZXR2YWw9LUVJTztcXG4gNjczOlxcdFxcdH1cXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2NzY6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNjc3OlxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFxuIDY4MDpcXHQvKlxcbiA2ODE6XFx0ICogVGhlIERldmljZSByZWFkIGNhbGxiYWNrIEZ1bmN0aW9uXFxuIDY4MjpcXHQgKi9cXG4gNjgzOlxcdHN0YXRpYyBzc2l6ZV90IG1kYzgwMF9kZXZpY2VfcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA2ODQ6XFx0e1xcbiA2ODU6XFx0XFx0c2l6ZV90IGxlZnQ9bGVuLCBzdHM9bGVuOyAvKiBzaW5nbGUgdHJhbnNmZXIgc2l6ZSAqL1xcbiA2ODY6XFx0XFx0Y2hhciBfX3VzZXIgKnB0ciA9IGJ1ZjtcXG4gNjg3OlxcdFxcdGludCByZXR2YWw7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDY5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKVxcbiA2OTE6XFx0XFx0e1xcbiA2OTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNjk0OlxcdFxcdH1cXG4gNjk1OlxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZXN0YXRlID09IFdPUktJTkcpXFxuIDY5NjpcXHRcXHR7XFxuIDY5NzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXFxcXFxcXCJ3b3JraW5nXFxcXFxcXCJcXFwiXFxuIDY5ODpcXHRcXHRcXHQgICAgICAgXFxcInJlYWNoZWQgZHVyaW5nIHJlYWQgPyFcXFxcblxcXCIpO1xcbiA2OTk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowMi4xNjkyMzQzODRaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2NzUzNzY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgZnJvbSBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlbTpcblxuKipEaXNzZWN0aW5nIHRoZSBFbmRnYW1lIG9mIG1kYzgwMC5jKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBncmlwIG9uIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHRhaWwgZW5kIG9mIGBtZGM4MDAuY2AuIExldCdzIGFzc3VtZSBJJ3ZlIGFscmVhZHkgbmFpbGVkIGRvd24gdGhlIGJhc2ljcyBvZiB0aGlzIGRyaXZlciDigJMgZGV2aWNlIGVudW1lcmF0aW9uLCBlbmRwb2ludCBjb25maWd1cmF0aW9uLCB0aGUgdXN1YWwgVVNCIHNldHVwLiBOb3csIHdoYXQncyBpdCBkb2luZyBpbiB0aGUgZmluYWwgY2h1bms/IEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIHVzdWFsIGltYWdlIHRyYW5zZmVyIHByb2Nlc3MsIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBmaW5hbCBzdGFnZXMgb2YgYSBidWxrIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgbWF5YmUgc29tZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIHJlbGF0ZWQgdG8gdGhlIE1EQzgwMCdzIGltYWdlIGhhbmRsaW5nIHByb3RvY29sLCBvciByZXNvdXJjZSByZWxlYXNlLiBJdCdzIGxpa2VseSB0aGF0IGF0IHRoaXMgc2VjdGlvbiwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgVVNCIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiBUaGUgZnVuY3Rpb24gd291bGQgbGlrZWx5IGJlIHJlbGVhc2luZyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcywgY2xlYW5pbmcgdXAsIGFuZCBzaWduYWxpbmcgdGhlIHVzZXIgb3IgdGhlIGhpZ2hlci1sZXZlbCBpbWFnZSBtYW5hZ2VtZW50IGxheWVyIHRoYXQgdGhlIHRyYW5zZmVyIGlzIGRvbmUuIElmIHRoZSB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bCwgdGhpcyBtZWFucyBub3RpZnlpbmcgdGhlIHVzZXIgb2YgdGhlIGZpbmFsIGltYWdlLiBJZiBpdCB3YXNuJ3QsIHRoZSBmdW5jdGlvbiB3b3VsZCBuZWVkIHRvIHByb3ZpZGUgYW4gZXJyb3IsIG9yIHRoZSBtb3N0IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0cm91Ymxlc2hvb3RpbmcuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgcGVjdWxpYXIgZXJyb3IgY29kZXMgb3Igc3BlY2lmaWMgZXJyb3ItaGFuZGxpbmcgcm91dGluZXMgdGhhdCBzdGFuZCBvdXQgYXMgdGhpcyBkcml2ZXIncyBzcGVjaWFsdHkuIEZpbmFsbHksIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGNsZWFucyB1cCBhZnRlciBhIHRyYW5zZmVyIGlzIGNvbXBsZXRlZC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIHRvIHJlbGVhc2UsIGJ1ZmZlcnMgdG8gZnJlZSwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGludm9rZT8gVGhhdCdzIHdoYXQgSSdsbCBiZSBmb2N1c2VkIG9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjU2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowNC45MzY3NzQ2MDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzAxOlxcdFxcdH1cXG4gNzAyOlxcdFxcdGlmICghbWRjODAwLVxcdTAwM2VvcGVuKVxcbiA3MDM6XFx0XFx0e1xcbiA3MDQ6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3MDU6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gNzA2OlxcdFxcdH1cXG4gNzA3OlxcdFxcbiA3MDg6XFx0XFx0d2hpbGUgKGxlZnQpXFxuIDcwOTpcXHRcXHR7XFxuIDcxMDpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSBcXG4gNzExOlxcdFxcdFxcdHtcXG4gNzEyOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzEzOlxcdFxcdFxcdFxcdHJldHVybiBsZW4gPT0gbGVmdCA/IC1FSU5UUiA6IGxlbi1sZWZ0O1xcbiA3MTQ6XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHRcXHRzdHM9bGVmdCBcXHUwMDNlIChtZGM4MDAtXFx1MDAzZW91dF9jb3VudC1tZGM4MDAtXFx1MDAzZW91dF9wdHIpP21kYzgwMC1cXHUwMDNlb3V0X2NvdW50LW1kYzgwMC1cXHUwMDNlb3V0X3B0cjpsZWZ0O1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRcXHRpZiAoc3RzIFxcdTAwM2M9IDApXFxuIDcxOTpcXHRcXHRcXHR7XFxuIDcyMDpcXHRcXHRcXHRcXHQvKiBUb28gbGVzcyBEYXRhIGluIGJ1ZmZlciAqL1xcbiA3MjE6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gRE9XTkxPQUQpXFxuIDcyMjpcXHRcXHRcXHRcXHR7XFxuIDcyMzpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZW91dF9jb3VudD0wO1xcbiA3MjQ6XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfcHRyPTA7XFxuIDcyNTpcXHRcXG4gNzI2OlxcdFxcdFxcdFxcdFxcdC8qIERvd25sb2FkIC1cXHUwMDNlIFJlcXVlc3QgbmV3IGJ5dGVzICovXFxuIDcyNzpcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDcyODpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmIsIEdGUF9LRVJORUwpO1xcbiA3Mjk6XFx0XFx0XFx0XFx0XFx0aWYgKHJldHZhbCkge1xcbiA3MzA6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gNzMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJDYW4ndCBzdWJtaXQgZG93bmxvYWQgdXJiIFxcXCJcXG4gNzMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCIocmV0dmFsPSVpKVxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gNzMzOlxcdFxcdFxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzM0OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBsZW4tbGVmdDtcXG4gNzM1OlxcdFxcdFxcdFxcdFxcdH1cXG4gNzM2OlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXFx1MDAzZWRvd25sb2FkX3dhaXQsXFxuIDczNzpcXHRcXHRcXHRcXHRcXHQgICAgIG1kYzgwMC1cXHUwMDNlZG93bmxvYWRlZCxcXG4gNzM4OlxcdFxcdFxcdFxcdFxcdCAgICAgbXNlY3NfdG9famlmZmllcyhUT19ET1dOTE9BRF9HRVRfUkVBRFkpKTtcXG4gNzM5OlxcdFxcdFxcdFxcdFxcdGlmICghcmV0dmFsKVxcbiA3NDA6XFx0XFx0XFx0XFx0XFx0XFx0dXNiX2tpbGxfdXJiKG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiKTtcXG4gNzQxOlxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRlZCA9IDA7XFxuIDc0MjpcXHRcXHRcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2Vkb3dubG9hZF91cmItXFx1MDAzZXN0YXR1cyAhPSAwKVxcbiA3NDM6XFx0XFx0XFx0XFx0XFx0e1xcbiA3NDQ6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gNzQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIFxcXCJcXG4gNzQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCIoc3RhdHVzPSVpKVxcXFxuXFxcIixcXG4gNzQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiA3NDg6XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NDk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGxlbi1sZWZ0O1xcbiA3NTA6XFx0XFx0XFx0XFx0XFx0fVxcbiA3NTE6XFx0XFx0XFx0XFx0fVxcbiA3NTI6XFx0XFx0XFx0XFx0ZWxzZVxcbiA3NTM6XFx0XFx0XFx0XFx0e1xcbiA3NTQ6XFx0XFx0XFx0XFx0XFx0LyogTm8gbW9yZSBieXRlcyAtXFx1MDAzZSB0aGF0J3MgYW4gZXJyb3IqL1xcbiA3NTU6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDc1NzpcXHRcXHRcXHRcXHR9XFxuIDc1ODpcXHRcXHRcXHR9XFxuIDc1OTpcXHRcXHRcXHRlbHNlXFxuIDc2MDpcXHRcXHRcXHR7XFxuIDc2MTpcXHRcXHRcXHRcXHQvKiBDb3B5IEJ5dGVzICovXFxuIDc2MjpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKHB0ciwgXFx1MDAyNm1kYzgwMC1cXHUwMDNlb3V0IFttZGM4MDAtXFx1MDAzZW91dF9wdHJdLFxcbiA3NjM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RzKSkge1xcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA3NjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDc2NjpcXHRcXHRcXHRcXHR9XFxuIDc2NzpcXHRcXHRcXHRcXHRwdHIrPXN0cztcXG4gNzY4OlxcdFxcdFxcdFxcdGxlZnQtPXN0cztcXG4gNzY5OlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cis9c3RzO1xcbiA3NzA6XFx0XFx0XFx0fVxcbiA3NzE6XFx0XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc3NDpcXHRcXHRyZXR1cm4gbGVuLWxlZnQ7XFxuIDc3NTpcXHR9XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcbiA3Nzg6XFx0LypcXG4gNzc5OlxcdCAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb25cXG4gNzgwOlxcdCAqIElmIGEgOEJ5dGUgQ29tbWFuZCBpcyByZWNlaXZlZCwgaXQgd2lsbCBiZSBzZW5kIHRvIHRoZSBjYW1lcmEuXFxuIDc4MTpcXHQgKiBBZnRlciB0aGlzIHRoZSBkcml2ZXIgaW5pdGlhdGVzIHRoZSByZXF1ZXN0IGZvciB0aGUgYW5zd2VyIG9yXFxuIDc4MjpcXHQgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS5cXG4gNzgzOlxcdCAqL1xcbiA3ODQ6XFx0c3RhdGljIHNzaXplX3QgbWRjODAwX2RldmljZV93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiA3ODU6XFx0e1xcbiA3ODY6XFx0XFx0c2l6ZV90IGk9MDtcXG4gNzg3OlxcdFxcdGludCByZXR2YWw7XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc5MDpcXHRcXHRpZiAobWRjODAwLVxcdTAwM2VzdGF0ZSAhPSBSRUFEWSlcXG4gNzkxOlxcdFxcdHtcXG4gNzkyOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gNzkzOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDc5NDpcXHRcXHR9XFxuIDc5NTpcXHRcXHRpZiAoIW1kYzgwMC1cXHUwMDNlb3BlbiApXFxuIDc5NjpcXHRcXHR7XFxuIDc5NzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDc5ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA3OTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMTowMDowNC45MzczMjIxMDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMzMzMjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERhdGEgU3RyZWFtOiBCZXlvbmQgTGluZSA4MDAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gd29ya2luZyB3aXRoIHRoaXMgZmlsZSwgYW5kIEkndmUgZ290IGEgZGVjZW50IGdyYXNwIG9uIHRoZSBpbml0aWFsIHNlY3Rpb25zLCB0aGUgc3RydWN0dXJlIGFuZCBwcmVsaW1pbmFyeSByZXN1bHRzLiBIb3dldmVyLCB0byByZWFsbHkgZHJpbGwgZG93biBpbnRvIHNvbWUgc3BlY2lmaWMgYW5vbWFsaWVzIEkgc3VzcGVjdGVkLCBJIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBpbml0aWFsIGFuYWx5c2lzLiBNeSBjdXJyZW50IHByb2Nlc3Mgc3RvcHMgYXJvdW5kIGxpbmUgODAwLCB3aGljaCBoYXMgZ2l2ZW4gbWUgYW4gaW50ZXJlc3RpbmcgcHJvZmlsZSBhbmQgc29tZSBsZWFkcywgYnV0IG5vdyBpdCdzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRyZW5kcyBJ4oCZbSBwaWNraW5nIHVwIGluIHRoZSBmaXJzdCBwYXJ0IGhhdmUgYSBjb250aW51YXRpb24sIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBvciBhIGNvcnJlbGF0aW9uIHdpdGggZXZlbnRzIHRoYXQgbWF5IGhhcHBlbiBsYXRlciBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSwgYW5kIHRoZSByZW1haW5pbmcgZGF0YSBob2xkcyB0aGUga2V5IHRvIHRoZSBuZXh0IHN0ZXBzLiBMZXQncyBnZXQgdG8gdGhlIHJlbWFpbmluZyBkYXRhIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIxOjAwOjA3LjE1MDY1OTEwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdFxcdHdoaWxlIChpXFx1MDAzY2xlbilcXG4gODAyOlxcdFxcdHtcXG4gODAzOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgYztcXG4gODA0OlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIFxcbiA4MDU6XFx0XFx0XFx0e1xcbiA4MDY6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4MDc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gODA4OlxcdFxcdFxcdH1cXG4gODA5OlxcdFxcdFxcdFxcbiA4MTA6XFx0XFx0XFx0aWYoZ2V0X3VzZXIoYywgYnVmK2kpKVxcbiA4MTE6XFx0XFx0XFx0e1xcbiA4MTI6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4MTM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgxNDpcXHRcXHRcXHR9XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdFxcdC8qIGNoZWNrIGZvciBjb21tYW5kIHN0YXJ0ICovXFxuIDgxNzpcXHRcXHRcXHRpZiAoYyA9PSAweDU1KVxcbiA4MTg6XFx0XFx0XFx0e1xcbiA4MTk6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vpbl9jb3VudD0wO1xcbiA4MjA6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VvdXRfY291bnQ9MDtcXG4gODIxOlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlb3V0X3B0cj0wO1xcbiA4MjI6XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2Vkb3dubG9hZF9sZWZ0PTA7XFxuIDgyMzpcXHRcXHRcXHR9XFxuIDgyNDpcXHRcXG4gODI1OlxcdFxcdFxcdC8qIHNhdmUgY29tbWFuZCBieXRlICovXFxuIDgyNjpcXHRcXHRcXHRpZiAobWRjODAwLVxcdTAwM2Vpbl9jb3VudCBcXHUwMDNjIDgpXFxuIDgyNzpcXHRcXHRcXHR7XFxuIDgyODpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZWluW21kYzgwMC1cXHUwMDNlaW5fY291bnRdID0gYztcXG4gODI5OlxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlaW5fY291bnQrKztcXG4gODMwOlxcdFxcdFxcdH1cXG4gODMxOlxcdFxcdFxcdGVsc2VcXG4gODMyOlxcdFxcdFxcdHtcXG4gODMzOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRjODAwLVxcdTAwM2Vpb19sb2NrKTtcXG4gODM0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA4MzU6XFx0XFx0XFx0fVxcbiA4MzY6XFx0XFxuIDgzNzpcXHRcXHRcXHQvKiBDb21tYW5kIEJ1ZmZlciBmdWxsID8gLVxcdTAwM2Ugc2VuZCBpdCB0byBjYW1lcmEgKi9cXG4gODM4OlxcdFxcdFxcdGlmIChtZGM4MDAtXFx1MDAzZWluX2NvdW50ID09IDgpXFxuIDgzOTpcXHRcXHRcXHR7XFxuIDg0MDpcXHRcXHRcXHRcXHRpbnQgYW5zd2Vyc2l6ZTtcXG4gODQxOlxcdFxcbiA4NDI6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKVxcbiA4NDM6XFx0XFx0XFx0XFx0e1xcbiA4NDQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJDYW1lcmEgZGlkbid0IGdldCByZWFkeS5cXFxcblxcXCIpO1xcbiA4NDY6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4NDc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDg0ODpcXHRcXHRcXHRcXHR9XFxuIDg0OTpcXHRcXG4gODUwOlxcdFxcdFxcdFxcdGFuc3dlcnNpemU9bWRjODAwX2dldEFuc3dlclNpemUgKG1kYzgwMC1cXHUwMDNlaW5bMV0pO1xcbiA4NTE6XFx0XFxuIDg1MjpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVdPUktJTkc7XFxuIDg1MzpcXHRcXHRcXHRcXHRtZW1jcHkgKG1kYzgwMC1cXHUwMDNld3JpdGVfdXJiLVxcdTAwM2V0cmFuc2Zlcl9idWZmZXIsIG1kYzgwMC1cXHUwMDNlaW4sOCk7XFxuIDg1NDpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYi1cXHUwMDNlZGV2ID0gbWRjODAwLVxcdTAwM2VkZXY7XFxuIDg1NTpcXHRcXHRcXHRcXHRyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLVxcdTAwM2V3cml0ZV91cmIsIEdGUF9LRVJORUwpO1xcbiA4NTY6XFx0XFx0XFx0XFx0aWYgKHJldHZhbCkge1xcbiA4NTc6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2bWRjODAwLVxcdTAwM2VkZXYtXFx1MDAzZWRldixcXG4gODU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJzdWJtaXR0aW5nIHdyaXRlIHVyYiBmYWlscyBcXFwiXFxuIDg1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXFwiKHJldHZhbD0laSlcXFxcblxcXCIsIHJldHZhbCk7XFxuIDg2MDpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDg2MTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gODYyOlxcdFxcdFxcdFxcdH1cXG4gODYzOlxcdFxcdFxcdFxcdHdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtXFx1MDAzZXdyaXRlX3dhaXQsIG1kYzgwMC1cXHUwMDNld3JpdHRlbixcXG4gODY0OlxcdFxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoVE9fV1JJVEVfR0VUX1JFQURZKSk7XFxuIDg2NTpcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXdyaXR0ZW4gPSAwO1xcbiA4NjY6XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlc3RhdGUgPT0gV09SS0lORylcXG4gODY3OlxcdFxcdFxcdFxcdHtcXG4gODY4OlxcdFxcdFxcdFxcdFxcdHVzYl9raWxsX3VyYihtZGM4MDAtXFx1MDAzZXdyaXRlX3VyYik7XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kYzgwMC1cXHUwMDNlaW9fbG9jayk7XFxuIDg3MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gODcxOlxcdFxcdFxcdFxcdH1cXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0XFx0XFx0c3dpdGNoICgodW5zaWduZWQgY2hhcikgbWRjODAwLVxcdTAwM2VpblsxXSlcXG4gODc0OlxcdFxcdFxcdFxcdHtcXG4gODc1OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgwNTogLyogRG93bmxvYWQgSW1hZ2UgKi9cXG4gODc2OlxcdFxcdFxcdFxcdFxcdGNhc2UgMHgzZTogLyogVGFrZSBzaG90IGluIEZpbmUgTW9kZSAoV0NhbSBNb2RlKSAqL1xcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKG1kYzgwMC1cXHUwMDNlcGljX2xlbiBcXHUwMDNjIDApXFxuIDg3ODpcXHRcXHRcXHRcXHRcXHRcXHR7XFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWRldi1cXHUwMDNlZGV2LFxcbiA4ODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcImNhbGwgMHgwNyBiZWZvcmUgXFxcIlxcbiA4ODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcIjB4MDUsMHgzZVxcXFxuXFxcIik7XFxuIDg4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXN0YXRlPVJFQURZO1xcbiA4ODM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGM4MDAtXFx1MDAzZWlvX2xvY2spO1xcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDg4NTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuIDg4NjpcXHRcXHRcXHRcXHRcXHRcXHRtZGM4MDAtXFx1MDAzZXBpY19sZW49LTE7XFxuIDg4NzpcXHRcXHRcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gODg4OlxcdFxcbiA4ODk6XFx0XFx0XFx0XFx0XFx0Y2FzZSAweDA5OiAvKiBEb3dubG9hZCBUaHVtYm5haWwgKi9cXG4gODkwOlxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMC1cXHUwMDNlZG93bmxvYWRfbGVmdD1hbnN3ZXJzaXplKzY0O1xcbiA4OTE6XFx0XFx0XFx0XFx0XFx0XFx0bWRjODAwLVxcdTAwM2VzdGF0ZT1ET1dOTE9BRDtcXG4gODkyOlxcdFxcdFxcdFxcdFxcdFxcdG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19ET1dOTE9BRF9HRVRfQlVTWSk7XFxuIDg5MzpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4OTc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGFuc3dlcnNpemUpXFxuIDg5ODpcXHRcXHRcXHRcXHRcXHRcXHR7XFxuIDg5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjE6MDA6MDcuMTUwODMyMzc3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4NDg0MjUzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVVNCIERyaXZlciBQcm9iZSBQYXRjaCBhbmQgS01TQU4gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBgbWRjODAwX3VzYl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHJlZ2lzdGVyZWQgdGhlIFVTQiBkZXZpY2Ugd2l0aCBgdXNiX3JlZ2lzdGVyX2RldmAgKmJlZm9yZSogZnVsbHkgaW5pdGlhbGl6aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZSBhbmQgVVJCcywgY3JlYXRpbmcgYSB3aW5kb3cgZm9yIHVzZXJzcGFjZSBhY2Nlc3MgdG8gb2NjdXIgYmVmb3JlIHRoZSBkcml2ZXIgd2FzIHJlYWR5LiBUaGlzIGlzIGEgY2xhc3NpYyByYWNlLiBUaGUgcGF0Y2ggc21hcnRseSByZW9yZGVycyB0aGUgcmVnaXN0cmF0aW9uLCBtb3ZpbmcgaXQgdG8gKmFmdGVyKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZSBhbmQgdGhlIGBpb19sb2NrYCBoYXMgYmVlbiByZWxlYXNlZC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nLiBJZiBgdXNiX3JlZ2lzdGVyX2RldmAgZmFpbHMsIHRoZSBgbWRjODAwLVx1MDAzZWRldmAgcG9pbnRlciBpcyBzZXQgdG8gYE5VTExgIGFuZCB0aGUgYG1kYzgwMC1cdTAwM2VzdGF0ZWAgaXMgc2V0IHRvIGBOT1RfQ09OTkVDVEVEYCwgZW5zdXJpbmcgYSBjbGVhbiB0ZWFyZG93bi5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IGEgYE5lZWRzS01TQU4gPSB0cnVlYCBmbGFnPyBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOJ3MgcHVycG9zZSwgbm8sIGl0IGRvZXMgbm90LiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQncyBzb2xlbHkgYWJvdXQgc3luY2hyb25pemF0aW9uIGFuZCBwcmV2ZW50aW5nIGEgcmFjZSBjb25kaXRpb24uIFRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcGF0Y2ggcmVhcnJhbmdlcyAqd2hlbiogdGhlIGRyaXZlciBiZWNvbWVzIGFjY2Vzc2libGU7IGl0IGRvZXNuJ3QgY3JlYXRlIGFueSBuZXcgY29kZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgaXMgdXNlZC4gVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2Yga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG5cblRoZSBwYXRjaCdzIGNoYW5nZXMgZm9jdXMgb24gdGhlIGRldmljZSByZWdpc3RyYXRpb24gbGlmZWN5Y2xlLCBzcGVjaWZpY2FsbHkgb24gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gaGFuZGxlIHRoZSBkZXZpY2UncyBvcGVuL2Nsb3NlIGNhbGxzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgbG9jayB1c2FnZSwgb3IgZGV2aWNlIGxpZmVjeWNsZSBhcmUgd2VsbCB3aXRoaW4gdGhlIGRldGVjdGlvbiBjYXBhYmlsaXRpZXMgb2Ygc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gV2UncmUgYWxyZWFkeSBydW5uaW5nIHRob3NlIGNoZWNrcywgc28gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5UaGUgcmVhc29uaW5nIEknbGwgcHJvdmlkZSBpcyB0aGlzOiBUaGlzIHBhdGNoIHJlb3JnYW5pemVzIFVTQiBkZXZpY2UgcmVnaXN0cmF0aW9uIChgdXNiX3JlZ2lzdGVyX2RldigpYCkgaW4gYG1kYzgwMF91c2JfcHJvYmUoKWAgdG8gb2NjdXIgYWZ0ZXIgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgdGhlIGRldmljZSBzdGF0ZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIGBpb19sb2NrYCBpcyB1bmxvY2tlZC4gRXJyb3IgaGFuZGxpbmcgaXMgYWRkZWQgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwIGlmIHJlZ2lzdHJhdGlvbiBmYWlscy4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzIG5vdCogaW50cm9kdWNlIGFueSBuZXcgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLiBUaGUgcGF0Y2gncyBwcmltYXJ5IGZvY3VzIGlzIHJlc29sdmluZyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBkZXZpY2UgcHJvYmUuIFRoZXNlIGtpbmRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaXNzdWVzIGFyZSBiZXN0IGFkZHJlc3NlZCB1c2luZyBLQVNBTiBhbmQgTE9DS0RFUCBhbmQgdGhlIHN0YW5kYXJkIGRlYnVnIGZhY2lsaXRpZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1biBpcyB1bm5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNjEsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIxOjAwOjE1Ljk5OTI2MDM0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWRjODAwX3VzYl9wcm9iZSgpYCBpbiBgZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmNgIGJ5IG1vdmluZyBgdXNiX3JlZ2lzdGVyX2RldigpYCB0byBhZnRlciB0aGUgVVJCIHN0cnVjdHVyZXMgYW5kIHN0YXRlIGZpZWxkcyBhcmUgZnVsbHkgY29uZmlndXJlZCBhbmQgYGlvX2xvY2tgIGlzIHJlbGVhc2VkLCB3aXRoIHByb3BlciBjbGVhbnVwIChgZGV2ID0gTlVMTGAsIGBzdGF0ZSA9IE5PVF9DT05ORUNURURgKSBvbiBlcnJvci5cXG5cXG5UaGlzIGlzIGEgcHJvYmUgb3JkZXJpbmcgLyBkZXZpY2UgcmVnaXN0cmF0aW9uIGxpZmVjeWNsZSBmaXggdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCBidWdzIGluIGRldmljZSByZWdpc3RyYXRpb24sIGxvY2tpbmcsIG9yIGNvbmN1cnJlbmN5IGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[1] Phase: Succeeded StartedAt: 2026-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-04 21:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-04 21:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2] Phase: Succeeded StartedAt: 2026-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-04 21:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:28 +0000 UTC FinishedAt: 2026-09-04 21:00:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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-workflow7q6fq/series-workflow7q6fq-convert-artifact-2706866270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:38 +0000 UTC FinishedAt: 2026-09-04 21:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:38 +0000 UTC FinishedAt: 2026-09-04 21:20:51 +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:*66a9ea9d-7e44-42c2-8b97-55de364f4785,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-workflow7q6fq/series-workflow7q6fq-convert-artifact-2706866270/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": "b6572438-06af-4236-ae1d-4a50469dcea8", "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-workflow7q6fq/series-workflow7q6fq-build-action-1993580868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:00:38 +0000 UTC FinishedAt: 2026-09-04 21:20:20 +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:*66a9ea9d-7e44-42c2-8b97-55de364f4785,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-workflow7q6fq/series-workflow7q6fq-convert-artifact-2706866270/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": "b6572438-06af-4236-ae1d-4a50469dcea8", "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-workflow7q6fq/series-workflow7q6fq-build-action-1993580868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:20:51 +0000 UTC FinishedAt: 2026-09-04 21:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:20:51 +0000 UTC FinishedAt: 2026-09-04 21:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:20:51 +0000 UTC FinishedAt: 2026-09-04 21:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:20:51 +0000 UTC FinishedAt: 2026-09-04 21:20:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-workflow7q6fq/series-workflow7q6fq-convert-artifact-3277956369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:21:01 +0000 UTC FinishedAt: 2026-09-04 21:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:21:01 +0000 UTC FinishedAt: 2026-09-04 21:22:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6572438-06af-4236-ae1d-4a50469dcea8,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-workflow7q6fq/series-workflow7q6fq-build-action-1993580868/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-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:22:48 +0000 UTC FinishedAt: 2026-09-04 21:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:22:48 +0000 UTC FinishedAt: 2026-09-04 21:22:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:22:48 +0000 UTC FinishedAt: 2026-09-04 21:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:22:48 +0000 UTC FinishedAt: 2026-09-04 21:39:10 +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:*66a9ea9d-7e44-42c2-8b97-55de364f4785,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-workflow7q6fq/series-workflow7q6fq-convert-artifact-3277956369/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": "85f5c4ff-dd54-4662-8de0-0aa25460c43f", "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-workflow7q6fq/series-workflow7q6fq-build-action-2037945565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:22:48 +0000 UTC FinishedAt: 2026-09-04 21:39:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*66a9ea9d-7e44-42c2-8b97-55de364f4785,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-workflow7q6fq/series-workflow7q6fq-convert-artifact-3277956369/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": "85f5c4ff-dd54-4662-8de0-0aa25460c43f", "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-workflow7q6fq/series-workflow7q6fq-build-action-2037945565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:39:10 +0000 UTC FinishedAt: 2026-09-04 21:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:39:10 +0000 UTC FinishedAt: 2026-09-04 21:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:39:10 +0000 UTC FinishedAt: 2026-09-04 21:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:39:10 +0000 UTC FinishedAt: 2026-09-04 21:40:46 +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:*85f5c4ff-dd54-4662-8de0-0aa25460c43f,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-workflow7q6fq/series-workflow7q6fq-build-action-2037945565/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-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"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:*b6572438-06af-4236-ae1d-4a50469dcea8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*85f5c4ff-dd54-4662-8de0-0aa25460c43f,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-workflow7q6fq/series-workflow7q6fq-build-action-1993580868/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-workflow7q6fq/series-workflow7q6fq-build-action-2037945565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-04 21:41:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-04 21:41:00 +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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"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-workflow7q6fq/series-workflow7q6fq-convert-artifact-2325218118/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-04 21:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-04 21:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:40:56 +0000 UTC FinishedAt: 2026-09-04 21:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:41:06 +0000 UTC FinishedAt: 2026-09-05 00:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6fq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"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":["mdc800_usb_probe","mdc800_device_open","mdc800_device_read","mdc800_device_write","mdc800_device_release","mdc800_usb_disconnect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB","USB_MDC800"],"series_id":"c5d1cca9-64ec-4eba-bfc7-c34a103127be","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-09-04 21:41:06 +0000 UTC FinishedAt: 2026-09-05 00:47:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6572438-06af-4236-ae1d-4a50469dcea8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*85f5c4ff-dd54-4662-8de0-0aa25460c43f,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-workflow7q6fq/series-workflow7q6fq-build-action-1993580868/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-workflow7q6fq/series-workflow7q6fq-build-action-2037945565/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-workflow7q6fq/series-workflow7q6fq-convert-artifact-2325218118/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,}