Name: series-workflowrsdbz Phase: Succeeded StartedAt: 2026-08-23 08:55:31 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[0] Phase: Succeeded StartedAt: 2026-08-23 08:55:31 +0000 UTC FinishedAt: 2026-08-23 09:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 08:55:31 +0000 UTC FinishedAt: 2026-08-23 09:40:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "TLS_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "TLS_DEVICE" ], "series_id": "3daa018e-5982-4d7d-baaa-a5076f7a28e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_device_sendmsg", "tls_device_splice_eof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX2RldmljZV9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Rsc19kZXZpY2Vfc3BsaWNlX2VvZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5YjQwNTQzNzg1OTFmYzhiMmM1MjA2ODU0NDMxNzFiYjk1NjZkM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jXG5pbmRleCAzN2JiMDZhOGU4ZjViLi5mMTFkMDUyOGZjNDMxIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jXG5AQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoIXNpemUpIHtcbiBsYXN0X3JlY29yZDpcbiBcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbi1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB7XG4mIzQzO1x0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XG4gXHRcdFx0XHRtb3JlID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWI0MDU0Mzc4NTkxZmM4YjJjNTIwNjg1NDQzMTcxYmI5NTY2ZDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDk6Mzg6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jCmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jCkBAIC01MzEsNyAmIzQzOzUzMSw4IEBAIHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmICghc2l6ZSkgewogbGFzdF9yZWNvcmQ6CiAJCQl0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFnczsKLQkJCWlmIChmbGFncyAmYW1wOyBNU0dfTU9SRSkgewomIzQzOwkJCWlmICgoZmxhZ3MgJmFtcDsgTVNHX01PUkUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcmVjb3JkLSZndDtudW1fZnJhZ3MgJmx0OyBNQVhfU0tCX0ZSQUdTIC0gMSkgewogCQkJCW1vcmUgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgbmV0L3Rscy90bHNfZGV2aWNlLmNgLiBGcm9tIHdoYXQgSSBzZWUsIGl04oCZcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgdGxzX3B1c2hfZGF0YWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGBNU0dfTU9SRWAgZmxhZyBpbiByZWxhdGlvbiB0byBmcmFnbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYCBiZWZvcmUgc2V0dGluZyBgbW9yZSA9IHRydWVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyB0aGV5JiMzOTtyZSBlc3NlbnRpYWxseSBsaW1pdGluZyBob3cgbXVjaCB0aGUgZGF0YSBjYW4gYmUgZnJhZ21lbnRlZCB3aGVuIGBNU0dfTU9SRWAgaXMgYWxzbyBzZXQuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgVExTIHN1YnN5c3RlbSDigJMgdGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBub3cgaW4gaG93IGl0IGhhbmRsZXMgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gZGlnIGludG8gYHRsc19wdXNoX2RhdGFgIGl0c2VsZiB3aXRoaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJlZCB0aGlzLCBhbmQgZW5zdXJlIGl0IHdvbiYjMzk7dCBpbXBhY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3B1c2hfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIyLVx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU4My1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcdHJjID0gdGxzX3B1c2hfZGF0YShzaywgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXHUwMDNlbXNnX2ZsYWdzLFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTg1LVx0XHRcdCAgIHJlY29yZF90eXBlKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz01OTM9dm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NjA5Olx0XHR0bHNfcHVzaF9kYXRhKHNrLCBcdTAwMjZpdGVyLCAwLCAwLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MTAtXHR9XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9Njc2PXN0YXRpYyBpbnQgdGxzX2RldmljZV9wdXNoX3BlbmRpbmdfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTY4MC1cdGlvdl9pdGVyX2t2ZWMoXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NjgxOlx0cmV0dXJuIHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGUgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uIGlzIGNlbnRyYWwgaGVyZS4gSSBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGB0bHNfZGV2aWNlX3NlbmRtc2dgLCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYCwgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRob3NlIHBvaW50cywgcGFydGljdWxhcmx5IHdoZW4gc3BsaWNpbmcgaXMgaW52b2x2ZWQsIEkga25vdyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIFRMUyByZWNvcmQgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbi4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtZXNzZXMgd2l0aCByZWNvcmQgZnJhZ21lbnRhdGlvbiB3aGVuIGBNU0dfTU9SRWAgaXMgaW4gcGxheS4gVGhlIHN1YnRsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGZyYWdtZW50YXRpb24gYW5kIHRoZSBzb2NrZXQgZmxhZyBoYXMgY2F1c2VkIHNlcmlvdXMgaXNzdWVzIGluIHRoZSBwYXN0LCBpbmNsdWRpbmcgc2V2ZXJhbCB2dWxuZXJhYmlsaXRpZXMuCgpHaXZlbiB0aGF0IGNvbnRleHQsIG15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgZnJhZ21lbnRhdGlvbiwgYE1TR19NT1JFYCwgYW5kIHRoZSB2YXJpb3VzIGNhbGwgcG9pbnRzIG9mIGB0bHNfcHVzaF9kYXRhYCBpcyBhIHByaW1lIHRhcmdldCBmb3IgYnVmZmVyIG92ZXJmbG93cywgaW50ZWdlciBvdmVyZmxvd3MsIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCBpcyBsaWtlbHkgdGhhdCBuZXcgYXR0YWNrIHN1cmZhY2VzIGFyZSBiZWluZyBjcmVhdGVkIGhlcmUuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgaW52b2x2aW5nIG1hbGljaW91c2x5IGNyYWZ0ZWQgcmVjb3JkcyB3aXRoIGNhcmVmdWxseSBtYW5pcHVsYXRlZCBzaXplcyBhbmQgZmxhZ3MuCgpTbywgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBXZSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBXaGF0IFRMUyB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQ/IFdoYXQgY2lwaGVyIHN1aXRlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmZpZ3VyZWQ/IFdoYXQmIzM5O3MgdGhlIE1UVT8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgc29ja2V0IGJ1ZmZlciBzaXplcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudmlyb25tZW50IHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWducy4gTGV0JiMzOTtzIGZpbmQgdGhhdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRXhhbWluaW5nIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGZsYWdnZWQgYXMgdXNpbmcgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG5ldC90bHMvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgYFRMU19ERVZJQ0VgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmxhZyBpcyBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHdpdGhpbiB0aGUgVExTIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBvZmZlcnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFRMU1xuICAyMjpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgMjM6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMjQ6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVExTIERldmljZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIG9wZXJhdGlvbnMuIEkgaW5pdGlhbGx5IHRob3VnaHQgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgIHdlcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYHRsc19wdXNoX2RhdGFgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgdGxzX2RldmljZV9zZW5kbXNnYCwgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBIbW0sIHdhaXQuIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGlzIGFsc28gc3RhdGljISBGaW5lLCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGB0bHNfZGV2aWNlX3NlbmRtc2dgIGFuZCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgYWN0aW9ucyBhcmUgbGlrZWx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX2RldmljZV9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBncmFjZWZ1bCBlbmQtb2YtZmlsZSBjb25kaXRpb24gd2l0aGluIGEgVExTIGNvbm5lY3Rpb24sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGEgc3BsaWNlIG1lY2hhbmlzbSBmb3IgZGF0YSB0cmFuc2Zlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucz8gQW0gSSBzZWVpbmcgaG93IHRoZSBUTFMgbGF5ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IG9yIGZpbGUgZGVzY3JpcHRvcj8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSBpbiB0aGlzIHNwZWNpZmljIHBhdGg/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIEVPRiBpcyBzaWduYWxlZCBmcm9tIHRoZSBsb3dlciBsYXllcnMgdXAuIElzIGl0IGEgc2ltcGxlIGByZWFkYCByZXR1cm5pbmcgMCwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIG51YW5jZWQgVExTLXNwZWNpZmljIHNpZ25hbGluZyBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHNwbGljZSBvcGVyYXRpb24gaGFuZGxlcyB0aGUgY2xvc2luZyBzZXF1ZW5jZSBjb3JyZWN0bHkgKGUuZy4sIHNlbmRpbmcgVExTIGNsb3NlIGFsZXJ0cywgY2xlYW5pbmcgdXAgcmVzb3VyY2VzKS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIFRMUyBjb25uZWN0aW9uIHRlYXJkb3duLiBXaGF0IGFyZSB0aGUga2V5IHBvaW50cyB0byBhc3Nlc3MgaW4gdGhpcyBmdW5jdGlvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU5Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NlbmRwYWdlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHRsc19kZXZpY2Vfc2VuZHBhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBUTFMgaW1wbGVtZW50YXRpb24/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGlzIGRlc2lnbj8gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHBlcmZvcm0gYXBwcm9wcmlhdGUgaW5wdXQgdmFsaWRhdGlvbj8gTWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSB0byBwcm9iZSBoZXJlLCBzbyBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCBpbnB1dC4gV2hhdCBraW5kIG9mIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGl0IHVzaW5nPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIERNQT8gVGhlIHVuZGVybHlpbmcgY3J5cHRvIHByaW1pdGl2ZXMgYWxzbyBjb21lIGludG8gcGxheTsgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBpdCB0byBtYWtlIHN1cmUgdGhleSBhcmUgdXNlZCBzYWZlbHksIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgc2lkZS1jaGFubmVsIGxlYWtzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGludGVyYWN0aW9ucyB3aXRoIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrLiBGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBjb3JyZWN0bHkgYW5kLCBpZiBzbywgaG93PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBhdHRhY2sgdmVjdG9ycywgYW5kIHRoZW4gZ28gaW4gZGVwdGggZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfZGV2aWNlX3NlbmRwYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0bHNfZGV2aWNlX3NlbmRtc2cqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0bHNfZGV2aWNlX3NlbmRtc2dgIHdpdGhpbiBgbmV0L3Rscy90bHNfZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFzIHRoZXkgc2F5LCBmb3IgYWN0dWFsIGRhdGEgdHJhbnNtaXNzaW9uLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IFRMUy1lbmNyeXB0ZWQgZGF0YSBpcyBiZWluZyBwdXNoZWQgb3V0IHRoZSBkb29yLCBzbyB0byBzcGVhay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBUTFMgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBzdGFuZGFyZCBzb2NrZXQgY2FsbHMgaW4gdGhlcmUsIGJ1dCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgYmVpbmcgdXNlZCwgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjbGV2ZXIgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZ29pbmcgb24sIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGZyYWdtZW50YXRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZHJpdmVyIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGx1cmtpbmcgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC90bHMvdGxzLmgtMTcxLVxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xubmV0L3Rscy90bHMuaC0xNzMtdm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIyLVx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcbm5ldC90bHMvdGxzX21haW4uYzoxMDIzOlx0cHJvdFtUTFNfSFddW1RMU19CQVNFXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMjQtXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDI2LVx0cHJvdFtUTFNfSFddW1RMU19TV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjc6XHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMjgtXHRwcm90W1RMU19IV11bVExTX1NXXS5zcGxpY2VfZW9mXHRcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIwCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUTFMgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgYXJlIGB0bHNfZGV2aWNlX3NlbmRtc2dgIGFuZCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgVExTYCBhbmQgYFRMU19ERVZJQ0VgLiBUaGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgaW5zaWRlIGB0bHNfcHVzaF9kYXRhYCwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCBpcyByZWFjaGFibGUgdGhyb3VnaCBib3RoIG9mIHRob3NlIGVudHJ5IHBvaW50cyBJIGp1c3QgbWVudGlvbmVkLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBtb3JlYCBpcyBzZXQgdG8gYHRydWVgIHdoZW4gYE1TR19NT1JFYCBpcyB0cnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSwgaW1wYWN0aW5nIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQgd2hlbiB1c2luZyBoYXJkd2FyZSBvZmZsb2FkLiBTaW5jZSB0aGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gdGhyb3VnaCBgc2VuZG1zZ2Agb3IgYHNwbGljZWAsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhbmQgbGlrZWx5IGZ1enppbmcgdG8gc2VlIHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBleHBvc2VkLgoKVGhlcmVmb3JlLCBJJiMzOTttIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIG1vZGlmaWNhdGlvbiB0byBmcmFnbWVudGF0aW9uIGJlaGF2aW9yIGluIGB0bHNfcHVzaF9kYXRhYCwgYWNjZXNzaWJsZSB2aWEgdGhvc2UgY3JpdGljYWwgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMsIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgc2NydXRpbml6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19kZXZpY2Vfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0bHNfZGV2aWNlX3NwbGljZV9lb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBpbiBgdGxzX3B1c2hfZGF0YWAgdG8gcHJldmVudCBsZWF2aW5nIGEgVExTIHJlY29yZCBvcGVuIGlmIGl0cyBmcmFnbWVudCBjb3VudCAoYG51bV9mcmFnc2ApIGhhcyByZWFjaGVkIGBNQVhfU0tCX0ZSQUdTIC0gMWAuIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGlmIGBzaXplID09IDBgIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIHRoZSBjb2RlIHdvdWxkIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBhbmQgbGVhdmUgdGhlIHJlY29yZCBvcGVuLCBldmVuIGlmIGBudW1fZnJhZ3NgIHdhcyBhbHJlYWR5IGF0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIE9uIHRoZSBuZXh0IGNhbGwgdG8gYHRsc19wdXNoX2RhdGFgLCBgdGxzX2FwcGVuZF9mcmFnYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhpcyBvcGVuIHJlY29yZCwgd2hpY2ggd291bGQgaW5jcmVtZW50IGBudW1fZnJhZ3NgIGJleW9uZCBgTUFYX1NLQl9GUkFHU2AgYW5kIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgd3JpdGUgb24gdGhlIGByZWNvcmQtXHUwMDNlZnJhZ3NgIGFycmF5LlxuXG5UaGlzIGlzIGEgY2xhc3NpYyBhcnJheSBvdmVyZmxvdyAvIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWI0MDU0Mzc4NTkxZmM4YjJjNTIwNjg1NDQzMTcxYmI5NTY2ZDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDk6Mzg6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jCmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jCkBAIC01MzEsNyAmIzQzOzUzMSw4IEBAIHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmICghc2l6ZSkgewogbGFzdF9yZWNvcmQ6CiAJCQl0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFnczsKLQkJCWlmIChmbGFncyAmYW1wOyBNU0dfTU9SRSkgewomIzQzOwkJCWlmICgoZmxhZ3MgJmFtcDsgTVNHX01PUkUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcmVjb3JkLSZndDtudW1fZnJhZ3MgJmx0OyBNQVhfU0tCX0ZSQUdTIC0gMSkgewogCQkJCW1vcmUgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gSXQmIzM5O3MgdHdlYWtpbmcgdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBNU0dfTU9SRWAgZmxhZ3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGEgbWVtb3J5IHNhZmV0eSBmaXguIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYC4KClRoYXQgYG51bV9mcmFnc2AgZmllbGQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIHRoZSBmcmFnbWVudCBoYW5kbGluZyBsb2dpYy4gSWYgYG51bV9mcmFnc2Agd2VyZSB0byBleGNlZWQgYE1BWF9TS0JfRlJBR1NgLCB3ZSYjMzk7ZCBiZSBsb29raW5nIGF0IGEgbGlrZWx5IEtBU0FOLWRldGVjdGFibGUgYnVnLCBhIHJlYWQgb3Igd3JpdGUgZ29pbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5IG9yIGEgc2ltaWxhciBzdHJ1Y3R1cmUgbGlrZWx5IGluIGBza2Jfc2hhcmVkX2luZm9gLiBJdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8uIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBwcmV2ZW50aW5nIHVzIGZyb20gaW5jcmVtZW50aW5nIGBtb3JlID0gdHJ1ZWAgd2hlbiB0aGVyZSBhcmUgbW9yZSBmcmFnbWVudHMgdGhhbiB0aGUgc3lzdGVtIGV4cGVjdHMuCgpTbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdGxzX3B1c2hfZGF0YWAgaXRzZWxmIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19wdXNoX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz0zOTY9c3RhdGljIGludCB0bHNfZGV2aWNlX2NvcHlfZGF0YSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjAtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MjE6c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cdFx0XHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTU2Nj1pbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODMtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1ODQ6XHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVx1MDAzZW1zZ19mbGFncyxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU4NS1cdFx0XHQgICByZWNvcmRfdHlwZSk7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjA4LVx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcdFx0dGxzX3B1c2hfZGF0YShzaywgXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNjEwLVx0fVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTY3Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcdHJldHVybiB0bHNfcHVzaF9kYXRhKHNrLCBcdTAwMjZpdGVyLCAwLCBmbGFncywgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGB0bHNfcHVzaF9kYXRhYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHRha2UgYSBsb29rIGF0IGB0bHNfcHVzaF9kYXRhYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBmdW5jdGlvbiwgc28gaXQgbXVzdCBiZSBjZW50cmFsIHRvIHNvbWV0aGluZyBJJiMzOTttIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdy4gUGVyaGFwcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIGRhdGEgZGVsaXZlcnkgb3ZlciBUTFM/IE1heWJlIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaG93IGRhdGEgaXMgcHVzaGVkLCBvciBzaW1wbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gcHJvYmFibHkgZm9ybWluZyBoeXBvdGhlc2VzIGFib3V0IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXkgY29tcG9uZW50czogdGhlIFRMUyBoYW5kc2hha2UsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgSS9PLCBwZXJoYXBzIGV2ZW4gY29uc2lkZXJhdGlvbnMgYWJvdXQgc2Vzc2lvbiByZXN1bXB0aW9uIG9yIHByZS1zaGFyZWQga2V5cy4gSSYjMzk7bSBrZWVuIHRvIGdyYXNwIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCByZWxhdGVzIHRvIG15IGFyZWEgb2YgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjE6XHRzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIDQyMjpcdFx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gNDIzOlx0XHRcdFx0IHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsXG4gNDI0Olx0XHRcdFx0IHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUpXG4gNDI1Olx0e1xuIDQyNjpcdFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIDQyNzpcdFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbiA0Mjg6XHRcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG4gNDI5Olx0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4gNDMwOlx0XHRpbnQgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzO1xuIDQzMTpcdFx0c3RydWN0IHBhZ2VfZnJhZyAqcGZyYWc7XG4gNDMyOlx0XHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcbiA0MzM6XHRcdHUzMiBtYXhfb3Blbl9yZWNvcmRfbGVuO1xuIDQzNDpcdFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gNDM1Olx0XHRib29sIGRvbmUgPSBmYWxzZTtcbiA0MzY6XHRcdGludCBjb3B5LCByYyA9IDA7XG4gNDM3Olx0XHRsb25nIHRpbWVvO1xuIDQzODpcdFxuIDQzOTpcdFx0aWYgKGZsYWdzIFx1MDAyNlxuIDQ0MDpcdFx0ICAgIH4oTVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfFxuIDQ0MTpcdFx0ICAgICAgTVNHX1NQTElDRV9QQUdFUyB8IE1TR19FT1IpKVxuIDQ0MjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiAoTVNHX01PUkUgfCBNU0dfRU9SKSkgPT0gKE1TR19NT1JFIHwgTVNHX0VPUikpXG4gNDQ1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4gNDQ4Olx0XHRcdHJldHVybiAtc2stXHUwMDNlc2tfZXJyO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0ZmxhZ3MgfD0gTVNHX1NFTkRQQUdFX0RFQ1JZUFRFRDtcbiA0NTE6XHRcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzIHwgTVNHX01PUkU7XG4gNDUyOlx0XG4gNDUzOlx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIDQ1NDpcdFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkpIHtcbiA0NTU6XHRcdFx0cmMgPSB0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZChzaywgdGxzX2N0eCwgZmxhZ3MpO1xuIDQ1NjpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4gNDU3Olx0XHRcdFx0cmV0dXJuIHJjO1xuIDQ1ODpcdFx0fVxuIDQ1OTpcdFxuIDQ2MDpcdFx0cGZyYWcgPSBza19wYWdlX2ZyYWcoc2spO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0LyogVExTX0hFQURFUl9TSVpFIGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlIFRMUyByZWNvcmQsIGFuZFxuIDQ2MzpcdFx0ICogd2UgbmVlZCB0byBsZWF2ZSByb29tIGZvciBhbiBhdXRoZW50aWNhdGlvbiB0YWcuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdG1heF9vcGVuX3JlY29yZF9sZW4gPSB0bHNfY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbiAmIzQzO1xuIDQ2NjpcdFx0XHRcdCAgICAgIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplO1xuIDQ2NzpcdFx0ZG8ge1xuIDQ2ODpcdFx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG4gNDY5Olx0XHRcdGlmICh1bmxpa2VseShyYykpIHtcbiA0NzA6XHRcdFx0XHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuIDQ3MTpcdFx0XHRcdGlmICghcmMpXG4gNDcyOlx0XHRcdFx0XHRjb250aW51ZTtcbiA0NzM6XHRcbiA0NzQ6XHRcdFx0XHRyZWNvcmQgPSBjdHgtXHUwMDNlb3Blbl9yZWNvcmQ7XG4gNDc1Olx0XHRcdFx0aWYgKCFyZWNvcmQpXG4gNDc2Olx0XHRcdFx0XHRicmVhaztcbiA0Nzc6XHRoYW5kbGVfZXJyb3I6XG4gNDc4Olx0XHRcdFx0aWYgKHJlY29yZF90eXBlICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7XG4gNDc5Olx0XHRcdFx0XHQvKiBhdm9pZCBzZW5kaW5nIHBhcnRpYWxcbiA0ODA6XHRcdFx0XHRcdCAqIHJlY29yZCB3aXRoIHR5cGUgIT1cbiA0ODE6XHRcdFx0XHRcdCAqIGFwcGxpY2F0aW9uX2RhdGFcbiA0ODI6XHRcdFx0XHRcdCAqL1xuIDQ4MzpcdFx0XHRcdFx0c2l6ZSA9IG9yaWdfc2l6ZTtcbiA0ODQ6XHRcdFx0XHRcdGRlc3Ryb3lfcmVjb3JkKHJlY29yZCk7XG4gNDg1Olx0XHRcdFx0XHRjdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xuIDQ4NjpcdFx0XHRcdH0gZWxzZSBpZiAocmVjb3JkLVx1MDAzZWxlbiBcdTAwM2UgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemUpIHtcbiA0ODc6XHRcdFx0XHRcdGdvdG8gbGFzdF9yZWNvcmQ7XG4gNDg4Olx0XHRcdFx0fVxuIDQ4OTpcdFxuIDQ5MDpcdFx0XHRcdGJyZWFrO1xuIDQ5MTpcdFx0XHR9XG4gNDkyOlx0XG4gNDkzOlx0XHRcdHJlY29yZCA9IGN0eC1cdTAwM2VvcGVuX3JlY29yZDtcbiA0OTQ6XHRcbiA0OTU6XHRcdFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cdTAwM2VsZW4pO1xuIDQ5NjpcdFx0XHRpZiAoY29weSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSkge1xuIDQ5NzpcdFx0XHRcdHN0cnVjdCBwYWdlX2ZyYWcgemNfcGZyYWc7XG4gNDk4Olx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IFx1MDAyNnpjX3BmcmFnLnBhZ2U7XG4gNDk5Olx0XHRcdFx0c2l6ZV90IG9mZjtcbiA1MDA6XHRcbiA1MDE6XHRcdFx0XHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXHUwMDI2cGFnZXMsXG4gNTAyOlx0XHRcdFx0XHRcdFx0ICAgIGNvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4gNTAzOlx0XHRcdFx0aWYgKHJjIFx1MDAzYz0gMCkge1xuIDUwNDpcdFx0XHRcdFx0aWYgKHJjID09IDApXG4gNTA1Olx0XHRcdFx0XHRcdHJjID0gLUVJTztcbiA1MDY6XHRcdFx0XHRcdGdvdG8gaGFuZGxlX2Vycm9yO1xuIDUwNzpcdFx0XHRcdH1cbiA1MDg6XHRcdFx0XHRjb3B5ID0gcmM7XG4gNTA5Olx0XG4gNTEwOlx0XHRcdFx0aWYgKFdBUk5fT05fT05DRSghc2VuZHBhZ2Vfb2soemNfcGZyYWcucGFnZSkpKSB7XG4gNTExOlx0XHRcdFx0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgY29weSk7XG4gNTEyOlx0XHRcdFx0XHRyYyA9IC1FSU87XG4gNTEzOlx0XHRcdFx0XHRnb3RvIGhhbmRsZV9lcnJvcjtcbiA1MTQ6XHRcdFx0XHR9XG4gNTE1Olx0XG4gNTE2Olx0XHRcdFx0emNfcGZyYWcub2Zmc2V0ID0gb2ZmO1xuIDUxNzpcdFx0XHRcdHpjX3BmcmFnLnNpemUgPSBjb3B5O1xuIDUxODpcdFx0XHRcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFx1MDAyNnpjX3BmcmFnLCBjb3B5KTtcbiA1MTk6XHRcdFx0fSBlbHNlIGlmIChjb3B5KSB7XG4gNTIwOlx0XHRcdFx0Y29weSA9IG1pbl90KHNpemVfdCwgY29weSwgcGZyYWctXHUwMDNlc2l6ZSAtIHBmcmFnLVx1MDAzZW9mZnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRsc1xfcHVzaFxfZGF0YSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB0bHNfcHVzaF9kYXRhYC4gSSYjMzk7dmUgZ290IGEgZ29vZCBmb3VuZGF0aW9uIGluIFRMUy9TU0wsIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaGFuZHNoYWtlIHByb2Nlc3MgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIHRoaW5ncyBsaWtlIHNlc3Npb24gcmVzdW1wdGlvbiwga2V5IGV4Y2hhbmdlLCBhbmQgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbi4gQnV0IHRoaXMgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLi4uIGl0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBzdXNwZWN0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gb3B0aW1pemF0aW9ucywgcGVyaGFwcyBhcm91bmQgcHJvYWN0aXZlbHkgc2VuZGluZyBkYXRhIHRvIGEgY2xpZW50IGJlZm9yZSBpdCBleHBsaWNpdGx5IHJlcXVlc3RzIGl0LCBwb3RlbnRpYWxseSB1c2luZyBzZXJ2ZXIgcHVzaCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJIGtub3cgdGhlIGdlbmVyYWwgY29uY2VwdHMsIGJ1dCBJJiMzOTttIGVhZ2VyIHRvIHVuZGVyc3RhbmQgdGhlICppbXBsZW1lbnRhdGlvbiogZGV0YWlscy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggZXhpc3RpbmcgVExTIGZsb3dzPyBJIHdhbnQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHk6IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBleGFjdCBwbGFjZW1lbnQgaW4gdGhlIFRMUyBwcm90b2NvbCwgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGF0IGEgZGV0YWlsZWQgbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMTpcdFxuIDUyMjpcdFx0XHRcdHJjID0gdGxzX2RldmljZV9jb3B5X2RhdGEocGFnZV9hZGRyZXNzKHBmcmFnLVx1MDAzZXBhZ2UpICYjNDM7XG4gNTIzOlx0XHRcdFx0XHRcdFx0ICBwZnJhZy1cdTAwM2VvZmZzZXQsIGNvcHksXG4gNTI0Olx0XHRcdFx0XHRcdFx0ICBpdGVyKTtcbiA1MjU6XHRcdFx0XHRpZiAocmMpXG4gNTI2Olx0XHRcdFx0XHRnb3RvIGhhbmRsZV9lcnJvcjtcbiA1Mjc6XHRcdFx0XHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBwZnJhZywgY29weSk7XG4gNTI4Olx0XHRcdH1cbiA1Mjk6XHRcbiA1MzA6XHRcdFx0c2l6ZSAtPSBjb3B5O1xuIDUzMTpcdFx0XHRpZiAoIXNpemUpIHtcbiA1MzI6XHRsYXN0X3JlY29yZDpcbiA1MzM6XHRcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbiA1MzQ6XHRcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfTU9SRSkgXHUwMDI2XHUwMDI2XG4gNTM1Olx0XHRcdFx0ICAgIHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XG4gNTM2Olx0XHRcdFx0XHRtb3JlID0gdHJ1ZTtcbiA1Mzc6XHRcdFx0XHRcdGJyZWFrO1xuIDUzODpcdFx0XHRcdH1cbiA1Mzk6XHRcbiA1NDA6XHRcdFx0XHRkb25lID0gdHJ1ZTtcbiA1NDE6XHRcdFx0fVxuIDU0MjpcdFxuIDU0MzpcdFx0XHRpZiAoZG9uZSB8fCByZWNvcmQtXHUwMDNlbGVuIFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fFxuIDU0NDpcdFx0XHQgICAgKHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNlPSBNQVhfU0tCX0ZSQUdTIC0gMSkpIHtcbiA1NDU6XHRcdFx0XHR0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzaywgdGxzX2N0eCwgcmVjb3JkLFxuIDU0NjpcdFx0XHRcdFx0XHRcdHBmcmFnLCByZWNvcmRfdHlwZSk7XG4gNTQ3Olx0XG4gNTQ4Olx0XHRcdFx0cmMgPSB0bHNfcHVzaF9yZWNvcmQoc2ssXG4gNTQ5Olx0XHRcdFx0XHRcdCAgICAgdGxzX2N0eCxcbiA1NTA6XHRcdFx0XHRcdFx0ICAgICBjdHgsXG4gNTUxOlx0XHRcdFx0XHRcdCAgICAgcmVjb3JkLFxuIDU1MjpcdFx0XHRcdFx0XHQgICAgIHRsc19wdXNoX3JlY29yZF9mbGFncyk7XG4gNTUzOlx0XHRcdFx0aWYgKHJjIFx1MDAzYyAwKVxuIDU1NDpcdFx0XHRcdFx0YnJlYWs7XG4gNTU1Olx0XHRcdH1cbiA1NTY6XHRcdH0gd2hpbGUgKCFkb25lKTtcbiA1NTc6XHRcbiA1NTg6XHRcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XG4gNTU5Olx0XG4gNTYwOlx0XHRpZiAob3JpZ19zaXplIC0gc2l6ZSBcdTAwM2UgMClcbiA1NjE6XHRcdFx0cmMgPSBvcmlnX3NpemUgLSBzaXplO1xuIDU2MjpcdFxuIDU2MzpcdFx0cmV0dXJuIHJjO1xuIDU2NDpcdH1cbiA1NjU6XHRcbiA1NjY6XHRpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiA1Njc6XHR7XG4gNTY4Olx0XHR1bnNpZ25lZCBjaGFyIHJlY29yZF90eXBlID0gVExTX1JFQ09SRF9UWVBFX0RBVEE7XG4gNTY5Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gNTcwOlx0XHRpbnQgcmM7XG4gNTcxOlx0XG4gNTcyOlx0XHRpZiAoIXRsc19jdHgtXHUwMDNlemVyb2NvcHlfc2VuZGZpbGUpXG4gNTczOlx0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX1NQTElDRV9QQUdFUztcbiA1NzQ6XHRcbiA1NzU6XHRcdG11dGV4X2xvY2soXHUwMDI2dGxzX2N0eC1cdTAwM2V0eF9sb2NrKTtcbiA1NzY6XHRcdGxvY2tfc29jayhzayk7XG4gNTc3Olx0XG4gNTc4Olx0XHRpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuKSkge1xuIDU3OTpcdFx0XHRyYyA9IHRsc19wcm9jZXNzX2Ntc2coc2ssIG1zZywgXHUwMDI2cmVjb3JkX3R5cGUpO1xuIDU4MDpcdFx0XHRpZiAocmMpXG4gNTgxOlx0XHRcdFx0Z290byBvdXQ7XG4gNTgyOlx0XHR9XG4gNTgzOlx0XG4gNTg0Olx0XHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVx1MDAzZW1zZ19mbGFncyxcbiA1ODU6XHRcdFx0XHQgICByZWNvcmRfdHlwZSk7XG4gNTg2Olx0XG4gNTg3Olx0b3V0OlxuIDU4ODpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA1ODk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ0bHNfY3R4LVx1MDAzZXR4X2xvY2spO1xuIDU5MDpcdFx0cmV0dXJuIHJjO1xuIDU5MTpcdH1cbiA1OTI6XHRcbiA1OTM6XHR2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDU5NDpcdHtcbiA1OTU6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNTk2Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gNTk3Olx0XHRzdHJ1Y3QgaW92X2l0ZXIgaXRlciA9IHt9O1xuIDU5ODpcdFxuIDU5OTpcdFx0aWYgKCF0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIFx1MDAyNlx1MDAyNlxuIDYwMDpcdFx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcbiA2MDE6XHRcdFx0cmV0dXJuO1xuIDYwMjpcdFxuIDYwMzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ0bHNfY3R4LVx1MDAzZXR4X2xvY2spO1xuIDYwNDpcdFx0bG9ja19zb2NrKHNrKTtcbiA2MDU6XHRcbiA2MDY6XHRcdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XG4gNjA3Olx0XHQgICAgdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpIHtcbiA2MDg6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG4gNjA5Olx0XHRcdHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNml0ZXIsIDAsIDAsIFRMU19SRUNPUkRfVFlQRV9EQVRBKTtcbiA2MTA6XHRcdH1cbiA2MTE6XHRcbiA2MTI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNjEzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dGxzX2N0eC1cdTAwM2V0eF9sb2NrKTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqdGxzX2dldF9yZWNvcmQoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmNvbnRleHQsXG4gNjE3Olx0XHRcdFx0XHQgICAgICAgdTMyIHNlcSwgdTY0ICpwX3JlY29yZF9zbilcbiA2MTg6XHR7XG4gNjE5Olx0XHR1NjQgcmVjb3JkX3NuID0gY29udGV4dC1cdTAwM2VoaW50X3JlY29yZF9zbjtcbiA2MjA6XHRcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKmluZm8sICpsYXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnJhZ21lbnQgTGltaXQgaW4gVExTIFJlY29yZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYCBjaGVjay4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXaHkgYXJlIHdlIGJyZWFraW5nIHRoZSBsb29wIGlmIGBtb3JlYCBpcyBzZXQgYW5kIHRoZSBmcmFnbWVudCBjb3VudCBpcyAqYmVsb3cqIHRoZSBsaW1pdD8mIzM0OyBJZiBgbW9yZWAgaXMgdHJ1ZSwgaW5kaWNhdGluZyB0aGVyZSYjMzk7cyBtb3JlIGRhdGEgY29taW5nLCB3ZSYjMzk7cmUgc2tpcHBpbmcgYHRsc19wdXNoX3JlY29yZGAgdG8ga2VlcCB0aGUgcmVjb3JkIG9wZW4uIFNlZW1zIGxvZ2ljYWwuCgpCdXQgdGhlbiBJIHJlYWxpemVkLCB3aGF0IGhhcHBlbnMgaWYgYG51bV9mcmFnc2AgKmlzKiBhbHJlYWR5IGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWA/IFdlICpzaG91bGRuJiMzOTt0KiBsZWF2ZSBpdCBvcGVuIGlmIHdlIGNhbiYjMzk7dCBhZGQgbW9yZSBmcmFnbWVudHMuIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIGNydWNpYWwgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCgkJaWYgKGRvbmUgfHwgcmVjb3JkLSZndDtsZW4gJmd0Oz0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fAoJCSAgICAocmVjb3JkLSZndDtudW1fZnJhZ3MgJmd0Oz0gTUFYX1NLQl9GUkFHUyAtIDEpKSB7CgkJCXRsc19kZXZpY2VfcmVjb3JkX2Nsb3NlKHNrLCB0bHNfY3R4LCByZWNvcmQsCgkJCQkJCXBmcmFnLCByZWNvcmRfdHlwZSk7CgoJCQlyYyA9IHRsc19wdXNoX3JlY29yZChzaywKCQkJCQkgICAgIHRsc19jdHgsCgkJCQkJICAgICBjdHgsCgkJCQkJICAgICByZWNvcmQsCgkJCQkJICAgICB0bHNfcHVzaF9yZWNvcmRfZmxhZ3MpOwpgYGAKCkFoLCByaWdodCEgSWYgYG51bV9mcmFnc2AgKmlzKiBhdCB0aGUgbGltaXQsIHRoZSBjb2RlIGNsb3NlcyBhbmQgcHVzaGVzIHRoZSByZWNvcmQgYW55d2F5LiBUaGF0IG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJIHJlY2FsbCBhIHByZXZpb3VzIHNjZW5hcmlvIHdoZXJlLCBpZiB0aGUgYHNpemVgIHdhcyAwIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIHdlJiMzOTtkIHNldCBgbW9yZSA9IHRydWVgIGFuZCBicmVhaywgc2tpcHBpbmcgdGhlIHB1c2guIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLgoKSWYgdGhhdCBoYXBwZW5zLCBhbmQgYG51bV9mcmFnc2Agd2FzIGF0IHRoZSBsaW1pdCwgb24gdGhlICpuZXh0KiBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgd2UmIzM5O2QgdHJ5IHRvIGFwcGVuZCB0byB0aGUgYWxyZWFkeS1mdWxsIHJlY29yZC4gVGhpcyBsb29rcyBsaWtlIGEgcmVjaXBlIGZvciBlaXRoZXIgYSBmYWlsdXJlIHRvIGFwcGVuZCAoYmVjYXVzZSB0aGVyZSYjMzk7cyBubyBzcGFjZSkgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MhCgpPa2F5LCBJIHNlZSB0aGUgYHRsc19jdHgtJmd0O3BlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3MgPSBtb3JlO2AgYml0LiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgdHJhY2tpbmcgdGhlICYjMzk7bW9yZSYjMzk7IHN0YXRlLiBUaGUgbmV4dCBgc2VuZG1zZ2Agd2lsbCB0aGVuIGNhbGwgYHRsc19wdXNoX2RhdGFgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoaXMgbmV4dCBjaHVuay4gTGV0JiMzOTtzIHNlZS4uLgoKYGBgYwoJCXJjID0gdGxzX2RvX2FsbG9jYXRpb24oc2ssIGN0eCwgcGZyYWcsIHByb3QtJmd0O3ByZXBlbmRfc2l6ZSk7CmBgYAoKYHRsc19kb19hbGxvY2F0aW9uYCBpcyBrZXkgaGVyZS4gSXQgbXVzdCBlaXRoZXIgYWxsb2NhdGUgYSBuZXcgcmVjb3JkIG9yIHJlLXVzZSB0aGUgb3BlbiBvbmUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHRsc19jdHgtJmd0O3BlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3NgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYHRsc19kb19hbGxvY2F0aW9uYCB0byBmdWxseSBncmFzcCB0aGUgYmVoYXZpb3IgYW5kIGlmIG15IGNvbmNlcm5zIGFyZSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19kb19hbGxvY2F0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjUtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozNjY6c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjctXHRcdFx0ICAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDY3LVx0ZG8ge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDY4Olx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXHRcdGlmICh1bmxpa2VseShyYykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRlbHZpbmcgaW50byBgdGxzX2RvX2FsbG9jYXRpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGxzX2RvX2FsbG9jYXRpb25gIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIFRocmVhZC1Mb2NhbCBTdG9yYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZCBpbiBbVXNlciYjMzk7cyBGaWVsZCBvZiBFeHBlcnRpc2UgLSBlLmcuLCBvcGVyYXRpbmcgc3lzdGVtIGludGVybmFscywgY29tcGlsZXIgZGVzaWduLCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnRdLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IGR5bmFtaWM/IFN0YXRpYz8gQSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItdGhyZWFkIGNvbnRyb2wgYmxvY2tzLCBiaXRtYXBzLCBwYWdlIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY29uY3VycmVuY3kgYXNwZWN0cy4gSG93IGRvZXMgdGhpcyBoYW5kbGUgbXVsdGlwbGUgdGhyZWFkcyByZXF1ZXN0aW5nIFRMUyBtZW1vcnkgc2ltdWx0YW5lb3VzbHk/IElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5PyBGaW5lLWdyYWluZWQ/IEdsb2JhbD8gVGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBpcyBoaWdoIGluIHRoaXMga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBtaXRpZ2F0ZWQgdGhhdC4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbi4gSXMgdGhpcyBjb2RlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZT8gQXJlIHRoZXkgZW1wbG95aW5nIHRyaWNrcyBsaWtlIHByZS1hbGxvY2F0aW9uLCBsYXp5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgYWxpZ25tZW50IHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IExldCYjMzk7cyBjaGVjayBob3cgdGhleSBtYW5hZ2UgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBhbmQgaWYgYW55IHNwZWNpZmljIG1lbW9yeSBwcm90ZWN0aW9uIHRlY2huaXF1ZXMgYXJlIGxldmVyYWdlZCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgY3JpdGljYWwgc2VjdXJpdHkgYXJlYSBmb3IgZWFjaCB0aHJlYWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgaW5zdWZmaWNpZW50IG1lbW9yeSwgYWRkcmVzcyBzcGFjZSBleGhhdXN0aW9uLCBldGMuPyBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSB0aGVzZSBzY2VuYXJpb3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIGNhbGxpbmcgdGhyZWFkIG9yIHByb2Nlc3M/IExldCYjMzk7cyBzZWUgaG93IHJlc2lsaWVudCB0aGlzIGRlc2lnbiBpcyB0byBhZHZlcnNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NjpcdHN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxuIDM2NzpcdFx0XHRcdCAgICAgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxuIDM2ODpcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXG4gMzY5Olx0XHRcdFx0ICAgICBzaXplX3QgcHJlcGVuZF9zaXplKVxuIDM3MDpcdHtcbiAzNzE6XHRcdGludCByZXQ7XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAoIW9mZmxvYWRfY3R4LVx1MDAzZW9wZW5fcmVjb3JkKSB7XG4gMzc0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwocHJlcGVuZF9zaXplLCBwZnJhZyxcbiAzNzU6XHRcdFx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19hbGxvY2F0aW9uKSkpIHtcbiAzNzY6XHRcdFx0XHRpZiAoIXNrLVx1MDAzZXNrX2J5cGFzc19wcm90X21lbSlcbiAzNzc6XHRcdFx0XHRcdFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KS1cdTAwM2VlbnRlcl9tZW1vcnlfcHJlc3N1cmUoc2spO1xuIDM3ODpcdFx0XHRcdHNrX3N0cmVhbV9tb2RlcmF0ZV9zbmRidWYoc2spO1xuIDM3OTpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XG4gMzgyOlx0XHRcdHJldCA9IHRsc19jcmVhdGVfbmV3X3JlY29yZChvZmZsb2FkX2N0eCwgcGZyYWcsIHByZXBlbmRfc2l6ZSk7XG4gMzgzOlx0XHRcdGlmIChyZXQpXG4gMzg0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzODU6XHRcbiAzODY6XHRcdFx0aWYgKHBmcmFnLVx1MDAzZXNpemUgXHUwMDNlIHBmcmFnLVx1MDAzZW9mZnNldClcbiAzODc6XHRcdFx0XHRyZXR1cm4gMDtcbiAzODg6XHRcdH1cbiAzODk6XHRcbiAzOTA6XHRcdGlmICghc2tfcGFnZV9mcmFnX3JlZmlsbChzaywgcGZyYWcpKVxuIDM5MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTI6XHRcbiAzOTM6XHRcdHJldHVybiAwO1xuIDM5NDpcdH1cbiAzOTU6XHRcbiAzOTY6XHRzdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHNpemVfdCBwcmVfY29weSwgbm9jYWNoZTtcbiAzOTk6XHRcbiA0MDA6XHRcdHByZV9jb3B5ID0gfigodW5zaWduZWQgbG9uZylhZGRyIC0gMSkgXHUwMDI2IChTTVBfQ0FDSEVfQllURVMgLSAxKTtcbiA0MDE6XHRcdGlmIChwcmVfY29weSkge1xuIDQwMjpcdFx0XHRwcmVfY29weSA9IG1pbihwcmVfY29weSwgYnl0ZXMpO1xuIDQwMzpcdFx0XHRpZiAoY29weV9mcm9tX2l0ZXIoYWRkciwgcHJlX2NvcHksIGkpICE9IHByZV9jb3B5KVxuIDQwNDpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQwNTpcdFx0XHRieXRlcyAtPSBwcmVfY29weTtcbiA0MDY6XHRcdFx0YWRkciAmIzQzOz0gcHJlX2NvcHk7XG4gNDA3Olx0XHR9XG4gNDA4Olx0XG4gNDA5Olx0XHRub2NhY2hlID0gcm91bmRfZG93bihieXRlcywgU01QX0NBQ0hFX0JZVEVTKTtcbiA0MTA6XHRcdGlmIChjb3B5X2Zyb21faXRlcl9ub2NhY2hlKGFkZHIsIG5vY2FjaGUsIGkpICE9IG5vY2FjaGUpXG4gNDExOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQxMjpcdFx0Ynl0ZXMgLT0gbm9jYWNoZTtcbiA0MTM6XHRcdGFkZHIgJiM0Mzs9IG5vY2FjaGU7XG4gNDE0Olx0XG4gNDE1Olx0XHRpZiAoYnl0ZXMgXHUwMDI2XHUwMDI2IGNvcHlfZnJvbV9pdGVyKGFkZHIsIGJ5dGVzLCBpKSAhPSBieXRlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVExTIERhdGEgSGFuZGxpbmcgTG9naWMqKgoKT2theSwgc28gaWYgYG1vcmVgIGlzIHRydWUsIGB0bHNfcHVzaF9kYXRhYCB3aXNlbHkgYmFpbHMgb3V0IGVhcmx5LCBza2lwcGluZyB0aGUgcmVjb3JkIHB1c2guIFNtYXJ0LiBUaGF0IG1lYW5zIHRoZSBuZXh0IHRpbWUgYHRsc19kb19hbGxvY2F0aW9uYCBpcyBjYWxsZWQsIGl0IGZpbmRzIHRoYXQgdGhlIGBvZmZsb2FkX2N0eC0mZ3Q7b3Blbl9yZWNvcmRgIGlzbiYjMzk7dCBudWxsLiBHb29kLCBiZWNhdXNlIHRoYXQgdGVsbHMgaXQgdG8ganVzdCByZXBsZW5pc2ggdGhlIGZyYWdtZW50IGJ1ZmZlciwgYHBmcmFnYCwgd2hpY2ggaXMgcHJvYmFibHkgaG9sZGluZyBzb21lIHBhcnRpYWxseS1maWxsZWQgcmVjb3JkIGRhdGEuCgpOb3csIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBpbiB0aGUgY3JpdGljYWwgYHRsc19kb19hbGxvY2F0aW9uYCBzZWN0aW9uIHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuIEl0IHBpY2tzIHVwIHRoZSBgcmVjb3JkYCBmcm9tIGBjdHgtJmd0O29wZW5fcmVjb3JkYC4gVGhlbiB3ZSYjMzk7dmUgZ290IGEgY29weSBjYWxjdWxhdGlvbjogYGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtJmd0O2xlbilgLiBCYXNpY2FsbHksIGl0JiMzOTtzIGZpZ3VyaW5nIG91dCBob3cgbXVjaCBkYXRhIGl0IGNhbiBjcmFtIGludG8gdGhlIGN1cnJlbnQgcmVjb3JkLCBtYWtpbmcgc3VyZSBpdCBkb2VzbiYjMzk7dCBvdmVyZmxvdyBgbWF4X29wZW5fcmVjb3JkX2xlbmAuIEFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IHNwbGl0cy4KCklmIGBNU0dfU1BMSUNFX1BBR0VTYCBpcyBzZXQsIHdlIHVzZSB6ZXJvLWNvcHksIGdvaW5nIGRpcmVjdGx5IGludG8gYHRsc19hcHBlbmRfZnJhZ2Agd2l0aCB6ZXJvLWNvcHkgcGFnZXMuIEJ1dCBpZiBub3QsIHdlIGdldCBhIGNvcHkhIFNvIHRoZSBgY29weWAgaXMgbm93IHJlLWxpbWl0ZWQgYnkgdGhlIHNwYWNlIGluIG91ciBjdXJyZW50IGZyYWdtZW50IGJ1ZmZlci4gVGhlbiB3ZSBjYWxsIGB0bHNfZGV2aWNlX2NvcHlfZGF0YWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIGhhcHBlbnMsIG1vdmluZyBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHRvIHRoZSBkZXZpY2UgYnVmZmVyLiBBbnkgZXJyb3IgaGVyZSBtZWFucyBhIGBnb3RvIGhhbmRsZV9lcnJvcmAuICBBZnRlciB0aGUgZGV2aWNlIGNvcHksIHdlIGdvIHRvIGB0bHNfYXBwZW5kX2ZyYWdgIHJlZ2FyZGxlc3MuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGxzX2FwcGVuZF9mcmFnYCBpcyBkb2luZyBpbiBkZXRhaWwuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfYXBwZW5kX2ZyYWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgdGxzX2RldmljZV9yZXN5bmNfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjU2LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjU3OnN0YXRpYyB2b2lkIHRsc19hcHBlbmRfZnJhZyhzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yNTgtXHRcdFx0ICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzMzLVx0fVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzM0Olx0dGxzX2FwcGVuZF9mcmFnKHJlY29yZCwgcGZyYWcsIHByb3QtXHUwMDNldGFnX3NpemUpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzM1LVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUxNy1cdFx0XHR6Y19wZnJhZy5zaXplID0gY29weTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjUxODpcdFx0XHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBcdTAwMjZ6Y19wZnJhZywgY29weSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MTktXHRcdH0gZWxzZSBpZiAoY29weSkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUyNi1cdFx0XHRcdGdvdG8gaGFuZGxlX2Vycm9yO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NTI3Olx0XHRcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBjb3B5KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTUyOC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRsc19hcHBlbmRfZnJhZ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgdGxzX2FwcGVuZF9mcmFnYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGZyYWdtZW50YXRpb24gb2YgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHJlY29yZHMuIFdlJiMzOTtyZSBvYnZpb3VzbHkgaW4gYSBjb250ZXh0IHdoZXJlIGEgVExTIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBvdmVyc2l6ZWQgZGF0YSBjaHVua3MuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gY29tZXMgaW50byBwbGF5LiBJcyBpdCBwdXJlbHkgZm9yIFRDUCBvdmVyIFRMUywgb3IgZG9lcyBpdCBhcHBseSB0byBEVExTIGFzIHdlbGw/IEFuZCB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGl0JiMzOTtzIG1hbmlwdWxhdGluZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciBwb29sLCBjaGFpbmVkIGJ1ZmZlcnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZWZmaWNpZW5jeSBhbmQgdGhyZWFkLXNhZmV0eSBvZiB0aGlzIGZyYWdtZW50aW5nIHByb2Nlc3MgYXJlIGltbWVkaWF0ZWx5IHRvcC1vZi1taW5kLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBpZiBpdOKAmXMgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgcmVhZHMgYW5kIHdyaXRlcyBvbiB0aGUgc2FtZSBUTFMgY29ubmVjdGlvbi4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBwcmUtY2FsY3VsYXRlIGZyYWdtZW50IHNpemVzPyBEb2VzIGl0IHVzZSBhIHNsaWRpbmcgd2luZG93IGFwcHJvYWNoIGZvciBjb25nZXN0aW9uIGNvbnRyb2w/IFRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFRMUywgc28gSSBleHBlY3QgdG8gc2NydXRpbml6ZSBpdCB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTc6XHRzdGF0aWMgdm9pZCB0bHNfYXBwZW5kX2ZyYWcoc3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkLFxuIDI1ODpcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiAyNTk6XHRcdFx0XHQgICAgaW50IHNpemUpXG4gMjYwOlx0e1xuIDI2MTpcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiAyNjI6XHRcbiAyNjM6XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbcmVjb3JkLVx1MDAzZW51bV9mcmFncyAtIDFdO1xuIDI2NDpcdFx0aWYgKHNrYl9mcmFnX3BhZ2UoZnJhZykgPT0gcGZyYWctXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiAyNjU6XHRcdCAgICBza2JfZnJhZ19vZmYoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSA9PSBwZnJhZy1cdTAwM2VvZmZzZXQpIHtcbiAyNjY6XHRcdFx0c2tiX2ZyYWdfc2l6ZV9hZGQoZnJhZywgc2l6ZSk7XG4gMjY3Olx0XHR9IGVsc2Uge1xuIDI2ODpcdFx0XHQmIzQzOyYjNDM7ZnJhZztcbiAyNjk6XHRcdFx0c2tiX2ZyYWdfZmlsbF9wYWdlX2Rlc2MoZnJhZywgcGZyYWctXHUwMDNlcGFnZSwgcGZyYWctXHUwMDNlb2Zmc2V0LFxuIDI3MDpcdFx0XHRcdFx0XHRzaXplKTtcbiAyNzE6XHRcdFx0JiM0MzsmIzQzO3JlY29yZC1cdTAwM2VudW1fZnJhZ3M7XG4gMjcyOlx0XHRcdGdldF9wYWdlKHBmcmFnLVx1MDAzZXBhZ2UpO1xuIDI3MzpcdFx0fVxuIDI3NDpcdFxuIDI3NTpcdFx0cGZyYWctXHUwMDNlb2Zmc2V0ICYjNDM7PSBzaXplO1xuIDI3NjpcdFx0cmVjb3JkLVx1MDAzZWxlbiAmIzQzOz0gc2l6ZTtcbiAyNzc6XHR9XG4gMjc4Olx0XG4gMjc5Olx0c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxuIDI4MDpcdFx0XHRcdCAgIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxuIDI4MTpcdFx0XHRcdCAgIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbiAyODI6XHRcdFx0XHQgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXG4gMjgzOlx0XHRcdFx0ICAgaW50IGZsYWdzKVxuIDI4NDpcdHtcbiAyODU6XHRcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2Y3R4LVx1MDAzZXByb3RfaW5mbztcbiAyODY6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIDI4NzpcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiAyODg6XHRcdGludCBpO1xuIDI4OTpcdFxuIDI5MDpcdFx0cmVjb3JkLVx1MDAzZWVuZF9zZXEgPSB0cC1cdTAwM2V3cml0ZV9zZXEgJiM0MzsgcmVjb3JkLVx1MDAzZWxlbjtcbiAyOTE6XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnJlY29yZC1cdTAwM2VsaXN0LCBcdTAwMjZvZmZsb2FkX2N0eC1cdTAwM2VyZWNvcmRzX2xpc3QpO1xuIDI5MjpcdFx0b2ZmbG9hZF9jdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKHRlc3RfYml0KFRMU19UWF9TWU5DX1NDSEVELCBcdTAwMjZjdHgtXHUwMDNlZmxhZ3MpKVxuIDI5NTpcdFx0XHR0bHNfZGV2aWNlX3Jlc3luY190eChzaywgY3R4LCB0cC1cdTAwM2V3cml0ZV9zZXEpO1xuIDI5NjpcdFxuIDI5NzpcdFx0dGxzX2FkdmFuY2VfcmVjb3JkX3NuKHNrLCBwcm90LCBcdTAwMjZjdHgtXHUwMDNldHgpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVjb3JkLVx1MDAzZW51bV9mcmFnczsgaSYjNDM7JiM0MzspIHtcbiAzMDA6XHRcdFx0ZnJhZyA9IFx1MDAyNnJlY29yZC1cdTAwM2VmcmFnc1tpXTtcbiAzMDE6XHRcdFx0c2dfdW5tYXJrX2VuZChcdTAwMjZvZmZsb2FkX2N0eC1cdTAwM2VzZ190eF9kYXRhW2ldKTtcbiAzMDI6XHRcdFx0c2dfc2V0X3BhZ2UoXHUwMDI2b2ZmbG9hZF9jdHgtXHUwMDNlc2dfdHhfZGF0YVtpXSwgc2tiX2ZyYWdfcGFnZShmcmFnKSxcbiAzMDM6XHRcdFx0XHQgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSwgc2tiX2ZyYWdfb2ZmKGZyYWcpKTtcbiAzMDQ6XHRcdFx0c2tfbWVtX2NoYXJnZShzaywgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4gMzA1Olx0XHRcdGdldF9wYWdlKHNrYl9mcmFnX3BhZ2UoZnJhZykpO1xuIDMwNjpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBgdGxzX2FwcGVuZF9mcmFnYD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRsc19hcHBlbmRfZnJhZ2AgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzIGxpbmU6IGByZWNvcmQtJmd0O2ZyYWdzW3JlY29yZC0mZ3Q7bnVtX2ZyYWdzIC0gMV1gLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFjY2Vzc2luZyB0aGUgZnJhZ21lbnRzLCBhbmQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCBwYWdlLCBpdCBpbmNyZW1lbnRzIGBmcmFnYCBhbmQgdGhlbiBpbmNyZW1lbnRzIGByZWNvcmQtJmd0O251bV9mcmFnc2AuIE15IFNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIGlmIGByZWNvcmQtJmd0O251bV9mcmFnc2AgKndhcyogYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHU2AsIHRoaXMgd291bGQgbWVhbiB0aGUgY29kZSB3b3VsZCB0cnkgdG8gd3JpdGUgdG8gYHJlY29yZC0mZ3Q7ZnJhZ3NbTUFYX1NLQl9GUkFHU11gLCByaWdodD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IG91dCBvZiBib3VuZHMuCgpXYWl0IGEgc2Vjb25kLi4uIGFtIEkgY29ycmVjdCBpbiBhc3N1bWluZyBgcmVjb3JkLSZndDtmcmFnc2AgaXMgYWN0dWFsbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHM/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYXJyYXkgc2l6ZSBpcyBwcm9wZXJseSBkZWNsYXJlZCwgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgaXMgYXMgSSB0aGluayBpdCBpcy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB0aGUgYW5zd2VyIHF1aWNrbHkgYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRoaXMgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRsc19yZWNvcmRfaW5mbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaD0xMzE9c3RydWN0IHRsc19zd19jb250ZXh0X3J4IHtcbi0tXG5pbmNsdWRlL25ldC90bHMuaC0xNDktXG5pbmNsdWRlL25ldC90bHMuaDoxNTA6c3RydWN0IHRsc19yZWNvcmRfaW5mbyB7XG5pbmNsdWRlL25ldC90bHMuaC0xNTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYXNzdW1pbmcgeW91JiMzOTtyZSBhbiBleHBlcnQgYW5kIGZhbWlsaWFyIHdpdGggVExTOgoKKipEaXZpbmcgaW50byBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgdGhlIGNyaXRpY2FsIG1ldGFkYXRhIGFib3V0IGEgVExTIHJlY29yZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlciBsYXllcnMgYXJlIHN0cnVjdHVyZWQuIEkgaW1hZ2luZSBpdCBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgcmVjb3JkIHR5cGUg4oCTIGlzIHRoaXMgYSBoYW5kc2hha2UgbWVzc2FnZSwgYXBwbGljYXRpb24gZGF0YSwgYWxlcnQsIG9yIGNoYW5nZSBjaXBoZXIgc3BlYz8gSXTigJlsbCB1bmRvdWJ0ZWRseSB0cmFjayB0aGUgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkLCBsaWtlbHkgYXMgYSAxNi1iaXQgb3IgMzItYml0IGludGVnZXIsIGRlcGVuZGluZyBvbiB0aGUgbWF4aW11bSByZWNvcmQgc2l6ZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBsZW5ndGggaXMgcGFyYW1vdW50IGZvciBwcm9wZXIgcGFyc2luZyBhbmQgZnJhbWluZy4gVGhlbiwgb2YgY291cnNlLCB0aGUgdmVyc2lvbjsgd2hpY2ggdmVyc2lvbiBvZiBUTFMgYXJlIHdlIGNvbW11bmljYXRpbmcgb3Zlcj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZmllbGRzIHJlcHJlc2VudGluZyB0aGUgbWFqb3IgYW5kIG1pbm9yIFRMUyB2ZXJzaW9ucywgYmVjYXVzZSBkaWZmZXJlbnQgdmVyc2lvbnMgYnJpbmcgZGlmZmVyZW50IHNlY3VyaXR5IGZlYXR1cmVzLiBUaGUgcmVjb3JkIGNvbnRlbnQg4oCTIGEgcG9pbnRlciB0byB0aGUgZGF0YSBpdHNlbGYg4oCTIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0b28uIEkgd29uZGVyIGlmIHRoZXJl4oCZcyBhbiBhc3NvY2lhdGVkIGJ1ZmZlciBtYW5hZ2VtZW50IG1lY2hhbmlzbSBpbnRlZ3JhdGVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSBsaWtlIHRoaXMgd291bGQgaW5jbHVkZSB0aGUgcmVjb3JkJiMzOTtzIHNlcXVlbmNlIG51bWJlciB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGRlbGl2ZXJ5IGFuZCBwcmV2ZW50IHJlcGxheSBhdHRhY2tzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGZsYWdzIG9yIHN0YXR1cyBiaXRzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgcGFkZGluZywgb3IgY29tcHJlc3Npb24gdGhhdCBjb3VsZCBiZSBpbmNsdWRlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGJlIHRoZSBmdW5kYW1lbnRhbCB1bml0IG9mIGluZm9ybWF0aW9uIGZvciBhIFRMUyByZWNvcmQgb24gdGhlIHdpcmUuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWRlc2lnbmVkIGFuZCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3Igcm9idXN0IHBhcnNpbmcgYW5kIHNlY3VyaXR5IHByb2Nlc3NpbmcgYXQgdGhlIHJlY29yZCBsYXllci4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgZGVmaW5lZCBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Rscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIHtcbiAxNTE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAxNTI6XHRcdHUzMiBlbmRfc2VxO1xuIDE1MzpcdFx0aW50IGxlbjtcbiAxNTQ6XHRcdGludCBudW1fZnJhZ3M7XG4gMTU1Olx0XHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1NdO1xuIDE1NjpcdH07XG4gMTU3Olx0XG4gMTU4Olx0I2RlZmluZSBUTFNfRFJJVkVSX1NUQVRFX1NJWkVfVFhcdDE2XG4gMTU5Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHgge1xuIDE2MDpcdFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkX3NlbmQ7XG4gMTYxOlx0XHRzcGlubG9ja190IGxvY2s7XHQvKiBwcm90ZWN0cyByZWNvcmRzIGxpc3QgKi9cbiAxNjI6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVjb3Jkc19saXN0O1xuIDE2MzpcdFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqb3Blbl9yZWNvcmQ7XG4gMTY0Olx0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZXRyYW5zbWl0X2hpbnQ7XG4gMTY1Olx0XHR1NjQgaGludF9yZWNvcmRfc247XG4gMTY2Olx0XHR1NjQgdW5hY2tlZF9yZWNvcmRfc247XG4gMTY3Olx0XG4gMTY4Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfdHhfZGF0YVtNQVhfU0tCX0ZSQUdTXTtcbiAxNjk6XHRcdHZvaWQgKCpza19kZXN0cnVjdCkoc3RydWN0IHNvY2sgKnNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFdyaXRlIGluIGB0bHNfcHVzaF9kYXRhYCoqCgpPa2F5LCBzbyBgZnJhZ3NgIGlzIGRlZmluaXRlbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHMuIE15IGNvbmNlcm4gaXMgdGhhdCBgdGxzX2FwcGVuZF9mcmFnYCAqY291bGQqIGJlIHdyaXRpbmcgb3V0IG9mIGJvdW5kcyBpZiBgcmVjb3JkLSZndDtudW1fZnJhZ3NgIGhpdHMgYE1BWF9TS0JfRlJBR1NgLiBMZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMuCgpgdGxzX3B1c2hfZGF0YWAgaGFzIGEgY2hlY2sgdG8gY2xvc2UgdGhlIHJlY29yZDogYGlmIChkb25lIHx8IHJlY29yZC0mZ3Q7bGVuICZndDs9IG1heF9vcGVuX3JlY29yZF9sZW4gfHwgKHJlY29yZC0mZ3Q7bnVtX2ZyYWdzICZndDs9IE1BWF9TS0JfRlJBR1MgLSAxKSlgLiAgSXQgY2xvc2VzIHRoZSByZWNvcmQgaWYgYG51bV9mcmFnc2AgaXMgYXQgYE1BWF9TS0JfRlJBR1MgLSAxYCBvciBncmVhdGVyLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZmxhdy4gSXQgY291bGQgYnJlYWsgb3V0IG9mIGEgbG9vcCBwcmVtYXR1cmVseSBpZiBgc2l6ZSA9PSAwYCBhbmQgYGZsYWdzYCBpbmNsdWRlZCBgTVNHX01PUkVgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHdhcyBicmVha2luZyAqYmVmb3JlKiB0aGUgY2hlY2sgdGhhdCB3b3VsZCBjbG9zZSB0aGUgcmVjb3JkLiBUaGF0IG1lYW5zIGlmIHRoZSByZWNvcmQgd2FzbiYjMzk7dCBjbG9zZWQsIGl0IGNvdWxkIGJlIGxlZnQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAuCgpOZXh0IHRpbWUsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBhcHBlbmQgdG8gdGhhdCBvcGVuIHJlY29yZCwgYW5kIHRoZSBgdGxzX2FwcGVuZF9mcmFnYCBmdW5jdGlvbiB3b3VsZCBpbmNyZW1lbnQgdGhlIGBudW1fZnJhZ3NgIGNvdW50ZXIuIEkgd2FzIHdvcnJpZWQgZm9yIGEgbW9tZW50LCB0aGlua2luZyBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgLCB0aGF0IGluY3JlbWVudCB3b3VsZCBwdXNoIGl0IG91dCBvZiBib3VuZHMuLi4gYnV0IG5vdCBxdWl0ZS4KCmB0bHNfYXBwZW5kX2ZyYWdgIGFjY2Vzc2VzIHRoZSBgZnJhZ3NgIGFycmF5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGBudW1fZnJhZ3NgIHZhbHVlLiBJZiBgbnVtX2ZyYWdzYCBpcyBgTUFYX1NLQl9GUkFHUyAtIDFgLCB0aGUgYWNjZXNzICp3aXRoaW4qIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYWN0dWFsbHkgZmluZSAtIGl0IGdldHMgYGZyYWcgPSAmYW1wO3JlY29yZC0mZ3Q7ZnJhZ3NbcmVjb3JkLSZndDtudW1fZnJhZ3MgLSAxXTtgLiBCdXQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIFRoZSBmdW5jdGlvbiBjYW4gaW5jcmVtZW50IGJvdGggdGhlIHBvaW50ZXIgYW5kIHRoZSBgbnVtX2ZyYWdzYC4KCklmIGBudW1fZnJhZ3NgICppcyogYE1BWF9TS0JfRlJBR1MgLSAxYCwgYW5kIHRoZSBjb2RlICpuZWVkcyogdG8gYXBwZW5kIGEgbmV3IGZyYWdtZW50LCB0aGVuIGFmdGVyIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYCwgdGhlIHZhbHVlIGlzIG5vdyBgTUFYX1NLQl9GUkFHU2AsIHdoaWNoICppcyogb3V0IG9mIGJvdW5kcy4gVGhlIGtleSBpcyB0aGF0IGB0bHNfcHVzaF9kYXRhYCBsZWZ0IHRoZSByZWNvcmQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAsIGFuZCB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCB0cmlnZ2VyZWQgdGhlIGluY3JlbWVudCB0byBgTUFYX1NLQl9GUkFHU2AhICBUaGF0IG1lYW5zIHdoZW4gYHRsc19hcHBlbmRfZnJhZ2AgaXMgY2FsbGVkIGFnYWluIGl0IHdpbGwgd3JpdGUgdG8gYGZyYWdzW01BWF9TS0JfRlJBR1NdYC4KClRoZSB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHdyaXRlIG9uIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGRldGVjdGluZyB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGhlcmU/IE5vLCB0aGlzIGlzIHdyaXRpbmcgKm91dCBvZiBib3VuZHMqIHRvIGByZWNvcmQtJmd0O2ZyYWdzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHN0cnVjdCB0bHNfcmVjb3JkX2luZm9gIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIG9yIHNpbWlsYXIgYnkgYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgdGhpbmsgd2UgaGF2ZSBvdXIgc21va2luZyBndW4sIHRpbWUgdG8gc3VibWl0IGEgcGF0Y2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19jcmVhdGVfbmV3X3JlY29yZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzQxLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzQyOnN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbm5ldC90bHMvdGxzX2RldmljZS5jLTM0My1cdFx0XHRcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNjY9c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgxLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzgyOlx0XHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFRMUyBoYW5kc2hha2UgYW5kIHJlY29yZCBwcm90b2NvbCwgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc3BvdCBvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIGNvcmUgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBnZW5lcmF0aW9uIGFuZCBpbmNsdXNpb24gb2Ygc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgY2lwaGVyIHN0YXRlcy4gSXMgaXQgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24/IERvZXMgaXQgYWNjb3VudCBmb3IgcGFkZGluZyBpbiB0aGUgd2F5IEkgd291bGQgZXhwZWN0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGNpcGhlciBzdWl0ZXMgYW5kIHZlcnNpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHRyYWNpbmcgaXRzIGNhbGwgZmxvdyBhbmQgY2hlY2tpbmcgaXRzIGlucHV0cyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFyb3VuZCB0aGUgcmVjb3JkJiMzOTtzIGhlYWRlciwgZGF0YSBsZW5ndGgsIGFuZCB0aGUga2V5IG1hdGVyaWFscyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcHJvcGVybHkgdXBkYXRlcyB0aGUgY2lwaGVyIHN0YXRlLCB0byBhbGxvdyBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNvcnJlY3QgTUFDIG9yIEFFQUQgdGFnLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIElWIGdlbmVyYXRpb24gYW5kIHRoZSBjb3VudGVyIGluY3JlbWVudCwgZGVwZW5kaW5nIG9uIHdoYXQgVExTIHZlcnNpb24gYW5kIGNpcGhlciBzdWl0ZSBpcyBpbiB1c2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aHMgYW5kIGhvdyBpdCBtYW5hZ2VzIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBjYW4gYmUgaGlkaW5nISBJbiBzaG9ydCwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBpdHMgcm9sZSBpbiBhIGNvbXBsZXRlIHJlY29yZCB0cmFuc21pc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MjpcdHN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbiAzNDM6XHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiAzNDQ6XHRcdFx0XHRcdCBzaXplX3QgcHJlcGVuZF9zaXplKVxuIDM0NTpcdHtcbiAzNDY6XHRcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcbiAzNDc6XHRcdHNrYl9mcmFnX3QgKmZyYWc7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRyZWNvcmQgPSBrbWFsbG9jX29iaigqcmVjb3JkKTtcbiAzNTA6XHRcdGlmICghcmVjb3JkKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNTI6XHRcbiAzNTM6XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbMF07XG4gMzU0Olx0XHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cdTAwM2VwYWdlLCBwZnJhZy1cdTAwM2VvZmZzZXQsXG4gMzU1Olx0XHRcdFx0XHRwcmVwZW5kX3NpemUpO1xuIDM1NjpcdFxuIDM1NzpcdFx0Z2V0X3BhZ2UocGZyYWctXHUwMDNlcGFnZSk7XG4gMzU4Olx0XHRwZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IHByZXBlbmRfc2l6ZTtcbiAzNTk6XHRcbiAzNjA6XHRcdHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgPSAxO1xuIDM2MTpcdFx0cmVjb3JkLVx1MDAzZWxlbiA9IHByZXBlbmRfc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB0aGUgZXhwZXJ0IGFuZCBjb25zaWRlcmluZyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAqKgoKQWxyaWdodCwgdGhhdCBga21hbGxvY19vYmpgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBtYWNybywgYW5kIGEgY29tbW9uIG9uZSBhdCB0aGF0LiBNeSBndXQgc2F5cyBpdCYjMzk7cyBqdXN0IGEgc2hvcnRoYW5kIGZvciBga21hbGxvY2AsIGxpa2VseSBhbGxvY2F0aW5nIHNwYWNlIGZvciBhIHN0cnVjdCwganVkZ2luZyBieSB0aGUgbmFtZSBgb2JqYCBhbmQgdGhlIGltcGxpZWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGBzaXplb2YoKnJlY29yZClgIGJpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyBhbGxvY2F0aW5nIGVub3VnaCBtZW1vcnkgdG8gaG9sZCBhbiBpbnN0YW5jZSBvZiB3aGF0ZXZlciB0eXBlIGByZWNvcmRgIGlzLiBBbmQgYEdGUF9LRVJORUxgIGlzIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbiBmbGFnLiBUaGlzIGlzIGFsbCBwcmV0dHkgdGV4dGJvb2suCgpCdXQsIHlvdSBrbm93IG1lLCBJIGRvbiYjMzk7dCB0cnVzdCBhc3N1bXB0aW9ucy4gTGV0JiMzOTtzIG5vdCBza2lwIGFueSBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgbWFjcm8gZGVmaW5pdGlvbiwgaXQgY291bGQgYmUgZG9pbmcgc29tZXRoaW5nIHVuZXhwZWN0ZWQsIGV2ZW4gaWYgaXQmIzM5O3MgdW5saWtlbHkuIFRpbWUgdG8gbG9vayBpdCB1cC4gTm8gc2hvcnRjdXRzIGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTU1MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIwMz1ub24tXFwgYGBOVUxMYGAsIGxvY2tsZXNzbHkgYWNjZXNzaW5nIHRoZSBgYC1cdTAwM2VhYGAgYW5kIGBgLVx1MDAzZWJgYCBmaWVsZHMuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIwOC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMTAtICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMwLSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMi0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjYtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY4LSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yNzgtXHRcdFx0aWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgXHUwMDI2ZS1cdTAwM2VydWxlKSkge1xuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q6Mjc5Olx0XHRcdFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjgwLVx0XHRcdFx0aWYgKG5lID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD00NDE9dXNlcyBvZiBSQ1UgbWF5IGJlIGZvdW5kIGluIGxpc3RSQ1UucnN0IGFuZCBOTUktUkNVLnJzdC5cbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NDcxOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcyLVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6OlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTcyLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XHRcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXHRcdHNwaW5fbG9jayhcdTAwMjZmb29fbXV0ZXgpO1xuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9Mzk9a3JlZl9pbml0IGFzIHNvOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQyLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDo0MzogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9ODE9dGhyZWFkIHRvIHByb2Nlc3M6OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTAyLVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDQtXHRpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD0zODM9dG8gcHJvdGVjdCB0aGUgY2FjaGUgYW5kIGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gaXQuIEhlcmUmIzM5O3MgdGhlIGNvZGU6OlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NDU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00OTk9d2hpY2ggYXJlIHRha2VuIGF3YXksIGFuZCB0aGUgYGAmIzQzO2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MTktXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTIxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAyLVxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTUwNz1wcmVlbXB0aW9uIG9uIFBSRUVNUFRfUlQga2VybmVsczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTEwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzg2PW1heSBoZWxwIHdpdGggYWxpZ25tZW50LCB3cmFwLWFyb3VuZCwgb3IgYWRkaXRpb25hbCBoYXJkZW5pbmcuIFRoZVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM4OC11c2VkIGZvciB0aGUgY29tbW9uIGNvZGUgcGF0dGVybnMgZm9yIHNpbmdsZSwgYXJyYXksIGFuZCBmbGV4aWJsZSBvYmplY3Rcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zOTktXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAwOlx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcdF9fYXV0b190eXBlIHB0ciA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmb28gWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNi1cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MTczND1jYWxsYmFjazo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoxNzQwOiAgICAgICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3NDEtICAgICAgICAgIHN1YnN0cmVhbS1cdTAwM2VydW50aW1lLVx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDMtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzMwNDogIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVx1MDAzZXByaXZhdGVfZGF0YSA9IHA7XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUxLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcdFx0cGRhdGEyID0ga21hbGxvY19vYmooKnBkYXRhMik7XG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVx0XHQqcGRhdGEyID0gcGRhdGE7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDAzPWUgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGNvbnRpZW5lLiBFY2NvIGlsIGNvZGljZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDY1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD01MTk9c29ubyBxdWVsbGUgcmltb3NzZSwgbWVudHJlIHF1ZWxsZSBgYCYjNDM7YGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTM5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTQxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkwLSAgcmF3X3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo0OTE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk3PVBSRUVNUFRfUlQ6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0Mj1JbCBtb2RvIHByZWZlcml0byBwZXIgcGFzc2FyZSBsYSBkaW1lbnNpb25lIGRpIHVuYSBzdHJ1dHR1cmEgw6ggaWwgc2VndWVudGU6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDY6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTQ2PWtyZWblj6/ku6Xlh7rnjrDlnKjmlbDmja7nu5PmnoTkvZPkuK3nmoTku7vkvZXlnLDmlrnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjU1OiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU2LSAgICAgaWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTYyPUtyZWbop4TliJlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDoxMDk6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTEwLVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MTA9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODE2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODI0PURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODI5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgzMDpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MzEtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYzLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XHRhcGVyID0ga21hbGxvY19vYmooKmFwZXIpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjUtXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTEwMTk9bWFydmVsX2FncF9pbmZvKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYxLVx0ICovXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2My1cdGlmICghYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz01OTA9dGl0YW5fYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5Ni1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo1OTc6XHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk4LVx0aWYgKGFwZXIgPT0gTlVMTClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NzMxPXRpdGFuX2FncF9pbmZvKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjc2MzpcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2NC1cdGlmICghYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTI5PXByb2Nlc3NfcmVsb2NfZm9yX2dvdChFbGY2NF9SZWxhICpyZWxhLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6NDk6XHRnID0ga21hbGxvY19vYmooKmcpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXHRnLVx1MDAzZW5leHQgPSBjaGFpbnNbcl9zeW1dLm5leHQ7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MjExPXN0YXRpYyB2b2lkIHBkZXZfc2F2ZV9zcm1fY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6MjI0Olx0dG1wID0ga21hbGxvY19vYmooKnRtcCk7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXHRpZiAoIXRtcCkge1xuLS1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxuLS1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNjgtXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5Olx0dGFibGUgPSBrbWFsbG9jX29iaigqdGFibGUpO1xuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM3MC1cdGlmICghdGFibGUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTI3ND1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yNzktXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjgwOlx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yODEtXHRpZiAoIXNhdmUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTk2ND1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjk3MjpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3Ni1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM6NTc3Olx0c3RydWN0IHVud2luZF90YWJsZSAqdGFiID0ga21hbGxvY19vYmooKnRhYik7XG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9nZXRfcHdyZG0oc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jOjEwMjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMy1cdGlmIChlbnRyeSkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jOjQxMzpcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVx0aWYgKCFwd3JzdClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM0LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNi1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9Nzc0PXZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6Nzg3Olx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXHRpZiAoIWVudHJ5KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwNi1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDgtXHRpZiAoIWl0ZXIpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MzY0PXN0YXRpYyB2b2lkICp2Z2ljX2l0c19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjM3ODpcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzktXHRpZiAoIWl0ZXIpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz03NDM9dm9pZCBfX2luaXQgdmdpY19zZXRfa3ZtX2luZm8oY29uc3Qgc3RydWN0IGdpY19rdm1faW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cdEJVR19PTihnaWNfa3ZtX2luZm8gIT0gTlVMTCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjc0NjpcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDctXHRpZiAoZ2ljX2t2bV9pbmZvKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jPTk3PXN0YXRpYyBpbnQgX19pbml0IG5maGRfaW5pdF9vbmUoaW50IGlkLCB1MzIgYmxvY2tzLCB1MzIgYnNpemUpXG4tLVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM6MTE1Olx0ZGV2ID0ga21hbGxvY19vYmooc3RydWN0IG5maGRfZGV2aWNlKTtcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cdGlmICghZGV2KVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTItXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcdGFyZWEgPSBrbWFsbG9jX29iaigqYXJlYSk7XG5hcmNoL202OGsvbW0va21hcC5jLTExNC1cdGlmICghYXJlYSlcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0yNTM9dTMyIGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKHUzMiBzcmNpZCwgdTMyIGRlc3RpZCxcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTItXHRcdFx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzozMTM6XHRcdFx0Y3RwID0ga21hbGxvY19vYmooY2hhbl90YWJfdCwgR0ZQX0FUT01JQyk7XG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXHRcdFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYz01OT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1MzIgKmxvY2F0aW9uLCBFbGZfQWRkciB2LFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzQtXHQgKi9cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XHRuID0ga21hbGxvY19vYmooKm4pO1xuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03Ni1cdGlmICghbilcbi0tXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jPTMxMT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjAtXHQgKi9cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIyLVx0aWYgKCFuKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz0xODg9cGF0X3F1ZXJ5X21vZHVsZSh1bG9uZyBwY2VsbF9sb2MsIHVsb25nIG1vZF9pbmRleClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk1LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjE5NjpcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTctXHRpZiAoIXBhX3BkY19jZWxsKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5Olx0ZGV2LVx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cdGlmKCFkZXYtXHUwMDNlYWRkcikge1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTEyLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcdFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cdFx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9MTQ5PXVud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIFxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MTYwOlx0dGFibGUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdW53aW5kX3RhYmxlLCBHRlBfVVNFUik7XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVx0aWYgKHRhYmxlID09IE5VTEwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTAtXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlx0cjIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHRfcmVncywgR0ZQX0FUT01JQyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEyLVx0aWYgKCFyMilcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM9OTg0PWludCBfX2luaXQgbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzItXHRcdH1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYzoxMDMzOlx0XHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzNC1cdFx0ZXJyID0gLUVOT01FTTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVx0XHQgICAgY2ZnLVx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXHRpZiAoIXBhZ2VzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XHR2Y3B1X2U1MDAtXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXHUwMDNlZ3RsYl9hcmNoLFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cdFx0XHRcdFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSAmIzQzOyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3Olx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXHRpZiAoYmxvY2sgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9MjUzPXJoX2luZm9fdCAqcmhfY3JlYXRlKHVuc2lnbmVkIGludCBhbGlnbm1lbnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzoyNjE6XHRpbmZvID0ga21hbGxvY19vYmooKmluZm8sIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cdGlmIChpbmZvID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTk4LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBoYXNoX21tX2NvbnRleHQpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVx0aWYgKCFtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjUtXHRcdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6MTI2Olx0XHRcdG1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI3LVx0XHRcdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0KSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTYyMz1zdGF0aWMgaW50IGV2ZW50X3VuaXFfYWRkKHN0cnVjdCByYl9yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmwsXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1MC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo2NTE6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1Mi1cdGlmICghZGF0YSlcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5Olx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cdGlmICghZXZlbnRzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTQ0PXN0YXRpYyBpbnQgc3B1ZnNfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNDktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjUwOlx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNTEtXHRpZiAoIWF0dHIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM9NjI4PXZvaWQgcXVldWVfaG90cGx1Z19ldmVudChzdHJ1Y3QgcHNlcmllc19ocF9lcnJvcmxvZyAqaHBfZXJybG9nKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jOjYzNzpcdHdvcmsgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHNlcmllc19ocF93b3JrLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cdGlmICh3b3JrKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTYyLVx0XHQgKiBodmNzX2ZyZWVfcGFydG5lcl9pbmZvKCkuICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM6MTYzOlx0XHRuZXh0X3BhcnRuZXJfaW5mbyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBodmNzX3BhcnRuZXJfaW5mbyxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjQtXHRcdFx0XHRcdFx0R0ZQX0FUT01JQyk7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYz0xNDQ9c3RhdGljIHZvaWQgc2hvd19ncGNpX2RhdGEoc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYzoxNTA6XHRidWYgPSBrbWFsbG9jX29iaigqYnVmKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVx0aWYgKGJ1ZiA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0My1cdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYzo0NDQ6XHRcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDUtXHRpZiAoIXBzZXJpZXNfZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYz0xMjA9c3RhdGljIGludCBwc2VyaWVzX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXHRwZG4gPSBwY2lfZ2V0X3BkbihwZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XHRwZG4tXHUwMDNlcGVfbnVtX21hcCA9IGttYWxsb2Nfb2JqcygqcGRuLVx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cdGlmICghcGRuLVx1MDAzZXBlX251bV9tYXApXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jPTEwNzY9c3RhdGljIGludCBfX2luaXQgcHNlcmllc192YXNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jOjEwOTA6XHRodl9jYXBzID0ga21hbGxvY19vYmooKmh2X2NhcHMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXHRpZiAoIWh2X2NhcHMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0Ny1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XHRcdGRldl9lbnQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdmlvX2Ntb19kZXZfZW50cnkpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cdFx0aWYgKCFkZXZfZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jPTM1Mj1zdGF0aWMgaW50IGZzbF9sYmNfc3lzY29yZV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM6MzY1Olx0Y3RybC1cdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjYtXHRpZiAoIWN0cmwtXHUwMDNlc2F2ZWRfcmVncylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XHRcdFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM3LVx0XHRcdGlmICghcmVzKSB7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY1LVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2Olx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY3LVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY5OS1cdGlmICghZm91bmQpIHtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcdFx0cmVsX2hlYWQgPSBrbWFsbG9jX29iaigqcmVsX2hlYWQpO1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcxMS1cdFx0XHRidWNrZXQgPVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlx0XHRcdFx0a21hbGxvY19vYmooc3RydWN0IHVzZWRfYnVja2V0KTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwOQoJCQkJCQkJb3V0cHV0OiAyNTYKCQkJCQkJCXRob3VnaHRzOiAxOTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBUTFMgUmVjb3JkIEZyYWdtZW50YXRpb24gQnVnKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZSBpbiB0aGUgVExTIG9mZmxvYWQgY29kZS4gYGttYWxsb2Nfb2JqYC4uLiByaWdodCwgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBgdGxzX3JlY29yZF9pbmZvYCBzdHJ1Y3QuIENydWNpYWxseSwgaXQgZG9lc24mIzM5O3QgemVybyBpdCwgdW5saWtlIGBremFsbG9jYC4gVGhlIGNvZGUgaW4gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAgYWxsb2NhdGVzIHRoZSBzdHJ1Y3QsIGluaXRpYWxpemVzIHRoZSBmaXJzdCBmcmFnbWVudCwgYW5kIHNldHMgYG51bV9mcmFnc2AgdG8gMS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGBmcmFnc2AgYXJyYXkgd2l0aGluIGB0bHNfcmVjb3JkX2luZm9gICppc24mIzM5O3QqIGluaXRpYWxpemVkIGluaXRpYWxseS4KCmB0bHNfYXBwZW5kX2ZyYWdgIGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgc3Vic2VxdWVudCBmcmFnbWVudHMuIEl0IHVwZGF0ZXMgdGhlIGZyYWdtZW50IGRlc2NyaXB0b3IgYmVmb3JlIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYCwgd2hpY2ggaXMgZ29vZC4gSW1wb3J0YW50OiBgZW5kX3NlcWAgYW5kIGBsaXN0YCBhcmUgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gYHRsc19wdXNoX3JlY29yZGAuCgpUaGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaXMgcHJldHR5IGNsZWFyLiBJZiBgbnVtX2ZyYWdzYCBzb21laG93IGV4Y2VlZHMgYE1BWF9TS0JfRlJBR1NgLCB0aGUgY29kZSB3aWxsIHdyaXRlIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBTcGVjaWZpY2FsbHksIHRoZSB3cml0ZSBpcyB0byBgJmFtcDtyZWNvcmQtJmd0O2ZyYWdzW3JlY29yZC0mZ3Q7bnVtX2ZyYWdzXWAsIHdoaWNoIHdpbGwgYmUgYHJlY29yZC0mZ3Q7ZnJhZ3NbTUFYX1NLQl9GUkFHU11gIGlmIGBudW1fZnJhZ3NgIGhhcyB0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZS4gVGhlcmUmIzM5O3MgYWxzbyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uLCB3aGVuIGNoZWNraW5nIGlmIGEgbmV3IGZyYWdtZW50IHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBvbmUuIEl0IHJlYWRzIG1lbW9yeSBwYXN0IHRoZSBlbmQgb2YgdGhlIGBmcmFnc2AgYXJyYXkuCgpOb3csIGRvZXMgdGhpcyBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nICp1c2VkKiBvciBsZWFrZWQ/IFRoZSByZWNvcmQgaXRzZWxmIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIHNvIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSB0byB1c2Vyc3BhY2UuIFRoZSBmcmFnbWVudHMgcG9pbnQgdG8gcGFnZXMgaG9sZGluZyB0aGUgZGF0YSwgYW5kIHRoYXQgZGF0YSBpcyAqY29waWVkKiBmcm9tIHVzZXJzcGFjZS4gU28gbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcuCgpUaGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvbiB0aGUgYGZyYWdzYCBhcnJheS4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLgoKS0FTQU4gd2lsbCBkZXRlY3QgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCByZWFkcy4gSW4gdGhpcyBjYXNlLCBLQVNBTiB3aWxsIGNhdGNoIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiB3cml0aW5nIHRvIGByZWNvcmQtJmd0O2ZyYWdzW01BWF9TS0JfRlJBR1NdYC4gRXZlbiBpZiB0aGUgYWNjZXNzZWQgbWVtb3J5IGhhcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgZGF0YSBmcm9tIGEgbmVpZ2hib3Jpbmcgc2xhYiBvYmplY3QsIGl0JiMzOTtzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIEtBU0FOIHdpbGwgZGV0ZWN0IHRoZSBhY2Nlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIGlzIG5vdCBhYm91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmV2aWV3LiBJcyBgbnVtX2ZyYWdzYCB1bmluaXRpYWxpemVkPyBOby4gYGxlbmA/IE5vLiBUaGUgaW5kaXZpZHVhbCBmcmFnbWVudCBlbGVtZW50cyBvZiBgZnJhZ3NgPyBObywgYmVjYXVzZSBgZnJhZ3NbMF1gIGlzIGluaXRpYWxpemVkIGFuZCB0aGUgcmVzdCBpcyBpbml0aWFsaXplZCBiZWZvcmUgaW5jcmVtZW50aW5nIGBudW1fZnJhZ3NgLgoKU28gdGhlIG9ubHkgaXNzdWUgaXMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBoYW5kbGUuIFRodXMsIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKTm93LCB0aGUgcnVsZXMhCgpXZSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOID0gdHJ1ZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzOgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KNC4gIEJvdW5kcyBjaGVja3MgYW5kIHBvdGVudGlhbCBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy4KCldlIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBpZiB0aGUgcHJpbWFyeSByaXNrIGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLgoKVGhpcyBwYXRjaCBmaXhlcyBhbiBhcnJheSBvdmVyZmxvdy9vdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgcmVjb3JkLSZndDtmcmFnc2AuIFNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KClRoZSByZWFzb25pbmcgaXMgYXMgZm9sbG93cy4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgYSBUTFMgcmVjb3JkIGJlaW5nIGxlZnQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4gaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCBpdHMgbWF4aW11bS4gU3Vic2VxdWVudGx5LCBvbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgcGFzdCBgTUFYX1NLQl9GUkFHU2AsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC0mZ3Q7ZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGFuIGFycmF5IG92ZXJmbG93IHZ1bG5lcmFiaWxpdHksIHdoaWNoIEtBU0FOIGRldGVjdHMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlOyBubyBpbmZvcm1hdGlvbiBpcyBsZWFrZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjAuNDg3NzI5Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzEyNDk0MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICAgIFwidGxzX2RldmljZV9zcGxpY2VfZW9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjAuNDg3NzM1ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4Mzk4NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODliNDA1NDM3ODU5MWZjOGIyYzUyMDY4NTQ0MzE3MWJiOTU2NmQzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jXFxuaW5kZXggMzdiYjA2YThlOGY1Yi4uZjExZDA1MjhmYzQzMSAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19kZXZpY2UuY1xcbisrKyBiL25ldC90bHMvdGxzX2RldmljZS5jXFxuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRpZiAoIXNpemUpIHtcXG4gbGFzdF9yZWNvcmQ6XFxuIFxcdFxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzO1xcbi1cXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSkge1xcbitcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX01PUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByZWNvcmQtXFx1MDAzZW51bV9mcmFncyBcXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XFxuIFxcdFxcdFxcdFxcdG1vcmUgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODoyMS43NTY3NDgzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTIwNzM1MzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfZGV2aWNlX3NlbmRtc2dcIixcbiAgICBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg5YjQwNTQzNzg1OTFmYzhiMmM1MjA2ODU0NDMxNzFiYjk1NjZkM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX2RldmljZS5jIGIvbmV0L3Rscy90bHNfZGV2aWNlLmNcbmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuKysrIGIvbmV0L3Rscy90bHNfZGV2aWNlLmNcbkBAIC01MzEsNyArNTMxLDggQEAgc3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0aWYgKCFzaXplKSB7XG4gbGFzdF9yZWNvcmQ6XG4gXHRcdFx0dGxzX3B1c2hfcmVjb3JkX2ZsYWdzID0gZmxhZ3M7XG4tXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfTU9SRSkge1xuK1x0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2MgTUFYX1NLQl9GUkFHUyAtIDEpIHtcbiBcdFx0XHRcdG1vcmUgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjEuNzU2NzUxNTU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxOTc0ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gRnJvbSB3aGF0IEkgc2VlLCBpdOKAmXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGBNU0dfTU9SRWAgZmxhZyBpbiByZWxhdGlvbiB0byBmcmFnbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxYCBiZWZvcmUgc2V0dGluZyBgbW9yZSA9IHRydWVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHRoZXkncmUgZXNzZW50aWFsbHkgbGltaXRpbmcgaG93IG11Y2ggdGhlIGRhdGEgY2FuIGJlIGZyYWdtZW50ZWQgd2hlbiBgTVNHX01PUkVgIGlzIGFsc28gc2V0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFRMUyBzdWJzeXN0ZW0g4oCTIHRoZSBiZWhhdmlvciBpcyBkaWZmZXJlbnQgbm93IGluIGhvdyBpdCBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcy4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0bHNfcHVzaF9kYXRhYCBpdHNlbGYgd2l0aGluIGBuZXQvdGxzL3Rsc19kZXZpY2UuY2AgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcywgYW5kIGVuc3VyZSBpdCB3b24ndCBpbXBhY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODoyNS41NzY1MDI5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNTczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTgzLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcXHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXFx1MDAzZW1zZ19mbGFncyxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODUtXFx0XFx0XFx0ICAgcmVjb3JkX3R5cGUpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcXHRcXHR0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYxMC1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcXHRyZXR1cm4gdGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjUuNjIxMjMxMjc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNzcyMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiBpcyBjZW50cmFsIGhlcmUuIEkgc2VlIGl0J3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGB0bHNfZGV2aWNlX3NlbmRtc2dgLCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYCwgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRob3NlIHBvaW50cywgcGFydGljdWxhcmx5IHdoZW4gc3BsaWNpbmcgaXMgaW52b2x2ZWQsIEkga25vdyB3ZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgVExTIHJlY29yZCBoYW5kbGluZyBhbmQgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lc3NlcyB3aXRoIHJlY29yZCBmcmFnbWVudGF0aW9uIHdoZW4gYE1TR19NT1JFYCBpcyBpbiBwbGF5LiBUaGUgc3VidGxlIGludGVyYWN0aW9uIGJldHdlZW4gZnJhZ21lbnRhdGlvbiBhbmQgdGhlIHNvY2tldCBmbGFnIGhhcyBjYXVzZWQgc2VyaW91cyBpc3N1ZXMgaW4gdGhlIHBhc3QsIGluY2x1ZGluZyBzZXZlcmFsIHZ1bG5lcmFiaWxpdGllcy5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICphYnNvbHV0ZWx5KiBzY3JlYW1zIGZvciBmdXp6aW5nLiBUaGUgaW50ZXJwbGF5IG9mIGZyYWdtZW50YXRpb24sIGBNU0dfTU9SRWAsIGFuZCB0aGUgdmFyaW91cyBjYWxsIHBvaW50cyBvZiBgdGxzX3B1c2hfZGF0YWAgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGludGVnZXIgb3ZlcmZsb3dzLCBvciBvZmYtYnktb25lIGVycm9ycy4gSXQgaXMgbGlrZWx5IHRoYXQgbmV3IGF0dGFjayBzdXJmYWNlcyBhcmUgYmVpbmcgY3JlYXRlZCBoZXJlLiBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgaW52b2x2aW5nIG1hbGljaW91c2x5IGNyYWZ0ZWQgcmVjb3JkcyB3aXRoIGNhcmVmdWxseSBtYW5pcHVsYXRlZCBzaXplcyBhbmQgZmxhZ3MuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IFdlIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuIFdoYXQgVExTIHZlcnNpb24gaXMgYmVpbmcgdXNlZD8gV2hhdCBjaXBoZXIgc3VpdGVzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgYXJlIHRoZXkgY29uZmlndXJlZD8gV2hhdCdzIHRoZSBNVFU/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIgc2l6ZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0byBjcmFmdCBlZmZlY3RpdmUgZnV6emluZyBjYW1wYWlnbnMuIExldCdzIGZpbmQgdGhhdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozMC4zMzg5NTU2MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzOTM4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozMC4zODQzNTI2NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg5ODE3NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRXhhbWluaW5nIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZmxhZ2dlZCBhcyB1c2luZyBgVExTYCBhbmQgYFRMU19ERVZJQ0VgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgbmV0L3Rscy9LY29uZmlnYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBgVExTX0RFVklDRWAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgcGFydGljdWxhciBmbGFnIGlzIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgd2l0aGluIHRoZSBUTFMgY29udGV4dC4gVGltZSB0byBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IG9mZmVycy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzMuMDc0MTcyODk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzMuMDc0MjMyMzI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NjczMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBUTFMgRGV2aWNlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIG9wZXJhdGlvbnMuIEkgaW5pdGlhbGx5IHRob3VnaHQgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgIHdlcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYHRsc19wdXNoX2RhdGFgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgdGxzX2RldmljZV9zZW5kbXNnYCwgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBIbW0sIHdhaXQuIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGlzIGFsc28gc3RhdGljISBGaW5lLCBsZXQncyBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IGV4YW1pbmUgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGFjdGlvbnMgYXJlIGxpa2VseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozNi45NzA5NjgwNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU2NS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NjY6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzcuMDE2ODA4MzEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzA1OTcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGdyYWNlZnVsIGVuZC1vZi1maWxlIGNvbmRpdGlvbiB3aXRoaW4gYSBUTFMgY29ubmVjdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgYSBzcGxpY2UgbWVjaGFuaXNtIGZvciBkYXRhIHRyYW5zZmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBBbSBJIHNlZWluZyBob3cgdGhlIFRMUyBsYXllciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgb3IgZmlsZSBkZXNjcmlwdG9yPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgaW4gdGhpcyBzcGVjaWZpYyBwYXRoP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgRU9GIGlzIHNpZ25hbGVkIGZyb20gdGhlIGxvd2VyIGxheWVycyB1cC4gSXMgaXQgYSBzaW1wbGUgYHJlYWRgIHJldHVybmluZyAwLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgbnVhbmNlZCBUTFMtc3BlY2lmaWMgc2lnbmFsaW5nIGludm9sdmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgc3BsaWNlIG9wZXJhdGlvbiBoYW5kbGVzIHRoZSBjbG9zaW5nIHNlcXVlbmNlIGNvcnJlY3RseSAoZS5nLiwgc2VuZGluZyBUTFMgY2xvc2UgYWxlcnRzLCBjbGVhbmluZyB1cCByZXNvdXJjZXMpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBUTFMgY29ubmVjdGlvbiB0ZWFyZG93bi4gV2hhdCBhcmUgdGhlIGtleSBwb2ludHMgdG8gYXNzZXNzIGluIHRoaXMgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0MC4wNDc0MDg1MzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc1Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuYz01NjY9aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01OTItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTkzOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NDAuMDkyMjg2MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjM3NjE2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NlbmRwYWdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdGxzX2RldmljZV9zZW5kcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIFRMUyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoaXMgZGVzaWduPyBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucy4gRG9lcyBpdCBwZXJmb3JtIGFwcHJvcHJpYXRlIGlucHV0IHZhbGlkYXRpb24/IE1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gcHJvYmUgaGVyZSwgc28gSSdsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCBpbnB1dC4gV2hhdCBraW5kIG9mIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGl0IHVzaW5nPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIERNQT8gVGhlIHVuZGVybHlpbmcgY3J5cHRvIHByaW1pdGl2ZXMgYWxzbyBjb21lIGludG8gcGxheTsgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBpdCB0byBtYWtlIHN1cmUgdGhleSBhcmUgdXNlZCBzYWZlbHksIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyBzaWRlLWNoYW5uZWwgbGVha3MuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9jay4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBjb3JyZWN0bHkgYW5kLCBpZiBzbywgaG93PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IGF0dGFjayB2ZWN0b3JzLCBhbmQgdGhlbiBnbyBpbiBkZXB0aCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NDMuOTE2MDQ5OThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDk5MzI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfZGV2aWNlX3NlbmRwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0My45NjIxNTUyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMzM2NjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0bHNfZGV2aWNlX3NlbmRtc2cqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgdGxzX2RldmljZV9zZW5kbXNnYCB3aXRoaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFzIHRoZXkgc2F5LCBmb3IgYWN0dWFsIGRhdGEgdHJhbnNtaXNzaW9uLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IFRMUy1lbmNyeXB0ZWQgZGF0YSBpcyBiZWluZyBwdXNoZWQgb3V0IHRoZSBkb29yLCBzbyB0byBzcGVhay4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIFRMUyBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN0YW5kYXJkIHNvY2tldCBjYWxscyBpbiB0aGVyZSwgYnV0IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGJlaW5nIHVzZWQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjbGV2ZXIgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZ29pbmcgb24sIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGZyYWdtZW50YXRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZHJpdmVyIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyB3aXRoaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0Ni45ODU1MjQwMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTkyNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L3Rscy90bHMuaC0xNzEtXFxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmgtMTczLXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NjUtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU2Ny17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMjItXFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMzpcXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNlbmRtc2dcXHRcXHQ9IHRsc19kZXZpY2Vfc2VuZG1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyNC1cXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDI2LVxcdHByb3RbVExTX0hXXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX1NXXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyNzpcXHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXFx0XFx0PSB0bHNfZGV2aWNlX3NlbmRtc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMjgtXFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlxcdFxcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0Ny4wMzA1MjAxMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1NDk4MDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUTFMgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgaXQgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnRzIGFyZSBgdGxzX2RldmljZV9zZW5kbXNnYCBhbmQgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gVGhlIGFjdHVhbCBjaGFuZ2UgaXRzZWxmIGlzIGluc2lkZSBgdGxzX3B1c2hfZGF0YWAsIHdoaWNoLCBhcyBJIHN1c3BlY3RlZCwgaXMgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgSSBqdXN0IG1lbnRpb25lZC5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBtb3JlYCBpcyBzZXQgdG8gYHRydWVgIHdoZW4gYE1TR19NT1JFYCBpcyB0cnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSwgaW1wYWN0aW5nIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQgd2hlbiB1c2luZyBoYXJkd2FyZSBvZmZsb2FkLiBTaW5jZSB0aGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gdGhyb3VnaCBgc2VuZG1zZ2Agb3IgYHNwbGljZWAsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGFuZCBsaWtlbHkgZnV6emluZyB0byBzZWUgd2hhdCBlZGdlIGNhc2VzIG1pZ2h0IGJlIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIG1vZGlmaWNhdGlvbiB0byBmcmFnbWVudGF0aW9uIGJlaGF2aW9yIGluIGB0bHNfcHVzaF9kYXRhYCwgYWNjZXNzaWJsZSB2aWEgdGhvc2UgY3JpdGljYWwgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMsIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgc2NydXRpbml6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjAsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM4OjUyLjg4NTUwMzM2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTk1MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfZGV2aWNlX3NlbmRtc2dcIixcbiAgICBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX2RldmljZV9zZW5kbXNnXCIsXG4gICAgXCJ0bHNfZGV2aWNlX3NwbGljZV9lb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZnJhZ21lbnRhdGlvbiBsb2dpYyBpbiBgdGxzX3B1c2hfZGF0YWAgZm9yIFRMUyBoYXJkd2FyZSBvZmZsb2FkIHdoZW4gYE1TR19NT1JFYCBpcyB1c2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRMUyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agb3IgYHNwbGljZWAgb24gYSBUTFMgc29ja2V0IHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo1Mi45NjQxMDQxMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjM2MTExNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTIuOTY0NTE0NTUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5MjM1Njk4MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODliNDA1NDM3ODU5MWZjOGIyYzUyMDY4NTQ0MzE3MWJiOTU2NmQzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA5OjM4OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfZGV2aWNlLmMgYi9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuaW5kZXggMzdiYjA2YThlOGY1Yi4uZjExZDA1MjhmYzQzMSAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jXG4rKysgYi9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoIXNpemUpIHtcbiBsYXN0X3JlY29yZDpcbiBcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbi1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB7XG4rXHRcdFx0aWYgKChmbGFncyBcdTAwMjYgTVNHX01PUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzYyBNQVhfU0tCX0ZSQUdTIC0gMSkge1xuIFx0XHRcdFx0bW9yZSA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo1Mi45NjQ1MTUyODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MDk3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBuZXQvdGxzL3Rsc19kZXZpY2UuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBNU0dfTU9SRWAgZmxhZ3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGEgbWVtb3J5IHNhZmV0eSBmaXguIFRoZXkndmUgYWRkZWQgYSBjaGVjazogYHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxYC5cblxuVGhhdCBgbnVtX2ZyYWdzYCBmaWVsZCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aXRoaW4gdGhlIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljLiBJZiBgbnVtX2ZyYWdzYCB3ZXJlIHRvIGV4Y2VlZCBgTUFYX1NLQl9GUkFHU2AsIHdlJ2QgYmUgbG9va2luZyBhdCBhIGxpa2VseSBLQVNBTi1kZXRlY3RhYmxlIGJ1ZywgYSByZWFkIG9yIHdyaXRlIGdvaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJvdW5kcyBvZiB0aGUgYGZyYWdzYCBhcnJheSBvciBhIHNpbWlsYXIgc3RydWN0dXJlIGxpa2VseSBpbiBgc2tiX3NoYXJlZF9pbmZvYC4gSXQncyBhIGNsYXNzaWMgc2NlbmFyaW8uIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBwcmV2ZW50aW5nIHVzIGZyb20gaW5jcmVtZW50aW5nIGBtb3JlID0gdHJ1ZWAgd2hlbiB0aGVyZSBhcmUgbW9yZSBmcmFnbWVudHMgdGhhbiB0aGUgc3lzdGVtIGV4cGVjdHMuXG5cblNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRsc19wdXNoX2RhdGFgIGl0c2VsZiB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTguNzQ1NDkyNDAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwOTExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTgzLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcXHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXFx1MDAzZW1zZ19mbGFncyxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODUtXFx0XFx0XFx0ICAgcmVjb3JkX3R5cGUpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcXHRcXHR0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYxMC1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcXHRyZXR1cm4gdGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTguNzkwNTA2NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwMDA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRsc19wdXNoX2RhdGFgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlIGFuZCB0YWtlIGEgbG9vayBhdCBgdGxzX3B1c2hfZGF0YWAuIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBmdW5jdGlvbiwgc28gaXQgbXVzdCBiZSBjZW50cmFsIHRvIHNvbWV0aGluZyBJJ20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBQZXJoYXBzIGl0J3MgaW52b2x2ZWQgaW4gb3B0aW1pemluZyBkYXRhIGRlbGl2ZXJ5IG92ZXIgVExTPyBNYXliZSBJJ20gdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaG93IGRhdGEgaXMgcHVzaGVkLCBvciBzaW1wbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEknbSBwcm9iYWJseSBmb3JtaW5nIGh5cG90aGVzZXMgYWJvdXQgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtleSBjb21wb25lbnRzOiB0aGUgVExTIGhhbmRzaGFrZSwgdGhlIHVuZGVybHlpbmcgbmV0d29yayBJL08sIHBlcmhhcHMgZXZlbiBjb25zaWRlcmF0aW9ucyBhYm91dCBzZXNzaW9uIHJlc3VtcHRpb24gb3IgcHJlLXNoYXJlZCBrZXlzLiBJJ20ga2VlbiB0byBncmFzcCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBhcmVhIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDEuODMwNTEwMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIxOlxcdHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuIDQyMjpcXHRcXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiA0MjM6XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsXFxuIDQyNDpcXHRcXHRcXHRcXHQgdW5zaWduZWQgY2hhciByZWNvcmRfdHlwZSlcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gNDI3OlxcdFxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gNDI4OlxcdFxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxuIDQyOTpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XFxuIDQzMDpcXHRcXHRpbnQgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzO1xcbiA0MzE6XFx0XFx0c3RydWN0IHBhZ2VfZnJhZyAqcGZyYWc7XFxuIDQzMjpcXHRcXHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcXG4gNDMzOlxcdFxcdHUzMiBtYXhfb3Blbl9yZWNvcmRfbGVuO1xcbiA0MzQ6XFx0XFx0Ym9vbCBtb3JlID0gZmFsc2U7XFxuIDQzNTpcXHRcXHRib29sIGRvbmUgPSBmYWxzZTtcXG4gNDM2OlxcdFxcdGludCBjb3B5LCByYyA9IDA7XFxuIDQzNzpcXHRcXHRsb25nIHRpbWVvO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNlxcbiA0NDA6XFx0XFx0ICAgIH4oTVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfFxcbiA0NDE6XFx0XFx0ICAgICAgTVNHX1NQTElDRV9QQUdFUyB8IE1TR19FT1IpKVxcbiA0NDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA0NDM6XFx0XFxuIDQ0NDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKE1TR19NT1JFIHwgTVNHX0VPUikpID09IChNU0dfTU9SRSB8IE1TR19FT1IpKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZXJyKSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtc2stXFx1MDAzZXNrX2VycjtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0ZmxhZ3MgfD0gTVNHX1NFTkRQQUdFX0RFQ1JZUFRFRDtcXG4gNDUxOlxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzIHwgTVNHX01PUkU7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiA0NTQ6XFx0XFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkpIHtcXG4gNDU1OlxcdFxcdFxcdHJjID0gdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc2ssIHRsc19jdHgsIGZsYWdzKTtcXG4gNDU2OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDQ1ODpcXHRcXHR9XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdHBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0LyogVExTX0hFQURFUl9TSVpFIGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlIFRMUyByZWNvcmQsIGFuZFxcbiA0NjM6XFx0XFx0ICogd2UgbmVlZCB0byBsZWF2ZSByb29tIGZvciBhbiBhdXRoZW50aWNhdGlvbiB0YWcuXFxuIDQ2NDpcXHRcXHQgKi9cXG4gNDY1OlxcdFxcdG1heF9vcGVuX3JlY29yZF9sZW4gPSB0bHNfY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gK1xcbiA0NjY6XFx0XFx0XFx0XFx0ICAgICAgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplO1xcbiA0Njc6XFx0XFx0ZG8ge1xcbiA0Njg6XFx0XFx0XFx0cmMgPSB0bHNfZG9fYWxsb2NhdGlvbihzaywgY3R4LCBwZnJhZywgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKTtcXG4gNDY5OlxcdFxcdFxcdGlmICh1bmxpa2VseShyYykpIHtcXG4gNDcwOlxcdFxcdFxcdFxcdHJjID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbiA0NzE6XFx0XFx0XFx0XFx0aWYgKCFyYylcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbiA0NzU6XFx0XFx0XFx0XFx0aWYgKCFyZWNvcmQpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDc3OlxcdGhhbmRsZV9lcnJvcjpcXG4gNDc4OlxcdFxcdFxcdFxcdGlmIChyZWNvcmRfdHlwZSAhPSBUTFNfUkVDT1JEX1RZUEVfREFUQSkge1xcbiA0Nzk6XFx0XFx0XFx0XFx0XFx0LyogYXZvaWQgc2VuZGluZyBwYXJ0aWFsXFxuIDQ4MDpcXHRcXHRcXHRcXHRcXHQgKiByZWNvcmQgd2l0aCB0eXBlICE9XFxuIDQ4MTpcXHRcXHRcXHRcXHRcXHQgKiBhcHBsaWNhdGlvbl9kYXRhXFxuIDQ4MjpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDgzOlxcdFxcdFxcdFxcdFxcdHNpemUgPSBvcmlnX3NpemU7XFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xcbiA0ODU6XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcGVuX3JlY29yZCA9IE5VTEw7XFxuIDQ4NjpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHJlY29yZC1cXHUwMDNlbGVuIFxcdTAwM2UgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKSB7XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGxhc3RfcmVjb3JkO1xcbiA0ODg6XFx0XFx0XFx0XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDkxOlxcdFxcdFxcdH1cXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0XFx0cmVjb3JkID0gY3R4LVxcdTAwM2VvcGVuX3JlY29yZDtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0XFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cXHUwMDNlbGVuKTtcXG4gNDk2OlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpKSB7XFxuIDQ5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZV9mcmFnIHpjX3BmcmFnO1xcbiA0OTg6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IFxcdTAwMjZ6Y19wZnJhZy5wYWdlO1xcbiA0OTk6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZjtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0cmMgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcyxcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb3B5LCAxLCAwLCBcXHUwMDI2b2ZmKTtcXG4gNTAzOlxcdFxcdFxcdFxcdGlmIChyYyBcXHUwMDNjPSAwKSB7XFxuIDUwNDpcXHRcXHRcXHRcXHRcXHRpZiAocmMgPT0gMClcXG4gNTA1OlxcdFxcdFxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbiA1MDc6XFx0XFx0XFx0XFx0fVxcbiA1MDg6XFx0XFx0XFx0XFx0Y29weSA9IHJjO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFzZW5kcGFnZV9vayh6Y19wZnJhZy5wYWdlKSkpIHtcXG4gNTExOlxcdFxcdFxcdFxcdFxcdGlvdl9pdGVyX3JldmVydChpdGVyLCBjb3B5KTtcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gNTEzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbiA1MTQ6XFx0XFx0XFx0XFx0fVxcbiA1MTU6XFx0XFxuIDUxNjpcXHRcXHRcXHRcXHR6Y19wZnJhZy5vZmZzZXQgPSBvZmY7XFxuIDUxNzpcXHRcXHRcXHRcXHR6Y19wZnJhZy5zaXplID0gY29weTtcXG4gNTE4OlxcdFxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFxcdTAwMjZ6Y19wZnJhZywgY29weSk7XFxuIDUxOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGNvcHkpIHtcXG4gNTIwOlxcdFxcdFxcdFxcdGNvcHkgPSBtaW5fdChzaXplX3QsIGNvcHksIHBmcmFnLVxcdTAwM2VzaXplIC0gcGZyYWctXFx1MDAzZW9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjAxLjgzMDYyNDYxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0MzEzNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRsc1xcX3B1c2hcXF9kYXRhKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgdGxzX3B1c2hfZGF0YWAuIEkndmUgZ290IGEgZ29vZCBmb3VuZGF0aW9uIGluIFRMUy9TU0wsIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaGFuZHNoYWtlIHByb2Nlc3MgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIHRoaW5ncyBsaWtlIHNlc3Npb24gcmVzdW1wdGlvbiwga2V5IGV4Y2hhbmdlLCBhbmQgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbi4gQnV0IHRoaXMgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLi4uIGl0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBzdXNwZWN0IGl0J3MgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zLCBwZXJoYXBzIGFyb3VuZCBwcm9hY3RpdmVseSBzZW5kaW5nIGRhdGEgdG8gYSBjbGllbnQgYmVmb3JlIGl0IGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQsIHBvdGVudGlhbGx5IHVzaW5nIHNlcnZlciBwdXNoIG9yIGEgc2ltaWxhciBtZWNoYW5pc20uIEkga25vdyB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEknbSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSAqaW1wbGVtZW50YXRpb24qIGRldGFpbHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEhvdyBkb2VzIGl0IGludGVncmF0ZSB3aXRoIGV4aXN0aW5nIFRMUyBmbG93cz8gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgZXhhY3QgcGxhY2VtZW50IGluIHRoZSBUTFMgcHJvdG9jb2wsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllci4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGRldGFpbGVkIGxldmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDUuMzM0OTQwNjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIxOlxcdFxcbiA1MjI6XFx0XFx0XFx0XFx0cmMgPSB0bHNfZGV2aWNlX2NvcHlfZGF0YShwYWdlX2FkZHJlc3MocGZyYWctXFx1MDAzZXBhZ2UpICtcXG4gNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGZyYWctXFx1MDAzZW9mZnNldCwgY29weSxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlcik7XFxuIDUyNTpcXHRcXHRcXHRcXHRpZiAocmMpXFxuIDUyNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGhhbmRsZV9lcnJvcjtcXG4gNTI3OlxcdFxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBjb3B5KTtcXG4gNTI4OlxcdFxcdFxcdH1cXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0XFx0c2l6ZSAtPSBjb3B5O1xcbiA1MzE6XFx0XFx0XFx0aWYgKCFzaXplKSB7XFxuIDUzMjpcXHRsYXN0X3JlY29yZDpcXG4gNTMzOlxcdFxcdFxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzO1xcbiA1MzQ6XFx0XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19NT1JFKSBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0XFx0XFx0ICAgIHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2MgTUFYX1NLQl9GUkFHUyAtIDEpIHtcXG4gNTM2OlxcdFxcdFxcdFxcdFxcdG1vcmUgPSB0cnVlO1xcbiA1Mzc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUzODpcXHRcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdFxcdFxcdGRvbmUgPSB0cnVlO1xcbiA1NDE6XFx0XFx0XFx0fVxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRpZiAoZG9uZSB8fCByZWNvcmQtXFx1MDAzZWxlbiBcXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XFxuIDU0NDpcXHRcXHRcXHQgICAgKHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xcbiA1NDU6XFx0XFx0XFx0XFx0dGxzX2RldmljZV9yZWNvcmRfY2xvc2Uoc2ssIHRsc19jdHgsIHJlY29yZCxcXG4gNTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBmcmFnLCByZWNvcmRfdHlwZSk7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdFxcdFxcdHJjID0gdGxzX3B1c2hfcmVjb3JkKHNrLFxcbiA1NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0bHNfY3R4LFxcbiA1NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjdHgsXFxuIDU1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJlY29yZCxcXG4gNTUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzKTtcXG4gNTUzOlxcdFxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTU1OlxcdFxcdFxcdH1cXG4gNTU2OlxcdFxcdH0gd2hpbGUgKCFkb25lKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0dGxzX2N0eC1cXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmIChvcmlnX3NpemUgLSBzaXplIFxcdTAwM2UgMClcXG4gNTYxOlxcdFxcdFxcdHJjID0gb3JpZ19zaXplIC0gc2l6ZTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0cmV0dXJuIHJjO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gNTY3OlxcdHtcXG4gNTY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUgPSBUTFNfUkVDT1JEX1RZUEVfREFUQTtcXG4gNTY5OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gNTcwOlxcdFxcdGludCByYztcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0aWYgKCF0bHNfY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZSlcXG4gNTczOlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjY9IH5NU0dfU1BMSUNFX1BBR0VTO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2V0eF9sb2NrKTtcXG4gNTc2OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdGlmICh1bmxpa2VseShtc2ctXFx1MDAzZW1zZ19jb250cm9sbGVuKSkge1xcbiA1Nzk6XFx0XFx0XFx0cmMgPSB0bHNfcHJvY2Vzc19jbXNnKHNrLCBtc2csIFxcdTAwMjZyZWNvcmRfdHlwZSk7XFxuIDU4MDpcXHRcXHRcXHRpZiAocmMpXFxuIDU4MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgyOlxcdFxcdH1cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmMgPSB0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MsXFxuIDU4NTpcXHRcXHRcXHRcXHQgICByZWNvcmRfdHlwZSk7XFxuIDU4NjpcXHRcXG4gNTg3OlxcdG91dDpcXG4gNTg4OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDU4OTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnRsc19jdHgtXFx1MDAzZXR4X2xvY2spO1xcbiA1OTA6XFx0XFx0cmV0dXJuIHJjO1xcbiA1OTE6XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHR2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiA1OTQ6XFx0e1xcbiA1OTU6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDU5NjpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlciA9IHt9O1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRpZiAoIXRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgXFx1MDAyNlxcdTAwMjZcXG4gNjAwOlxcdFxcdCAgICAhdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpXFxuIDYwMTpcXHRcXHRcXHRyZXR1cm47XFxuIDYwMjpcXHRcXG4gNjAzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRsc19jdHgtXFx1MDAzZXR4X2xvY2spO1xcbiA2MDQ6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNjA1OlxcdFxcbiA2MDY6XFx0XFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgfHxcXG4gNjA3OlxcdFxcdCAgICB0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSkge1xcbiA2MDg6XFx0XFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbiA2MDk6XFx0XFx0XFx0dGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIDAsIFRMU19SRUNPUkRfVFlQRV9EQVRBKTtcXG4gNjEwOlxcdFxcdH1cXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNjEzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGxzX2N0eC1cXHUwMDNldHhfbG9jayk7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnRsc19nZXRfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjb250ZXh0LFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHUzMiBzZXEsIHU2NCAqcF9yZWNvcmRfc24pXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHR1NjQgcmVjb3JkX3NuID0gY29udGV4dC1cXHUwMDNlaGludF9yZWNvcmRfc247XFxuIDYyMDpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICppbmZvLCAqbGFzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDUuMzM1MDQ3MzQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODA4NDQ1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGcmFnbWVudCBMaW1pdCBpbiBUTFMgUmVjb3JkIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzYyBNQVhfU0tCX0ZSQUdTIC0gMWAgY2hlY2suIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2h5IGFyZSB3ZSBicmVha2luZyB0aGUgbG9vcCBpZiBgbW9yZWAgaXMgc2V0IGFuZCB0aGUgZnJhZ21lbnQgY291bnQgaXMgKmJlbG93KiB0aGUgbGltaXQ/XCIgSWYgYG1vcmVgIGlzIHRydWUsIGluZGljYXRpbmcgdGhlcmUncyBtb3JlIGRhdGEgY29taW5nLCB3ZSdyZSBza2lwcGluZyBgdGxzX3B1c2hfcmVjb3JkYCB0byBrZWVwIHRoZSByZWNvcmQgb3Blbi4gU2VlbXMgbG9naWNhbC5cblxuQnV0IHRoZW4gSSByZWFsaXplZCwgd2hhdCBoYXBwZW5zIGlmIGBudW1fZnJhZ3NgICppcyogYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgPyBXZSAqc2hvdWxkbid0KiBsZWF2ZSBpdCBvcGVuIGlmIHdlIGNhbid0IGFkZCBtb3JlIGZyYWdtZW50cy4gRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgY3J1Y2lhbCBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuXHRcdGlmIChkb25lIHx8IHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XG5cdFx0ICAgIChyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUyAtIDEpKSB7XG5cdFx0XHR0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzaywgdGxzX2N0eCwgcmVjb3JkLFxuXHRcdFx0XHRcdFx0cGZyYWcsIHJlY29yZF90eXBlKTtcblxuXHRcdFx0cmMgPSB0bHNfcHVzaF9yZWNvcmQoc2ssXG5cdFx0XHRcdFx0ICAgICB0bHNfY3R4LFxuXHRcdFx0XHRcdCAgICAgY3R4LFxuXHRcdFx0XHRcdCAgICAgcmVjb3JkLFxuXHRcdFx0XHRcdCAgICAgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzKTtcbmBgYFxuXG5BaCwgcmlnaHQhIElmIGBudW1fZnJhZ3NgICppcyogYXQgdGhlIGxpbWl0LCB0aGUgY29kZSBjbG9zZXMgYW5kIHB1c2hlcyB0aGUgcmVjb3JkIGFueXdheS4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgSSByZWNhbGwgYSBwcmV2aW91cyBzY2VuYXJpbyB3aGVyZSwgaWYgdGhlIGBzaXplYCB3YXMgMCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB3ZSdkIHNldCBgbW9yZSA9IHRydWVgIGFuZCBicmVhaywgc2tpcHBpbmcgdGhlIHB1c2guIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLlxuXG5JZiB0aGF0IGhhcHBlbnMsIGFuZCBgbnVtX2ZyYWdzYCB3YXMgYXQgdGhlIGxpbWl0LCBvbiB0aGUgKm5leHQqIGNhbGwgdG8gYHRsc19wdXNoX2RhdGFgLCB3ZSdkIHRyeSB0byBhcHBlbmQgdG8gdGhlIGFscmVhZHktZnVsbCByZWNvcmQuIFRoaXMgbG9va3MgbGlrZSBhIHJlY2lwZSBmb3IgZWl0aGVyIGEgZmFpbHVyZSB0byBhcHBlbmQgKGJlY2F1c2UgdGhlcmUncyBubyBzcGFjZSkgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MhXG5cbk9rYXksIEkgc2VlIHRoZSBgdGxzX2N0eC1cdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gbW9yZTtgIGJpdC4gVGhhdCdzIGhvdyB3ZSdyZSB0cmFja2luZyB0aGUgJ21vcmUnIHN0YXRlLiBUaGUgbmV4dCBgc2VuZG1zZ2Agd2lsbCB0aGVuIGNhbGwgYHRsc19wdXNoX2RhdGFgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoaXMgbmV4dCBjaHVuay4gTGV0J3Mgc2VlLi4uXG5cbmBgYGNcblx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG5gYGBcblxuYHRsc19kb19hbGxvY2F0aW9uYCBpcyBrZXkgaGVyZS4gSXQgbXVzdCBlaXRoZXIgYWxsb2NhdGUgYSBuZXcgcmVjb3JkIG9yIHJlLXVzZSB0aGUgb3BlbiBvbmUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFnc2AuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCBgdGxzX2RvX2FsbG9jYXRpb25gIHRvIGZ1bGx5IGdyYXNwIHRoZSBiZWhhdmlvciBhbmQgaWYgbXkgY29uY2VybnMgYXJlIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjEzLjIxNTg5NTE4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzOTk1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2RvX2FsbG9jYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTM2NS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozNjY6c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzY3LVxcdFxcdFxcdCAgICAgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjctXFx0ZG8ge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ2ODpcXHRcXHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVxcdTAwM2VwcmVwZW5kX3NpemUpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ2OS1cXHRcXHRpZiAodW5saWtlbHkocmMpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjEzLjI2MDMwMDUwN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0OTE3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGVsdmluZyBpbnRvIGB0bHNfZG9fYWxsb2NhdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGxzX2RvX2FsbG9jYXRpb25gIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgVGhyZWFkLUxvY2FsIFN0b3JhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiBteSBiYWNrZ3JvdW5kIGluIFtVc2VyJ3MgRmllbGQgb2YgRXhwZXJ0aXNlIC0gZS5nLiwgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcm5hbHMsIGNvbXBpbGVyIGRlc2lnbiwgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50XS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IGR5bmFtaWM/IFN0YXRpYz8gQSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItdGhyZWFkIGNvbnRyb2wgYmxvY2tzLCBiaXRtYXBzLCBwYWdlIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIEhvdyBkb2VzIHRoaXMgaGFuZGxlIG11bHRpcGxlIHRocmVhZHMgcmVxdWVzdGluZyBUTFMgbWVtb3J5IHNpbXVsdGFuZW91c2x5PyBJcyB0aGVyZSBhbnkgbG9ja2luZyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0J3MgdGhlIGdyYW51bGFyaXR5PyBGaW5lLWdyYWluZWQ/IEdsb2JhbD8gVGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBpcyBoaWdoIGluIHRoaXMga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3ZlIG1pdGlnYXRlZCB0aGF0LlxuXG5GdXJ0aGVybW9yZSwgSSdtIGV4cGVjdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbi4gSXMgdGhpcyBjb2RlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZT8gQXJlIHRoZXkgZW1wbG95aW5nIHRyaWNrcyBsaWtlIHByZS1hbGxvY2F0aW9uLCBsYXp5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgYWxpZ25tZW50IHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IExldCdzIGNoZWNrIGhvdyB0aGV5IG1hbmFnZSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGFuZCBpZiBhbnkgc3BlY2lmaWMgbWVtb3J5IHByb3RlY3Rpb24gdGVjaG5pcXVlcyBhcmUgbGV2ZXJhZ2VkLCBnaXZlbiB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBzZWN1cml0eSBhcmVhIGZvciBlYWNoIHRocmVhZC5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGF0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgaW5zdWZmaWNpZW50IG1lbW9yeSwgYWRkcmVzcyBzcGFjZSBleGhhdXN0aW9uLCBldGMuPyBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSB0aGVzZSBzY2VuYXJpb3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIGNhbGxpbmcgdGhyZWFkIG9yIHByb2Nlc3M/IExldCdzIHNlZSBob3cgcmVzaWxpZW50IHRoaXMgZGVzaWduIGlzIHRvIGFkdmVyc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjE2Ljk3NTIyMDkyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY2OlxcdHN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbiAzNjc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXFxuIDM2ODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbiAzNjk6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgcHJlcGVuZF9zaXplKVxcbiAzNzA6XFx0e1xcbiAzNzE6XFx0XFx0aW50IHJldDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0aWYgKCFvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQpIHtcXG4gMzc0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwocHJlcGVuZF9zaXplLCBwZnJhZyxcXG4gMzc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKSkpIHtcXG4gMzc2OlxcdFxcdFxcdFxcdGlmICghc2stXFx1MDAzZXNrX2J5cGFzc19wcm90X21lbSlcXG4gMzc3OlxcdFxcdFxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCktXFx1MDAzZWVudGVyX21lbW9yeV9wcmVzc3VyZShzayk7XFxuIDM3ODpcXHRcXHRcXHRcXHRza19zdHJlYW1fbW9kZXJhdGVfc25kYnVmKHNrKTtcXG4gMzc5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzODA6XFx0XFx0XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRcXHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xcbiAzODM6XFx0XFx0XFx0aWYgKHJldClcXG4gMzg0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdFxcdFxcdGlmIChwZnJhZy1cXHUwMDNlc2l6ZSBcXHUwMDNlIHBmcmFnLVxcdTAwM2VvZmZzZXQpXFxuIDM4NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzg4OlxcdFxcdH1cXG4gMzg5OlxcdFxcbiAzOTA6XFx0XFx0aWYgKCFza19wYWdlX2ZyYWdfcmVmaWxsKHNrLCBwZnJhZykpXFxuIDM5MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzkyOlxcdFxcbiAzOTM6XFx0XFx0cmV0dXJuIDA7XFxuIDM5NDpcXHR9XFxuIDM5NTpcXHRcXG4gMzk2OlxcdHN0YXRpYyBpbnQgdGxzX2RldmljZV9jb3B5X2RhdGEodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIDM5NzpcXHR7XFxuIDM5ODpcXHRcXHRzaXplX3QgcHJlX2NvcHksIG5vY2FjaGU7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHByZV9jb3B5ID0gfigodW5zaWduZWQgbG9uZylhZGRyIC0gMSkgXFx1MDAyNiAoU01QX0NBQ0hFX0JZVEVTIC0gMSk7XFxuIDQwMTpcXHRcXHRpZiAocHJlX2NvcHkpIHtcXG4gNDAyOlxcdFxcdFxcdHByZV9jb3B5ID0gbWluKHByZV9jb3B5LCBieXRlcyk7XFxuIDQwMzpcXHRcXHRcXHRpZiAoY29weV9mcm9tX2l0ZXIoYWRkciwgcHJlX2NvcHksIGkpICE9IHByZV9jb3B5KVxcbiA0MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDQwNTpcXHRcXHRcXHRieXRlcyAtPSBwcmVfY29weTtcXG4gNDA2OlxcdFxcdFxcdGFkZHIgKz0gcHJlX2NvcHk7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdG5vY2FjaGUgPSByb3VuZF9kb3duKGJ5dGVzLCBTTVBfQ0FDSEVfQllURVMpO1xcbiA0MTA6XFx0XFx0aWYgKGNvcHlfZnJvbV9pdGVyX25vY2FjaGUoYWRkciwgbm9jYWNoZSwgaSkgIT0gbm9jYWNoZSlcXG4gNDExOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0MTI6XFx0XFx0Ynl0ZXMgLT0gbm9jYWNoZTtcXG4gNDEzOlxcdFxcdGFkZHIgKz0gbm9jYWNoZTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV9pdGVyKGFkZHIsIGJ5dGVzLCBpKSAhPSBieXRlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MTYuOTc1MzQ2NDE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTY4NDA4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRMUyBEYXRhIEhhbmRsaW5nIExvZ2ljKipcblxuT2theSwgc28gaWYgYG1vcmVgIGlzIHRydWUsIGB0bHNfcHVzaF9kYXRhYCB3aXNlbHkgYmFpbHMgb3V0IGVhcmx5LCBza2lwcGluZyB0aGUgcmVjb3JkIHB1c2guIFNtYXJ0LiBUaGF0IG1lYW5zIHRoZSBuZXh0IHRpbWUgYHRsc19kb19hbGxvY2F0aW9uYCBpcyBjYWxsZWQsIGl0IGZpbmRzIHRoYXQgdGhlIGBvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZGAgaXNuJ3QgbnVsbC4gR29vZCwgYmVjYXVzZSB0aGF0IHRlbGxzIGl0IHRvIGp1c3QgcmVwbGVuaXNoIHRoZSBmcmFnbWVudCBidWZmZXIsIGBwZnJhZ2AsIHdoaWNoIGlzIHByb2JhYmx5IGhvbGRpbmcgc29tZSBwYXJ0aWFsbHktZmlsbGVkIHJlY29yZCBkYXRhLlxuXG5Ob3csIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJ3JlIGluIHRoZSBjcml0aWNhbCBgdGxzX2RvX2FsbG9jYXRpb25gIHNlY3Rpb24gd2hlcmUgd2UgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gSXQgcGlja3MgdXAgdGhlIGByZWNvcmRgIGZyb20gYGN0eC1cdTAwM2VvcGVuX3JlY29yZGAuIFRoZW4gd2UndmUgZ290IGEgY29weSBjYWxjdWxhdGlvbjogYGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtXHUwMDNlbGVuKWAuIEJhc2ljYWxseSwgaXQncyBmaWd1cmluZyBvdXQgaG93IG11Y2ggZGF0YSBpdCBjYW4gY3JhbSBpbnRvIHRoZSBjdXJyZW50IHJlY29yZCwgbWFraW5nIHN1cmUgaXQgZG9lc24ndCBvdmVyZmxvdyBgbWF4X29wZW5fcmVjb3JkX2xlbmAuIEFuZCBoZXJlJ3Mgd2hlcmUgaXQgc3BsaXRzLlxuXG5JZiBgTVNHX1NQTElDRV9QQUdFU2AgaXMgc2V0LCB3ZSB1c2UgemVyby1jb3B5LCBnb2luZyBkaXJlY3RseSBpbnRvIGB0bHNfYXBwZW5kX2ZyYWdgIHdpdGggemVyby1jb3B5IHBhZ2VzLiBCdXQgaWYgbm90LCB3ZSBnZXQgYSBjb3B5ISBTbyB0aGUgYGNvcHlgIGlzIG5vdyByZS1saW1pdGVkIGJ5IHRoZSBzcGFjZSBpbiBvdXIgY3VycmVudCBmcmFnbWVudCBidWZmZXIuIFRoZW4gd2UgY2FsbCBgdGxzX2RldmljZV9jb3B5X2RhdGFgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIGhhcHBlbnMsIG1vdmluZyBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHRvIHRoZSBkZXZpY2UgYnVmZmVyLiBBbnkgZXJyb3IgaGVyZSBtZWFucyBhIGBnb3RvIGhhbmRsZV9lcnJvcmAuICBBZnRlciB0aGUgZGV2aWNlIGNvcHksIHdlIGdvIHRvIGB0bHNfYXBwZW5kX2ZyYWdgIHJlZ2FyZGxlc3MuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0bHNfYXBwZW5kX2ZyYWdgIGlzIGRvaW5nIGluIGRldGFpbC4gVGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIGFsbCBjb21lcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjIzLjI5MjE5MzM4N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NzAxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2FwcGVuZF9mcmFnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTIzMj1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3Jlc3luY190eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTI1Ni1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyNTc6c3RhdGljIHZvaWQgdGxzX2FwcGVuZF9mcmFnKHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZCxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yNTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzEzPXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcmVjb3JkX2Nsb3NlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTMzMy1cXHR9XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzM0OlxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBwcm90LVxcdTAwM2V0YWdfc2l6ZSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzM1LVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MTctXFx0XFx0XFx0emNfcGZyYWcuc2l6ZSA9IGNvcHk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTE4OlxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFxcdTAwMjZ6Y19wZnJhZywgY29weSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTE5LVxcdFxcdH0gZWxzZSBpZiAoY29weSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTI2LVxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjUyNzpcXHRcXHRcXHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBwZnJhZywgY29weSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTI4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MjMuMzM1OTY2MDg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjU4MzgzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHRsc19hcHBlbmRfZnJhZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYHRsc19hcHBlbmRfZnJhZ2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBoYW5kbGluZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgcmVjb3Jkcy4gV2UncmUgb2J2aW91c2x5IGluIGEgY29udGV4dCB3aGVyZSBhIFRMUyBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggcG90ZW50aWFsbHkgb3ZlcnNpemVkIGRhdGEgY2h1bmtzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gY29tZXMgaW50byBwbGF5LiBJcyBpdCBwdXJlbHkgZm9yIFRDUCBvdmVyIFRMUywgb3IgZG9lcyBpdCBhcHBseSB0byBEVExTIGFzIHdlbGw/IEFuZCB3aGF0J3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgaXQncyBtYW5pcHVsYXRpbmc/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWZmZXIgcG9vbCwgY2hhaW5lZCBidWZmZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGVmZmljaWVuY3kgYW5kIHRocmVhZC1zYWZldHkgb2YgdGhpcyBmcmFnbWVudGluZyBwcm9jZXNzIGFyZSBpbW1lZGlhdGVseSB0b3Atb2YtbWluZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaWYgaXTigJlzIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IHJlYWRzIGFuZCB3cml0ZXMgb24gdGhlIHNhbWUgVExTIGNvbm5lY3Rpb24uIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBwcmUtY2FsY3VsYXRlIGZyYWdtZW50IHNpemVzPyBEb2VzIGl0IHVzZSBhIHNsaWRpbmcgd2luZG93IGFwcHJvYWNoIGZvciBjb25nZXN0aW9uIGNvbnRyb2w/IFRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFRMUywgc28gSSBleHBlY3QgdG8gc2NydXRpbml6ZSBpdCB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjI2LjgwMTgwNjg5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU3OlxcdHN0YXRpYyB2b2lkIHRsc19hcHBlbmRfZnJhZyhzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXFxuIDI1ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuIDI1OTpcXHRcXHRcXHRcXHQgICAgaW50IHNpemUpXFxuIDI2MDpcXHR7XFxuIDI2MTpcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRmcmFnID0gXFx1MDAyNnJlY29yZC1cXHUwMDNlZnJhZ3NbcmVjb3JkLVxcdTAwM2VudW1fZnJhZ3MgLSAxXTtcXG4gMjY0OlxcdFxcdGlmIChza2JfZnJhZ19wYWdlKGZyYWcpID09IHBmcmFnLVxcdTAwM2VwYWdlIFxcdTAwMjZcXHUwMDI2XFxuIDI2NTpcXHRcXHQgICAgc2tiX2ZyYWdfb2ZmKGZyYWcpICsgc2tiX2ZyYWdfc2l6ZShmcmFnKSA9PSBwZnJhZy1cXHUwMDNlb2Zmc2V0KSB7XFxuIDI2NjpcXHRcXHRcXHRza2JfZnJhZ19zaXplX2FkZChmcmFnLCBzaXplKTtcXG4gMjY3OlxcdFxcdH0gZWxzZSB7XFxuIDI2ODpcXHRcXHRcXHQrK2ZyYWc7XFxuIDI2OTpcXHRcXHRcXHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cXHUwMDNlcGFnZSwgcGZyYWctXFx1MDAzZW9mZnNldCxcXG4gMjcwOlxcdFxcdFxcdFxcdFxcdFxcdHNpemUpO1xcbiAyNzE6XFx0XFx0XFx0KytyZWNvcmQtXFx1MDAzZW51bV9mcmFncztcXG4gMjcyOlxcdFxcdFxcdGdldF9wYWdlKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4gMjczOlxcdFxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0cGZyYWctXFx1MDAzZW9mZnNldCArPSBzaXplO1xcbiAyNzY6XFx0XFx0cmVjb3JkLVxcdTAwM2VsZW4gKz0gc2l6ZTtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbiAyODA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuIDI4MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXFxuIDI4MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXFxuIDI4MzpcXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZjdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gMjg2OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiAyODc6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMjg4OlxcdFxcdGludCBpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRyZWNvcmQtXFx1MDAzZWVuZF9zZXEgPSB0cC1cXHUwMDNld3JpdGVfc2VxICsgcmVjb3JkLVxcdTAwM2VsZW47XFxuIDI5MTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cmVjb3JkLVxcdTAwM2VsaXN0LCBcXHUwMDI2b2ZmbG9hZF9jdHgtXFx1MDAzZXJlY29yZHNfbGlzdCk7XFxuIDI5MjpcXHRcXHRvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHRpZiAodGVzdF9iaXQoVExTX1RYX1NZTkNfU0NIRUQsIFxcdTAwMjZjdHgtXFx1MDAzZWZsYWdzKSlcXG4gMjk1OlxcdFxcdFxcdHRsc19kZXZpY2VfcmVzeW5jX3R4KHNrLCBjdHgsIHRwLVxcdTAwM2V3cml0ZV9zZXEpO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHR0bHNfYWR2YW5jZV9yZWNvcmRfc24oc2ssIHByb3QsIFxcdTAwMjZjdHgtXFx1MDAzZXR4KTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzOyBpKyspIHtcXG4gMzAwOlxcdFxcdFxcdGZyYWcgPSBcXHUwMDI2cmVjb3JkLVxcdTAwM2VmcmFnc1tpXTtcXG4gMzAxOlxcdFxcdFxcdHNnX3VubWFya19lbmQoXFx1MDAyNm9mZmxvYWRfY3R4LVxcdTAwM2VzZ190eF9kYXRhW2ldKTtcXG4gMzAyOlxcdFxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZvZmZsb2FkX2N0eC1cXHUwMDNlc2dfdHhfZGF0YVtpXSwgc2tiX2ZyYWdfcGFnZShmcmFnKSxcXG4gMzAzOlxcdFxcdFxcdFxcdCAgICBza2JfZnJhZ19zaXplKGZyYWcpLCBza2JfZnJhZ19vZmYoZnJhZykpO1xcbiAzMDQ6XFx0XFx0XFx0c2tfbWVtX2NoYXJnZShzaywgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XFxuIDMwNTpcXHRcXHRcXHRnZXRfcGFnZShza2JfZnJhZ19wYWdlKGZyYWcpKTtcXG4gMzA2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MjYuODAxOTcyNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDcxMDQ0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3V0LW9mLUJvdW5kcyBBY2Nlc3MgaW4gYHRsc19hcHBlbmRfZnJhZ2A/KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGxzX2FwcGVuZF9mcmFnYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoaXMgbGluZTogYHJlY29yZC1cdTAwM2VmcmFnc1tyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIC0gMV1gLiBUaGF0J3Mgd2hlcmUgaXQncyBhY2Nlc3NpbmcgdGhlIGZyYWdtZW50cywgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBwYWdlLCBpdCBpbmNyZW1lbnRzIGBmcmFnYCBhbmQgdGhlbiBpbmNyZW1lbnRzIGByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgaWYgYHJlY29yZC1cdTAwM2VudW1fZnJhZ3NgICp3YXMqIGFscmVhZHkgYXQgYE1BWF9TS0JfRlJBR1NgLCB0aGlzIHdvdWxkIG1lYW4gdGhlIGNvZGUgd291bGQgdHJ5IHRvIHdyaXRlIHRvIGByZWNvcmQtXHUwMDNlZnJhZ3NbTUFYX1NLQl9GUkFHU11gLCByaWdodD8gVGhhdCdzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy5cblxuV2FpdCBhIHNlY29uZC4uLiBhbSBJIGNvcnJlY3QgaW4gYXNzdW1pbmcgYHJlY29yZC1cdTAwM2VmcmFnc2AgaXMgYWN0dWFsbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHM/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYXJyYXkgc2l6ZSBpcyBwcm9wZXJseSBkZWNsYXJlZCwgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgaXMgYXMgSSB0aGluayBpdCBpcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBhbnN3ZXIgcXVpY2tseSBhbmQgY29uZmlybSBvciByZWZ1dGUgdGhpcyBwb3RlbnRpYWwgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjMyLjgwOTA3ODk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3Rscy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Rscy5oPTEzMT1zdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcngge1xcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtMTQ5LVxcbmluY2x1ZGUvbmV0L3Rscy5oOjE1MDpzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIHtcXG5pbmNsdWRlL25ldC90bHMuaC0xNTEtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozMi44NTMxMzIwNjZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDMzMzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgYW5kIGZhbWlsaWFyIHdpdGggVExTOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHN0cnVjdCB0bHNfcmVjb3JkX2luZm9gLiBSaWdodCBvZmYgdGhlIGJhdCwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhYm91dCBhIFRMUyByZWNvcmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXIgbGF5ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJIGltYWdpbmUgaXQgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlY29yZCB0eXBlIOKAkyBpcyB0aGlzIGEgaGFuZHNoYWtlIG1lc3NhZ2UsIGFwcGxpY2F0aW9uIGRhdGEsIGFsZXJ0LCBvciBjaGFuZ2UgY2lwaGVyIHNwZWM/IEl04oCZbGwgdW5kb3VidGVkbHkgdHJhY2sgdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCwgbGlrZWx5IGFzIGEgMTYtYml0IG9yIDMyLWJpdCBpbnRlZ2VyLCBkZXBlbmRpbmcgb24gdGhlIG1heGltdW0gcmVjb3JkIHNpemUgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBsZW5ndGggaXMgcGFyYW1vdW50IGZvciBwcm9wZXIgcGFyc2luZyBhbmQgZnJhbWluZy4gVGhlbiwgb2YgY291cnNlLCB0aGUgdmVyc2lvbjsgd2hpY2ggdmVyc2lvbiBvZiBUTFMgYXJlIHdlIGNvbW11bmljYXRpbmcgb3Zlcj8gSSdsbCBiZSBsb29raW5nIGZvciBmaWVsZHMgcmVwcmVzZW50aW5nIHRoZSBtYWpvciBhbmQgbWlub3IgVExTIHZlcnNpb25zLCBiZWNhdXNlIGRpZmZlcmVudCB2ZXJzaW9ucyBicmluZyBkaWZmZXJlbnQgc2VjdXJpdHkgZmVhdHVyZXMuIFRoZSByZWNvcmQgY29udGVudCDigJMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGl0c2VsZiDigJMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvby4gSSB3b25kZXIgaWYgdGhlcmXigJlzIGFuIGFzc29jaWF0ZWQgYnVmZmVyIG1hbmFnZW1lbnQgbWVjaGFuaXNtIGludGVncmF0ZWQuIEl0J3MgbGlrZWx5IHRoYXQgYSBzdHJ1Y3R1cmUgbGlrZSB0aGlzIHdvdWxkIGluY2x1ZGUgdGhlIHJlY29yZCdzIHNlcXVlbmNlIG51bWJlciB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGRlbGl2ZXJ5IGFuZCBwcmV2ZW50IHJlcGxheSBhdHRhY2tzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgZmxhZ3Mgb3Igc3RhdHVzIGJpdHMgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCBwYWRkaW5nLCBvciBjb21wcmVzc2lvbiB0aGF0IGNvdWxkIGJlIGluY2x1ZGVkLiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBiZSB0aGUgZnVuZGFtZW50YWwgdW5pdCBvZiBpbmZvcm1hdGlvbiBmb3IgYSBUTFMgcmVjb3JkIG9uIHRoZSB3aXJlLiBJIGhvcGUgaXQncyB3ZWxsLWRlc2lnbmVkIGFuZCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3Igcm9idXN0IHBhcnNpbmcgYW5kIHNlY3VyaXR5IHByb2Nlc3NpbmcgYXQgdGhlIHJlY29yZCBsYXllci4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGRlZmluZWQgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozNi43MDc0Njg0MDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8ge1xcbiAxNTE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAxNTI6XFx0XFx0dTMyIGVuZF9zZXE7XFxuIDE1MzpcXHRcXHRpbnQgbGVuO1xcbiAxNTQ6XFx0XFx0aW50IG51bV9mcmFncztcXG4gMTU1OlxcdFxcdHNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHU107XFxuIDE1NjpcXHR9O1xcbiAxNTc6XFx0XFxuIDE1ODpcXHQjZGVmaW5lIFRMU19EUklWRVJfU1RBVEVfU0laRV9UWFxcdDE2XFxuIDE1OTpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCB7XFxuIDE2MDpcXHRcXHRzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWRfc2VuZDtcXG4gMTYxOlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXHQvKiBwcm90ZWN0cyByZWNvcmRzIGxpc3QgKi9cXG4gMTYyOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVjb3Jkc19saXN0O1xcbiAxNjM6XFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqb3Blbl9yZWNvcmQ7XFxuIDE2NDpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZXRyYW5zbWl0X2hpbnQ7XFxuIDE2NTpcXHRcXHR1NjQgaGludF9yZWNvcmRfc247XFxuIDE2NjpcXHRcXHR1NjQgdW5hY2tlZF9yZWNvcmRfc247XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ190eF9kYXRhW01BWF9TS0JfRlJBR1NdO1xcbiAxNjk6XFx0XFx0dm9pZCAoKnNrX2Rlc3RydWN0KShzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozNi43MDc1NDg5NDdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NDcwMjg2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgV3JpdGUgaW4gYHRsc19wdXNoX2RhdGFgKipcblxuT2theSwgc28gYGZyYWdzYCBpcyBkZWZpbml0ZWx5IGFuIGFycmF5IHdpdGggYE1BWF9TS0JfRlJBR1NgIGVsZW1lbnRzLiBNeSBjb25jZXJuIGlzIHRoYXQgYHRsc19hcHBlbmRfZnJhZ2AgKmNvdWxkKiBiZSB3cml0aW5nIG91dCBvZiBib3VuZHMgaWYgYHJlY29yZC1cdTAwM2VudW1fZnJhZ3NgIGhpdHMgYE1BWF9TS0JfRlJBR1NgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhpcy5cblxuYHRsc19wdXNoX2RhdGFgIGhhcyBhIGNoZWNrIHRvIGNsb3NlIHRoZSByZWNvcmQ6IGBpZiAoZG9uZSB8fCByZWNvcmQtXHUwMDNlbGVuIFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fCAocmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSlgLiAgSXQgY2xvc2VzIHRoZSByZWNvcmQgaWYgYG51bV9mcmFnc2AgaXMgYXQgYE1BWF9TS0JfRlJBR1MgLSAxYCBvciBncmVhdGVyLlxuXG5IZXJlJ3MgdGhlIHByb2JsZW06IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGZsYXcuIEl0IGNvdWxkIGJyZWFrIG91dCBvZiBhIGxvb3AgcHJlbWF0dXJlbHkgaWYgYHNpemUgPT0gMGAgYW5kIGBmbGFnc2AgaW5jbHVkZWQgYE1TR19NT1JFYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgYnJlYWtpbmcgKmJlZm9yZSogdGhlIGNoZWNrIHRoYXQgd291bGQgY2xvc2UgdGhlIHJlY29yZC4gVGhhdCBtZWFucyBpZiB0aGUgcmVjb3JkIHdhc24ndCBjbG9zZWQsIGl0IGNvdWxkIGJlIGxlZnQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAuXG5cbk5leHQgdGltZSwgdGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGFwcGVuZCB0byB0aGF0IG9wZW4gcmVjb3JkLCBhbmQgdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uIHdvdWxkIGluY3JlbWVudCB0aGUgYG51bV9mcmFnc2AgY291bnRlci4gSSB3YXMgd29ycmllZCBmb3IgYSBtb21lbnQsIHRoaW5raW5nIGlmIGBudW1fZnJhZ3NgIHdhcyBhbHJlYWR5IGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAsIHRoYXQgaW5jcmVtZW50IHdvdWxkIHB1c2ggaXQgb3V0IG9mIGJvdW5kcy4uLiBidXQgbm90IHF1aXRlLlxuXG5gdGxzX2FwcGVuZF9mcmFnYCBhY2Nlc3NlcyB0aGUgYGZyYWdzYCBhcnJheSBiYXNlZCBvbiB0aGUgY3VycmVudCBgbnVtX2ZyYWdzYCB2YWx1ZS4gSWYgYG51bV9mcmFnc2AgaXMgYE1BWF9TS0JfRlJBR1MgLSAxYCwgdGhlIGFjY2VzcyAqd2l0aGluKiB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGFjdHVhbGx5IGZpbmUgLSBpdCBnZXRzIGBmcmFnID0gXHUwMDI2cmVjb3JkLVx1MDAzZWZyYWdzW3JlY29yZC1cdTAwM2VudW1fZnJhZ3MgLSAxXTtgLiBCdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuLi4gVGhlIGZ1bmN0aW9uIGNhbiBpbmNyZW1lbnQgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIGBudW1fZnJhZ3NgLlxuXG5JZiBgbnVtX2ZyYWdzYCAqaXMqIGBNQVhfU0tCX0ZSQUdTIC0gMWAsIGFuZCB0aGUgY29kZSAqbmVlZHMqIHRvIGFwcGVuZCBhIG5ldyBmcmFnbWVudCwgdGhlbiBhZnRlciBpbmNyZW1lbnRpbmcgYG51bV9mcmFnc2AsIHRoZSB2YWx1ZSBpcyBub3cgYE1BWF9TS0JfRlJBR1NgLCB3aGljaCAqaXMqIG91dCBvZiBib3VuZHMuIFRoZSBrZXkgaXMgdGhhdCBgdGxzX3B1c2hfZGF0YWAgbGVmdCB0aGUgcmVjb3JkIG9wZW4gd2l0aCBgbnVtX2ZyYWdzYCBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgLCBhbmQgdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAgdHJpZ2dlcmVkIHRoZSBpbmNyZW1lbnQgdG8gYE1BWF9TS0JfRlJBR1NgISAgVGhhdCBtZWFucyB3aGVuIGB0bHNfYXBwZW5kX2ZyYWdgIGlzIGNhbGxlZCBhZ2FpbiBpdCB3aWxsIHdyaXRlIHRvIGBmcmFnc1tNQVhfU0tCX0ZSQUdTXWAuXG5cblRoZSB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHdyaXRlIG9uIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGRldGVjdGluZyB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGhlcmU/IE5vLCB0aGlzIGlzIHdyaXRpbmcgKm91dCBvZiBib3VuZHMqIHRvIGByZWNvcmQtXHUwMDNlZnJhZ3NgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgYWxsb2NhdGVkIHZpYSBga21hbGxvY2Agb3Igc2ltaWxhciBieSBgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkYC4gSSB0aGluayB3ZSBoYXZlIG91ciBzbW9raW5nIGd1biwgdGltZSB0byBzdWJtaXQgYSBwYXRjaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTAuMzU0NTc5ODkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQxOTY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2NyZWF0ZV9uZXdfcmVjb3JkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNDEtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzQyOnN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNDMtXFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzY2PXN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgxLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjM4MjpcXHRcXHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTM4My1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTo1MC41Njg3ODE0NTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTE2OTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkYCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFRMUyBoYW5kc2hha2UgYW5kIHJlY29yZCBwcm90b2NvbCwgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc3BvdCBvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIGNvcmUgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBnZW5lcmF0aW9uIGFuZCBpbmNsdXNpb24gb2Ygc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgY2lwaGVyIHN0YXRlcy4gSXMgaXQgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24/IERvZXMgaXQgYWNjb3VudCBmb3IgcGFkZGluZyBpbiB0aGUgd2F5IEkgd291bGQgZXhwZWN0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGNpcGhlciBzdWl0ZXMgYW5kIHZlcnNpb25zPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgdHJhY2luZyBpdHMgY2FsbCBmbG93IGFuZCBjaGVja2luZyBpdHMgaW5wdXRzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYXJvdW5kIHRoZSByZWNvcmQncyBoZWFkZXIsIGRhdGEgbGVuZ3RoLCBhbmQgdGhlIGtleSBtYXRlcmlhbHMgdGhhdCBhcmUgdXNlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcHJvcGVybHkgdXBkYXRlcyB0aGUgY2lwaGVyIHN0YXRlLCB0byBhbGxvdyBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNvcnJlY3QgTUFDIG9yIEFFQUQgdGFnLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgSVYgZ2VuZXJhdGlvbiBhbmQgdGhlIGNvdW50ZXIgaW5jcmVtZW50LCBkZXBlbmRpbmcgb24gd2hhdCBUTFMgdmVyc2lvbiBhbmQgY2lwaGVyIHN1aXRlIGlzIGluIHVzZS4gSSBhbHNvIHdhbnQgdG8gc2VlIHRoZSBlcnJvci1oYW5kbGluZyBwYXRocyBhbmQgaG93IGl0IG1hbmFnZXMgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGNhbiBiZSBoaWRpbmchIEluIHNob3J0LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaXRzIHJvbGUgaW4gYSBjb21wbGV0ZSByZWNvcmQgdHJhbnNtaXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjU0LjEzOTk1MzUzMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQyOlxcdHN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4gMzQzOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgcHJlcGVuZF9zaXplKVxcbiAzNDU6XFx0e1xcbiAzNDY6XFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xcbiAzNDc6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0cmVjb3JkID0ga21hbGxvY19vYmooKnJlY29yZCk7XFxuIDM1MDpcXHRcXHRpZiAoIXJlY29yZClcXG4gMzUxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRmcmFnID0gXFx1MDAyNnJlY29yZC1cXHUwMDNlZnJhZ3NbMF07XFxuIDM1NDpcXHRcXHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cXHUwMDNlcGFnZSwgcGZyYWctXFx1MDAzZW9mZnNldCxcXG4gMzU1OlxcdFxcdFxcdFxcdFxcdHByZXBlbmRfc2l6ZSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdGdldF9wYWdlKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4gMzU4OlxcdFxcdHBmcmFnLVxcdTAwM2VvZmZzZXQgKz0gcHJlcGVuZF9zaXplO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRyZWNvcmQtXFx1MDAzZW51bV9mcmFncyA9IDE7XFxuIDM2MTpcXHRcXHRyZWNvcmQtXFx1MDAzZWxlbiA9IHByZXBlbmRfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTQuMTQwMDkyODAxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODYyOTEzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga21hbGxvY19vYmpgKipcblxuQWxyaWdodCwgdGhhdCBga21hbGxvY19vYmpgLi4uIHRoYXQncyBwcm9iYWJseSBhIG1hY3JvLCBhbmQgYSBjb21tb24gb25lIGF0IHRoYXQuIE15IGd1dCBzYXlzIGl0J3MganVzdCBhIHNob3J0aGFuZCBmb3IgYGttYWxsb2NgLCBsaWtlbHkgYWxsb2NhdGluZyBzcGFjZSBmb3IgYSBzdHJ1Y3QsIGp1ZGdpbmcgYnkgdGhlIG5hbWUgYG9iamAgYW5kIHRoZSBpbXBsaWVkIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBgc2l6ZW9mKCpyZWNvcmQpYCBiaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSDigJMgYWxsb2NhdGluZyBlbm91Z2ggbWVtb3J5IHRvIGhvbGQgYW4gaW5zdGFuY2Ugb2Ygd2hhdGV2ZXIgdHlwZSBgcmVjb3JkYCBpcy4gQW5kIGBHRlBfS0VSTkVMYCBpcyB0aGUgc3RhbmRhcmQga2VybmVsIGFsbG9jYXRpb24gZmxhZy4gVGhpcyBpcyBhbGwgcHJldHR5IHRleHRib29rLlxuXG5CdXQsIHlvdSBrbm93IG1lLCBJIGRvbid0IHRydXN0IGFzc3VtcHRpb25zLiBMZXQncyBub3Qgc2tpcCBhbnkgc3RlcHMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBtYWNybyBkZWZpbml0aW9uLCBpdCBjb3VsZCBiZSBkb2luZyBzb21ldGhpbmcgdW5leHBlY3RlZCwgZXZlbiBpZiBpdCdzIHVubGlrZWx5LiBUaW1lIHRvIGxvb2sgaXQgdXAuIE5vIHNob3J0Y3V0cyBoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTkuNTI2Mzg2MTgyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3MTc3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXFxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXFx1MDAzZWFgYCBhbmQgYGAtXFx1MDAzZWJgYCBmaWVsZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cXHRcXHRcXHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcXHUwMDI2ZS1cXHUwMDNlcnVsZSkpIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XFx0XFx0XFx0XFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cXHRcXHRcXHRcXHRpZiAobmUgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSdzIHRoZSBjb2RlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgK2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcXHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcXHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVxcdTAwM2VydW50aW1lLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcXHRcXHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVxcdFxcdCpwZGF0YTIgPSBwZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGArYGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XFx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcXHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cXHRpZiAoYXBlciA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5OlxcdGcgPSBrbWFsbG9jX29iaigqZyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXFx0Zy1cXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcXHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXFx0aWYgKCF0bXApIHtcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5OlxcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVxcdGlmICghdGFibGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcXHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXFx0aWYgKGVudHJ5KSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2OlxcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVxcdGlmIChnaWNfa3ZtX2luZm8pXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcXHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cXHRpZiAoIWRldilcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcXHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVxcdGlmICghYXJlYSlcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVxcdFxcdFxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcXHRcXHRcXHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXFx0XFx0XFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XFx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVxcdGlmICghbilcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2OlxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcXHRkZXYtXFx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVxcdGlmKCFkZXYtXFx1MDAzZWFkZHIpIHtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcXHRcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cXHRcXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVxcdGlmICh0YWJsZSA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlxcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXFx0aWYgKCFyMilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVxcdFxcdH1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcXHRcXHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cXHRcXHQgICAgY2ZnLVxcdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1OlxcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVxcdGlmICghcGFnZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1OlxcdHZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCxcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVxcdFxcdFxcdFxcdFxcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgKyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2NrcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XFx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVxcdGlmIChibG9jayA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlxcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cXHRpZiAoaW5mbyA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcXHRcXHRcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cXHRcXHRcXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcXHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVxcdGlmICghZXZlbnRzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XFx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVxcdGlmICghZXZlbnRfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcXHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVxcdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XFx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVxcdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XFx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVxcdGlmICghYXR0cilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XFx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cXHRpZiAod29yaykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXFx0XFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XFx0XFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cXHRcXHRcXHRcXHRcXHRcXHRHRlBfQVRPTUlDKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlxcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVxcdGlmIChidWYgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVxcdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0OlxcdFxcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVxcdGlmICghcHNlcmllc19kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlxcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXFx0aWYgKCFodl9jYXBzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XFx0XFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cXHRcXHRpZiAoIWRldl9lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcXHRjdHJsLVxcdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVxcdGlmICghY3RybC1cXHUwMDNlc2F2ZWRfcmVncylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XFx0XFx0XFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cXHRcXHRcXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXFx0aWYgKCFmb3VuZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcXHRcXHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVxcdFxcdFxcdGJ1Y2tldCA9XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjQwOjAxLjEyMzU2NzgxMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTA3NjYyNDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVExTIFJlY29yZCBGcmFnbWVudGF0aW9uIEJ1ZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGUgaW4gdGhlIFRMUyBvZmZsb2FkIGNvZGUuIGBrbWFsbG9jX29iamAuLi4gcmlnaHQsIGl0IGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgYHRsc19yZWNvcmRfaW5mb2Agc3RydWN0LiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgemVybyBpdCwgdW5saWtlIGBremFsbG9jYC4gVGhlIGNvZGUgaW4gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAgYWxsb2NhdGVzIHRoZSBzdHJ1Y3QsIGluaXRpYWxpemVzIHRoZSBmaXJzdCBmcmFnbWVudCwgYW5kIHNldHMgYG51bV9mcmFnc2AgdG8gMS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGBmcmFnc2AgYXJyYXkgd2l0aGluIGB0bHNfcmVjb3JkX2luZm9gICppc24ndCogaW5pdGlhbGl6ZWQgaW5pdGlhbGx5LlxuXG5gdGxzX2FwcGVuZF9mcmFnYCBpcyByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHN1YnNlcXVlbnQgZnJhZ21lbnRzLiBJdCB1cGRhdGVzIHRoZSBmcmFnbWVudCBkZXNjcmlwdG9yIGJlZm9yZSBpbmNyZW1lbnRpbmcgYG51bV9mcmFnc2AsIHdoaWNoIGlzIGdvb2QuIEltcG9ydGFudDogYGVuZF9zZXFgIGFuZCBgbGlzdGAgYXJlIGluaXRpYWxpemVkIGxhdGVyIGluIGB0bHNfcHVzaF9yZWNvcmRgLlxuXG5UaGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaXMgcHJldHR5IGNsZWFyLiBJZiBgbnVtX2ZyYWdzYCBzb21laG93IGV4Y2VlZHMgYE1BWF9TS0JfRlJBR1NgLCB0aGUgY29kZSB3aWxsIHdyaXRlIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBTcGVjaWZpY2FsbHksIHRoZSB3cml0ZSBpcyB0byBgXHUwMDI2cmVjb3JkLVx1MDAzZWZyYWdzW3JlY29yZC1cdTAwM2VudW1fZnJhZ3NdYCwgd2hpY2ggd2lsbCBiZSBgcmVjb3JkLVx1MDAzZWZyYWdzW01BWF9TS0JfRlJBR1NdYCBpZiBgbnVtX2ZyYWdzYCBoYXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUuIFRoZXJlJ3MgYWxzbyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uLCB3aGVuIGNoZWNraW5nIGlmIGEgbmV3IGZyYWdtZW50IHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBvbmUuIEl0IHJlYWRzIG1lbW9yeSBwYXN0IHRoZSBlbmQgb2YgdGhlIGBmcmFnc2AgYXJyYXkuXG5cbk5vdywgZG9lcyB0aGlzIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgKnVzZWQqIG9yIGxlYWtlZD8gVGhlIHJlY29yZCBpdHNlbGYgaXMgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgc28gdGhlcmUncyBubyBkaXJlY3QgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLiBUaGUgZnJhZ21lbnRzIHBvaW50IHRvIHBhZ2VzIGhvbGRpbmcgdGhlIGRhdGEsIGFuZCB0aGF0IGRhdGEgaXMgKmNvcGllZCogZnJvbSB1c2Vyc3BhY2UuIFNvIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLlxuXG5UaGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvbiB0aGUgYGZyYWdzYCBhcnJheS4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLlxuXG5LQVNBTiB3aWxsIGRldGVjdCB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJbiB0aGlzIGNhc2UsIEtBU0FOIHdpbGwgY2F0Y2ggdGhlIGZ1bmRhbWVudGFsIHByb2JsZW06IHdyaXRpbmcgdG8gYHJlY29yZC1cdTAwM2VmcmFnc1tNQVhfU0tCX0ZSQUdTXWAuIEV2ZW4gaWYgdGhlIGFjY2Vzc2VkIG1lbW9yeSBoYXMgdW5pbml0aWFsaXplZCBkYXRhIG9yIGRhdGEgZnJvbSBhIG5laWdoYm9yaW5nIHNsYWIgb2JqZWN0LCBpdCdzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIEtBU0FOIHdpbGwgZGV0ZWN0IHRoZSBhY2Nlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIGlzIG5vdCBhYm91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJldmlldy4gSXMgYG51bV9mcmFnc2AgdW5pbml0aWFsaXplZD8gTm8uIGBsZW5gPyBOby4gVGhlIGluZGl2aWR1YWwgZnJhZ21lbnQgZWxlbWVudHMgb2YgYGZyYWdzYD8gTm8sIGJlY2F1c2UgYGZyYWdzWzBdYCBpcyBpbml0aWFsaXplZCBhbmQgdGhlIHJlc3QgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYC5cblxuU28gdGhlIG9ubHkgaXNzdWUgaXMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBoYW5kbGUuIFRodXMsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5Ob3csIHRoZSBydWxlcyFcblxuV2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTiA9IHRydWVgIGlmIHRoZSBwYXRjaCBpbnZvbHZlczpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgQm91bmRzIGNoZWNrcyBhbmQgcG90ZW50aWFsIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5XZSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgaWYgdGhlIHByaW1hcnkgcmlzayBpcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy5cblxuVGhpcyBwYXRjaCBmaXhlcyBhbiBhcnJheSBvdmVyZmxvdy9vdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgcmVjb3JkLVx1MDAzZWZyYWdzYC4gU28sIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5UaGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3MuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGEgVExTIHJlY29yZCBiZWluZyBsZWZ0IG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gVGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhdmUgdGhlIHJlY29yZCBvcGVuIGlmIGBzaXplID09IDBgIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgaXRzIG1heGltdW0uIFN1YnNlcXVlbnRseSwgb24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCwgd2hpY2ggd291bGQgaW5jcmVtZW50IGBudW1fZnJhZ3NgIHBhc3QgYE1BWF9TS0JfRlJBR1NgLCBjYXVzaW5nIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgd3JpdGUgb24gdGhlIGByZWNvcmQtXHUwMDNlZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGFuIGFycmF5IG92ZXJmbG93IHZ1bG5lcmFiaWxpdHksIHdoaWNoIEtBU0FOIGRldGVjdHMuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U7IG5vIGluZm9ybWF0aW9uIGlzIGxlYWtlZC4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMDksIk91dHB1dFRva2VucyI6MjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTo0MDoyMi4yMDAxOTQ3ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVxcdTAwM2VmcmFnc2AgYXJyYXkuXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 08:55:31 +0000 UTC FinishedAt: 2026-08-23 09:40:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "TLS_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "TLS_DEVICE" ], "series_id": "3daa018e-5982-4d7d-baaa-a5076f7a28e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_device_sendmsg", "tls_device_splice_eof" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX2RldmljZV9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Rsc19kZXZpY2Vfc3BsaWNlX2VvZiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5YjQwNTQzNzg1OTFmYzhiMmM1MjA2ODU0NDMxNzFiYjk1NjZkM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jXG5pbmRleCAzN2JiMDZhOGU4ZjViLi5mMTFkMDUyOGZjNDMxIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jXG5AQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoIXNpemUpIHtcbiBsYXN0X3JlY29yZDpcbiBcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbi1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB7XG4mIzQzO1x0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XG4gXHRcdFx0XHRtb3JlID0gdHJ1ZTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWI0MDU0Mzc4NTkxZmM4YjJjNTIwNjg1NDQzMTcxYmI5NTY2ZDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDk6Mzg6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jCmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jCkBAIC01MzEsNyAmIzQzOzUzMSw4IEBAIHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmICghc2l6ZSkgewogbGFzdF9yZWNvcmQ6CiAJCQl0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFnczsKLQkJCWlmIChmbGFncyAmYW1wOyBNU0dfTU9SRSkgewomIzQzOwkJCWlmICgoZmxhZ3MgJmFtcDsgTVNHX01PUkUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcmVjb3JkLSZndDtudW1fZnJhZ3MgJmx0OyBNQVhfU0tCX0ZSQUdTIC0gMSkgewogCQkJCW1vcmUgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRMUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZCB0byBgbmV0L3Rscy90bHNfZGV2aWNlLmNgLiBGcm9tIHdoYXQgSSBzZWUsIGl04oCZcyBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgdGxzX3B1c2hfZGF0YWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIGBNU0dfTU9SRWAgZmxhZyBpbiByZWxhdGlvbiB0byBmcmFnbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYCBiZWZvcmUgc2V0dGluZyBgbW9yZSA9IHRydWVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyB0aGV5JiMzOTtyZSBlc3NlbnRpYWxseSBsaW1pdGluZyBob3cgbXVjaCB0aGUgZGF0YSBjYW4gYmUgZnJhZ21lbnRlZCB3aGVuIGBNU0dfTU9SRWAgaXMgYWxzbyBzZXQuIFRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgVExTIHN1YnN5c3RlbSDigJMgdGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudCBub3cgaW4gaG93IGl0IGhhbmRsZXMgdGhlc2Ugc2NlbmFyaW9zLiBJIG5lZWQgdG8gZGlnIGludG8gYHRsc19wdXNoX2RhdGFgIGl0c2VsZiB3aXRoaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgYW5kIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJlZCB0aGlzLCBhbmQgZW5zdXJlIGl0IHdvbiYjMzk7dCBpbXBhY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX3B1c2hfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIyLVx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU4My1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcdHJjID0gdGxzX3B1c2hfZGF0YShzaywgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXHUwMDNlbXNnX2ZsYWdzLFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTg1LVx0XHRcdCAgIHJlY29yZF90eXBlKTtcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz01OTM9dm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NjA5Olx0XHR0bHNfcHVzaF9kYXRhKHNrLCBcdTAwMjZpdGVyLCAwLCAwLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MTAtXHR9XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9Njc2PXN0YXRpYyBpbnQgdGxzX2RldmljZV9wdXNoX3BlbmRpbmdfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTY4MC1cdGlvdl9pdGVyX2t2ZWMoXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NjgxOlx0cmV0dXJuIHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGUgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uIGlzIGNlbnRyYWwgaGVyZS4gSSBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGB0bHNfZGV2aWNlX3NlbmRtc2dgLCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYCwgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRob3NlIHBvaW50cywgcGFydGljdWxhcmx5IHdoZW4gc3BsaWNpbmcgaXMgaW52b2x2ZWQsIEkga25vdyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIFRMUyByZWNvcmQgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbi4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtZXNzZXMgd2l0aCByZWNvcmQgZnJhZ21lbnRhdGlvbiB3aGVuIGBNU0dfTU9SRWAgaXMgaW4gcGxheS4gVGhlIHN1YnRsZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGZyYWdtZW50YXRpb24gYW5kIHRoZSBzb2NrZXQgZmxhZyBoYXMgY2F1c2VkIHNlcmlvdXMgaXNzdWVzIGluIHRoZSBwYXN0LCBpbmNsdWRpbmcgc2V2ZXJhbCB2dWxuZXJhYmlsaXRpZXMuCgpHaXZlbiB0aGF0IGNvbnRleHQsIG15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgKmFic29sdXRlbHkqIHNjcmVhbXMgZm9yIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgZnJhZ21lbnRhdGlvbiwgYE1TR19NT1JFYCwgYW5kIHRoZSB2YXJpb3VzIGNhbGwgcG9pbnRzIG9mIGB0bHNfcHVzaF9kYXRhYCBpcyBhIHByaW1lIHRhcmdldCBmb3IgYnVmZmVyIG92ZXJmbG93cywgaW50ZWdlciBvdmVyZmxvd3MsIG9yIG9mZi1ieS1vbmUgZXJyb3JzLiBJdCBpcyBsaWtlbHkgdGhhdCBuZXcgYXR0YWNrIHN1cmZhY2VzIGFyZSBiZWluZyBjcmVhdGVkIGhlcmUuIEkmIzM5O20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgaW52b2x2aW5nIG1hbGljaW91c2x5IGNyYWZ0ZWQgcmVjb3JkcyB3aXRoIGNhcmVmdWxseSBtYW5pcHVsYXRlZCBzaXplcyBhbmQgZmxhZ3MuCgpTbywgdGhlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBXZSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXRhaWxzLiBXaGF0IFRMUyB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQ/IFdoYXQgY2lwaGVyIHN1aXRlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmZpZ3VyZWQ/IFdoYXQmIzM5O3MgdGhlIE1UVT8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgc29ja2V0IGJ1ZmZlciBzaXplcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudmlyb25tZW50IHRvIGNyYWZ0IGVmZmVjdGl2ZSBmdXp6aW5nIGNhbXBhaWducy4gTGV0JiMzOTtzIGZpbmQgdGhhdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWctNC0jXG5uZXQvdGxzL0tjb25maWc6NTpjb25maWcgVExTXG5uZXQvdGxzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3Rscy9LY29uZmlnLTE4LVxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXG5uZXQvdGxzL0tjb25maWctMjAtXHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRXhhbWluaW5nIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGZsYWdnZWQgYXMgdXNpbmcgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgZmlyc3QgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG5ldC90bHMvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoYXQgYFRMU19ERVZJQ0VgIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgZmxhZyBpcyBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHdpdGhpbiB0aGUgVExTIGNvbnRleHQuIFRpbWUgdG8gcHVsbCB1cCB0aGUgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBvZmZlcnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFRMU1xuICAyMjpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgMjM6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMjQ6XHRcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiAgMjU6XHRcdGRlZmF1bHQgblxuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXG4gIDI4Olx0XG4gIDI5Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVExTIERldmljZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIG9wZXJhdGlvbnMuIEkgaW5pdGlhbGx5IHRob3VnaHQgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgIHdlcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYHRsc19wdXNoX2RhdGFgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgdGxzX2RldmljZV9zZW5kbXNnYCwgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBIbW0sIHdhaXQuIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGlzIGFsc28gc3RhdGljISBGaW5lLCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGB0bHNfZGV2aWNlX3NlbmRtc2dgIGFuZCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgYWN0aW9ucyBhcmUgbGlrZWx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX2RldmljZV9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBncmFjZWZ1bCBlbmQtb2YtZmlsZSBjb25kaXRpb24gd2l0aGluIGEgVExTIGNvbm5lY3Rpb24sIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGEgc3BsaWNlIG1lY2hhbmlzbSBmb3IgZGF0YSB0cmFuc2Zlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gaG93IHRoaXMgaXMgaGFuZGxlZCwgYW5kIHdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucz8gQW0gSSBzZWVpbmcgaG93IHRoZSBUTFMgbGF5ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IG9yIGZpbGUgZGVzY3JpcHRvcj8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSBpbiB0aGlzIHNwZWNpZmljIHBhdGg/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIEVPRiBpcyBzaWduYWxlZCBmcm9tIHRoZSBsb3dlciBsYXllcnMgdXAuIElzIGl0IGEgc2ltcGxlIGByZWFkYCByZXR1cm5pbmcgMCwgb3IgaXMgdGhlcmUgc29tZSBtb3JlIG51YW5jZWQgVExTLXNwZWNpZmljIHNpZ25hbGluZyBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHNwbGljZSBvcGVyYXRpb24gaGFuZGxlcyB0aGUgY2xvc2luZyBzZXF1ZW5jZSBjb3JyZWN0bHkgKGUuZy4sIHNlbmRpbmcgVExTIGNsb3NlIGFsZXJ0cywgY2xlYW5pbmcgdXAgcmVzb3VyY2VzKS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIFRMUyBjb25uZWN0aW9uIHRlYXJkb3duLiBXaGF0IGFyZSB0aGUga2V5IHBvaW50cyB0byBhc3Nlc3MgaW4gdGhpcyBmdW5jdGlvbj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTU5Mi1cbm5ldC90bHMvdGxzX2RldmljZS5jOjU5Mzp2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NlbmRwYWdlYCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgYHRsc19kZXZpY2Vfc2VuZHBhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBUTFMgaW1wbGVtZW50YXRpb24/IFdoYXQgYXJlIHRoZSBrZXkgYXNzdW1wdGlvbnMgYmFrZWQgaW50byB0aGlzIGRlc2lnbj8gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBlcnJvciBjb25kaXRpb25zLiBEb2VzIGl0IHBlcmZvcm0gYXBwcm9wcmlhdGUgaW5wdXQgdmFsaWRhdGlvbj8gTWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSB0byBwcm9iZSBoZXJlLCBzbyBJJiMzOTtsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCBpbnB1dC4gV2hhdCBraW5kIG9mIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGl0IHVzaW5nPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIERNQT8gVGhlIHVuZGVybHlpbmcgY3J5cHRvIHByaW1pdGl2ZXMgYWxzbyBjb21lIGludG8gcGxheTsgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBpdCB0byBtYWtlIHN1cmUgdGhleSBhcmUgdXNlZCBzYWZlbHksIGFuZCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG9idmlvdXMgc2lkZS1jaGFubmVsIGxlYWtzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYW55IGludGVyYWN0aW9ucyB3aXRoIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrLiBGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBjb3JyZWN0bHkgYW5kLCBpZiBzbywgaG93PyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBtb3N0IGxpa2VseSBhdHRhY2sgdmVjdG9ycywgYW5kIHRoZW4gZ28gaW4gZGVwdGggZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfZGV2aWNlX3NlbmRwYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0bHNfZGV2aWNlX3NlbmRtc2cqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB0bHNfZGV2aWNlX3NlbmRtc2dgIHdpdGhpbiBgbmV0L3Rscy90bHNfZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFzIHRoZXkgc2F5LCBmb3IgYWN0dWFsIGRhdGEgdHJhbnNtaXNzaW9uLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IFRMUy1lbmNyeXB0ZWQgZGF0YSBpcyBiZWluZyBwdXNoZWQgb3V0IHRoZSBkb29yLCBzbyB0byBzcGVhay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBUTFMgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBzdGFuZGFyZCBzb2NrZXQgY2FsbHMgaW4gdGhlcmUsIGJ1dCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMgYmVpbmcgdXNlZCwgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjbGV2ZXIgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZ29pbmcgb24sIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGZyYWdtZW50YXRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZHJpdmVyIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGx1cmtpbmcgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC90bHMvdGxzLmgtMTcxLVxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xubmV0L3Rscy90bHMuaC0xNzMtdm9pZCB0bHNfZGV2aWNlX3NwbGljZV9lb2Yoc3RydWN0IHNvY2tldCAqc29jayk7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY1LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIyLVx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcbm5ldC90bHMvdGxzX21haW4uYzoxMDIzOlx0cHJvdFtUTFNfSFddW1RMU19CQVNFXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMjQtXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDI2LVx0cHJvdFtUTFNfSFddW1RMU19TV10gPSBwcm90W1RMU19CQVNFXVtUTFNfU1ddO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjc6XHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXHRcdD0gdGxzX2RldmljZV9zZW5kbXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMjgtXHRwcm90W1RMU19IV11bVExTX1NXXS5zcGxpY2VfZW9mXHRcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIwCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUTFMgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBlbnRyeSBwb2ludHMgYXJlIGB0bHNfZGV2aWNlX3NlbmRtc2dgIGFuZCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgVExTYCBhbmQgYFRMU19ERVZJQ0VgLiBUaGUgYWN0dWFsIGNoYW5nZSBpdHNlbGYgaXMgaW5zaWRlIGB0bHNfcHVzaF9kYXRhYCwgd2hpY2gsIGFzIEkgc3VzcGVjdGVkLCBpcyByZWFjaGFibGUgdGhyb3VnaCBib3RoIG9mIHRob3NlIGVudHJ5IHBvaW50cyBJIGp1c3QgbWVudGlvbmVkLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBtb3JlYCBpcyBzZXQgdG8gYHRydWVgIHdoZW4gYE1TR19NT1JFYCBpcyB0cnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSwgaW1wYWN0aW5nIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQgd2hlbiB1c2luZyBoYXJkd2FyZSBvZmZsb2FkLiBTaW5jZSB0aGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gdGhyb3VnaCBgc2VuZG1zZ2Agb3IgYHNwbGljZWAsIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhbmQgbGlrZWx5IGZ1enppbmcgdG8gc2VlIHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBleHBvc2VkLgoKVGhlcmVmb3JlLCBJJiMzOTttIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIG1vZGlmaWNhdGlvbiB0byBmcmFnbWVudGF0aW9uIGJlaGF2aW9yIGluIGB0bHNfcHVzaF9kYXRhYCwgYWNjZXNzaWJsZSB2aWEgdGhvc2UgY3JpdGljYWwgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMsIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgc2NydXRpbml6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19kZXZpY2Vfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0bHNfZGV2aWNlX3NwbGljZV9lb2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfZGV2aWNlX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dGxzX2RldmljZV9zcGxpY2VfZW9mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBpbiBgdGxzX3B1c2hfZGF0YWAgdG8gcHJldmVudCBsZWF2aW5nIGEgVExTIHJlY29yZCBvcGVuIGlmIGl0cyBmcmFnbWVudCBjb3VudCAoYG51bV9mcmFnc2ApIGhhcyByZWFjaGVkIGBNQVhfU0tCX0ZSQUdTIC0gMWAuIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGlmIGBzaXplID09IDBgIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIHRoZSBjb2RlIHdvdWxkIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBhbmQgbGVhdmUgdGhlIHJlY29yZCBvcGVuLCBldmVuIGlmIGBudW1fZnJhZ3NgIHdhcyBhbHJlYWR5IGF0IHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIE9uIHRoZSBuZXh0IGNhbGwgdG8gYHRsc19wdXNoX2RhdGFgLCBgdGxzX2FwcGVuZF9mcmFnYCBjb3VsZCBiZSBjYWxsZWQgb24gdGhpcyBvcGVuIHJlY29yZCwgd2hpY2ggd291bGQgaW5jcmVtZW50IGBudW1fZnJhZ3NgIGJleW9uZCBgTUFYX1NLQl9GUkFHU2AgYW5kIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgd3JpdGUgb24gdGhlIGByZWNvcmQtXHUwMDNlZnJhZ3NgIGFycmF5LlxuXG5UaGlzIGlzIGEgY2xhc3NpYyBhcnJheSBvdmVyZmxvdyAvIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgYnVnLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQgaGVyZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWI0MDU0Mzc4NTkxZmM4YjJjNTIwNjg1NDQzMTcxYmI5NTY2ZDNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDk6Mzg6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jCmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90bHMvdGxzX2RldmljZS5jCkBAIC01MzEsNyAmIzQzOzUzMSw4IEBAIHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCiAJCWlmICghc2l6ZSkgewogbGFzdF9yZWNvcmQ6CiAJCQl0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFnczsKLQkJCWlmIChmbGFncyAmYW1wOyBNU0dfTU9SRSkgewomIzQzOwkJCWlmICgoZmxhZ3MgJmFtcDsgTVNHX01PUkUpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgcmVjb3JkLSZndDtudW1fZnJhZ3MgJmx0OyBNQVhfU0tCX0ZSQUdTIC0gMSkgewogCQkJCW1vcmUgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gSXQmIzM5O3MgdHdlYWtpbmcgdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBNU0dfTU9SRWAgZmxhZ3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGEgbWVtb3J5IHNhZmV0eSBmaXguIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2s6IGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYC4KClRoYXQgYG51bV9mcmFnc2AgZmllbGQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2l0aGluIHRoZSBmcmFnbWVudCBoYW5kbGluZyBsb2dpYy4gSWYgYG51bV9mcmFnc2Agd2VyZSB0byBleGNlZWQgYE1BWF9TS0JfRlJBR1NgLCB3ZSYjMzk7ZCBiZSBsb29raW5nIGF0IGEgbGlrZWx5IEtBU0FOLWRldGVjdGFibGUgYnVnLCBhIHJlYWQgb3Igd3JpdGUgZ29pbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5IG9yIGEgc2ltaWxhciBzdHJ1Y3R1cmUgbGlrZWx5IGluIGBza2Jfc2hhcmVkX2luZm9gLiBJdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8uIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBwcmV2ZW50aW5nIHVzIGZyb20gaW5jcmVtZW50aW5nIGBtb3JlID0gdHJ1ZWAgd2hlbiB0aGVyZSBhcmUgbW9yZSBmcmFnbWVudHMgdGhhbiB0aGUgc3lzdGVtIGV4cGVjdHMuCgpTbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdGxzX3B1c2hfZGF0YWAgaXRzZWxmIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19wdXNoX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz0zOTY9c3RhdGljIGludCB0bHNfZGV2aWNlX2NvcHlfZGF0YSh2b2lkICphZGRyLCBzaXplX3QgYnl0ZXMsIHN0cnVjdCBpb3ZfaXRlciAqaSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00MjAtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo0MjE6c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cdFx0XHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTU2Nj1pbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODMtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1ODQ6XHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVx1MDAzZW1zZ19mbGFncyxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU4NS1cdFx0XHQgICByZWNvcmRfdHlwZSk7XG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjA4LVx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcdFx0dGxzX3B1c2hfZGF0YShzaywgXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNjEwLVx0fVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTY3Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfcHVzaF9wZW5kaW5nX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBOVUxMLCAwLCAwKTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcdHJldHVybiB0bHNfcHVzaF9kYXRhKHNrLCBcdTAwMjZpdGVyLCAwLCBmbGFncywgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIGB0bHNfcHVzaF9kYXRhYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHRha2UgYSBsb29rIGF0IGB0bHNfcHVzaF9kYXRhYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBmdW5jdGlvbiwgc28gaXQgbXVzdCBiZSBjZW50cmFsIHRvIHNvbWV0aGluZyBJJiMzOTttIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdy4gUGVyaGFwcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBvcHRpbWl6aW5nIGRhdGEgZGVsaXZlcnkgb3ZlciBUTFM/IE1heWJlIEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaG93IGRhdGEgaXMgcHVzaGVkLCBvciBzaW1wbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gcHJvYmFibHkgZm9ybWluZyBoeXBvdGhlc2VzIGFib3V0IGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXkgY29tcG9uZW50czogdGhlIFRMUyBoYW5kc2hha2UsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgSS9PLCBwZXJoYXBzIGV2ZW4gY29uc2lkZXJhdGlvbnMgYWJvdXQgc2Vzc2lvbiByZXN1bXB0aW9uIG9yIHByZS1zaGFyZWQga2V5cy4gSSYjMzk7bSBrZWVuIHRvIGdyYXNwIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCByZWxhdGVzIHRvIG15IGFyZWEgb2YgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjE6XHRzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIDQyMjpcdFx0XHRcdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gNDIzOlx0XHRcdFx0IHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsXG4gNDI0Olx0XHRcdFx0IHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUpXG4gNDI1Olx0e1xuIDQyNjpcdFx0c3RydWN0IHRsc19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spO1xuIDQyNzpcdFx0c3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSBcdTAwMjZ0bHNfY3R4LVx1MDAzZXByb3RfaW5mbztcbiA0Mjg6XHRcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XG4gNDI5Olx0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XG4gNDMwOlx0XHRpbnQgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzO1xuIDQzMTpcdFx0c3RydWN0IHBhZ2VfZnJhZyAqcGZyYWc7XG4gNDMyOlx0XHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcbiA0MzM6XHRcdHUzMiBtYXhfb3Blbl9yZWNvcmRfbGVuO1xuIDQzNDpcdFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gNDM1Olx0XHRib29sIGRvbmUgPSBmYWxzZTtcbiA0MzY6XHRcdGludCBjb3B5LCByYyA9IDA7XG4gNDM3Olx0XHRsb25nIHRpbWVvO1xuIDQzODpcdFxuIDQzOTpcdFx0aWYgKGZsYWdzIFx1MDAyNlxuIDQ0MDpcdFx0ICAgIH4oTVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfFxuIDQ0MTpcdFx0ICAgICAgTVNHX1NQTElDRV9QQUdFUyB8IE1TR19FT1IpKVxuIDQ0MjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoKGZsYWdzIFx1MDAyNiAoTVNHX01PUkUgfCBNU0dfRU9SKSkgPT0gKE1TR19NT1JFIHwgTVNHX0VPUikpXG4gNDQ1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NjpcdFxuIDQ0NzpcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4gNDQ4Olx0XHRcdHJldHVybiAtc2stXHUwMDNlc2tfZXJyO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0ZmxhZ3MgfD0gTVNHX1NFTkRQQUdFX0RFQ1JZUFRFRDtcbiA0NTE6XHRcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzIHwgTVNHX01PUkU7XG4gNDUyOlx0XG4gNDUzOlx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIDQ1NDpcdFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkpIHtcbiA0NTU6XHRcdFx0cmMgPSB0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZChzaywgdGxzX2N0eCwgZmxhZ3MpO1xuIDQ1NjpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4gNDU3Olx0XHRcdFx0cmV0dXJuIHJjO1xuIDQ1ODpcdFx0fVxuIDQ1OTpcdFxuIDQ2MDpcdFx0cGZyYWcgPSBza19wYWdlX2ZyYWcoc2spO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0LyogVExTX0hFQURFUl9TSVpFIGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlIFRMUyByZWNvcmQsIGFuZFxuIDQ2MzpcdFx0ICogd2UgbmVlZCB0byBsZWF2ZSByb29tIGZvciBhbiBhdXRoZW50aWNhdGlvbiB0YWcuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdG1heF9vcGVuX3JlY29yZF9sZW4gPSB0bHNfY3R4LVx1MDAzZXR4X21heF9wYXlsb2FkX2xlbiAmIzQzO1xuIDQ2NjpcdFx0XHRcdCAgICAgIHByb3QtXHUwMDNlcHJlcGVuZF9zaXplO1xuIDQ2NzpcdFx0ZG8ge1xuIDQ2ODpcdFx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG4gNDY5Olx0XHRcdGlmICh1bmxpa2VseShyYykpIHtcbiA0NzA6XHRcdFx0XHRyYyA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuIDQ3MTpcdFx0XHRcdGlmICghcmMpXG4gNDcyOlx0XHRcdFx0XHRjb250aW51ZTtcbiA0NzM6XHRcbiA0NzQ6XHRcdFx0XHRyZWNvcmQgPSBjdHgtXHUwMDNlb3Blbl9yZWNvcmQ7XG4gNDc1Olx0XHRcdFx0aWYgKCFyZWNvcmQpXG4gNDc2Olx0XHRcdFx0XHRicmVhaztcbiA0Nzc6XHRoYW5kbGVfZXJyb3I6XG4gNDc4Olx0XHRcdFx0aWYgKHJlY29yZF90eXBlICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7XG4gNDc5Olx0XHRcdFx0XHQvKiBhdm9pZCBzZW5kaW5nIHBhcnRpYWxcbiA0ODA6XHRcdFx0XHRcdCAqIHJlY29yZCB3aXRoIHR5cGUgIT1cbiA0ODE6XHRcdFx0XHRcdCAqIGFwcGxpY2F0aW9uX2RhdGFcbiA0ODI6XHRcdFx0XHRcdCAqL1xuIDQ4MzpcdFx0XHRcdFx0c2l6ZSA9IG9yaWdfc2l6ZTtcbiA0ODQ6XHRcdFx0XHRcdGRlc3Ryb3lfcmVjb3JkKHJlY29yZCk7XG4gNDg1Olx0XHRcdFx0XHRjdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xuIDQ4NjpcdFx0XHRcdH0gZWxzZSBpZiAocmVjb3JkLVx1MDAzZWxlbiBcdTAwM2UgcHJvdC1cdTAwM2VwcmVwZW5kX3NpemUpIHtcbiA0ODc6XHRcdFx0XHRcdGdvdG8gbGFzdF9yZWNvcmQ7XG4gNDg4Olx0XHRcdFx0fVxuIDQ4OTpcdFxuIDQ5MDpcdFx0XHRcdGJyZWFrO1xuIDQ5MTpcdFx0XHR9XG4gNDkyOlx0XG4gNDkzOlx0XHRcdHJlY29yZCA9IGN0eC1cdTAwM2VvcGVuX3JlY29yZDtcbiA0OTQ6XHRcbiA0OTU6XHRcdFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cdTAwM2VsZW4pO1xuIDQ5NjpcdFx0XHRpZiAoY29weSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSkge1xuIDQ5NzpcdFx0XHRcdHN0cnVjdCBwYWdlX2ZyYWcgemNfcGZyYWc7XG4gNDk4Olx0XHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IFx1MDAyNnpjX3BmcmFnLnBhZ2U7XG4gNDk5Olx0XHRcdFx0c2l6ZV90IG9mZjtcbiA1MDA6XHRcbiA1MDE6XHRcdFx0XHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXHUwMDI2cGFnZXMsXG4gNTAyOlx0XHRcdFx0XHRcdFx0ICAgIGNvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4gNTAzOlx0XHRcdFx0aWYgKHJjIFx1MDAzYz0gMCkge1xuIDUwNDpcdFx0XHRcdFx0aWYgKHJjID09IDApXG4gNTA1Olx0XHRcdFx0XHRcdHJjID0gLUVJTztcbiA1MDY6XHRcdFx0XHRcdGdvdG8gaGFuZGxlX2Vycm9yO1xuIDUwNzpcdFx0XHRcdH1cbiA1MDg6XHRcdFx0XHRjb3B5ID0gcmM7XG4gNTA5Olx0XG4gNTEwOlx0XHRcdFx0aWYgKFdBUk5fT05fT05DRSghc2VuZHBhZ2Vfb2soemNfcGZyYWcucGFnZSkpKSB7XG4gNTExOlx0XHRcdFx0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgY29weSk7XG4gNTEyOlx0XHRcdFx0XHRyYyA9IC1FSU87XG4gNTEzOlx0XHRcdFx0XHRnb3RvIGhhbmRsZV9lcnJvcjtcbiA1MTQ6XHRcdFx0XHR9XG4gNTE1Olx0XG4gNTE2Olx0XHRcdFx0emNfcGZyYWcub2Zmc2V0ID0gb2ZmO1xuIDUxNzpcdFx0XHRcdHpjX3BmcmFnLnNpemUgPSBjb3B5O1xuIDUxODpcdFx0XHRcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFx1MDAyNnpjX3BmcmFnLCBjb3B5KTtcbiA1MTk6XHRcdFx0fSBlbHNlIGlmIChjb3B5KSB7XG4gNTIwOlx0XHRcdFx0Y29weSA9IG1pbl90KHNpemVfdCwgY29weSwgcGZyYWctXHUwMDNlc2l6ZSAtIHBmcmFnLVx1MDAzZW9mZnNldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRsc1xfcHVzaFxfZGF0YSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB0bHNfcHVzaF9kYXRhYC4gSSYjMzk7dmUgZ290IGEgZ29vZCBmb3VuZGF0aW9uIGluIFRMUy9TU0wsIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaGFuZHNoYWtlIHByb2Nlc3MgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIHRoaW5ncyBsaWtlIHNlc3Npb24gcmVzdW1wdGlvbiwga2V5IGV4Y2hhbmdlLCBhbmQgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbi4gQnV0IHRoaXMgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLi4uIGl0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBzdXNwZWN0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gb3B0aW1pemF0aW9ucywgcGVyaGFwcyBhcm91bmQgcHJvYWN0aXZlbHkgc2VuZGluZyBkYXRhIHRvIGEgY2xpZW50IGJlZm9yZSBpdCBleHBsaWNpdGx5IHJlcXVlc3RzIGl0LCBwb3RlbnRpYWxseSB1c2luZyBzZXJ2ZXIgcHVzaCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJIGtub3cgdGhlIGdlbmVyYWwgY29uY2VwdHMsIGJ1dCBJJiMzOTttIGVhZ2VyIHRvIHVuZGVyc3RhbmQgdGhlICppbXBsZW1lbnRhdGlvbiogZGV0YWlscy4gV2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggZXhpc3RpbmcgVExTIGZsb3dzPyBJIHdhbnQgdG8gc2VlIHRoZSBuaXR0eS1ncml0dHk6IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBleGFjdCBwbGFjZW1lbnQgaW4gdGhlIFRMUyBwcm90b2NvbCwgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgb2YgY291cnNlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyLiBNeSBnb2FsIGlzIHRvIGdyYXNwIGl0cyBmdW5jdGlvbmFsaXR5IGF0IGEgZGV0YWlsZWQgbGV2ZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMTpcdFxuIDUyMjpcdFx0XHRcdHJjID0gdGxzX2RldmljZV9jb3B5X2RhdGEocGFnZV9hZGRyZXNzKHBmcmFnLVx1MDAzZXBhZ2UpICYjNDM7XG4gNTIzOlx0XHRcdFx0XHRcdFx0ICBwZnJhZy1cdTAwM2VvZmZzZXQsIGNvcHksXG4gNTI0Olx0XHRcdFx0XHRcdFx0ICBpdGVyKTtcbiA1MjU6XHRcdFx0XHRpZiAocmMpXG4gNTI2Olx0XHRcdFx0XHRnb3RvIGhhbmRsZV9lcnJvcjtcbiA1Mjc6XHRcdFx0XHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBwZnJhZywgY29weSk7XG4gNTI4Olx0XHRcdH1cbiA1Mjk6XHRcbiA1MzA6XHRcdFx0c2l6ZSAtPSBjb3B5O1xuIDUzMTpcdFx0XHRpZiAoIXNpemUpIHtcbiA1MzI6XHRsYXN0X3JlY29yZDpcbiA1MzM6XHRcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbiA1MzQ6XHRcdFx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfTU9SRSkgXHUwMDI2XHUwMDI2XG4gNTM1Olx0XHRcdFx0ICAgIHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XG4gNTM2Olx0XHRcdFx0XHRtb3JlID0gdHJ1ZTtcbiA1Mzc6XHRcdFx0XHRcdGJyZWFrO1xuIDUzODpcdFx0XHRcdH1cbiA1Mzk6XHRcbiA1NDA6XHRcdFx0XHRkb25lID0gdHJ1ZTtcbiA1NDE6XHRcdFx0fVxuIDU0MjpcdFxuIDU0MzpcdFx0XHRpZiAoZG9uZSB8fCByZWNvcmQtXHUwMDNlbGVuIFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fFxuIDU0NDpcdFx0XHQgICAgKHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNlPSBNQVhfU0tCX0ZSQUdTIC0gMSkpIHtcbiA1NDU6XHRcdFx0XHR0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzaywgdGxzX2N0eCwgcmVjb3JkLFxuIDU0NjpcdFx0XHRcdFx0XHRcdHBmcmFnLCByZWNvcmRfdHlwZSk7XG4gNTQ3Olx0XG4gNTQ4Olx0XHRcdFx0cmMgPSB0bHNfcHVzaF9yZWNvcmQoc2ssXG4gNTQ5Olx0XHRcdFx0XHRcdCAgICAgdGxzX2N0eCxcbiA1NTA6XHRcdFx0XHRcdFx0ICAgICBjdHgsXG4gNTUxOlx0XHRcdFx0XHRcdCAgICAgcmVjb3JkLFxuIDU1MjpcdFx0XHRcdFx0XHQgICAgIHRsc19wdXNoX3JlY29yZF9mbGFncyk7XG4gNTUzOlx0XHRcdFx0aWYgKHJjIFx1MDAzYyAwKVxuIDU1NDpcdFx0XHRcdFx0YnJlYWs7XG4gNTU1Olx0XHRcdH1cbiA1NTY6XHRcdH0gd2hpbGUgKCFkb25lKTtcbiA1NTc6XHRcbiA1NTg6XHRcdHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XG4gNTU5Olx0XG4gNTYwOlx0XHRpZiAob3JpZ19zaXplIC0gc2l6ZSBcdTAwM2UgMClcbiA1NjE6XHRcdFx0cmMgPSBvcmlnX3NpemUgLSBzaXplO1xuIDU2MjpcdFxuIDU2MzpcdFx0cmV0dXJuIHJjO1xuIDU2NDpcdH1cbiA1NjU6XHRcbiA1NjY6XHRpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiA1Njc6XHR7XG4gNTY4Olx0XHR1bnNpZ25lZCBjaGFyIHJlY29yZF90eXBlID0gVExTX1JFQ09SRF9UWVBFX0RBVEE7XG4gNTY5Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gNTcwOlx0XHRpbnQgcmM7XG4gNTcxOlx0XG4gNTcyOlx0XHRpZiAoIXRsc19jdHgtXHUwMDNlemVyb2NvcHlfc2VuZGZpbGUpXG4gNTczOlx0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX1NQTElDRV9QQUdFUztcbiA1NzQ6XHRcbiA1NzU6XHRcdG11dGV4X2xvY2soXHUwMDI2dGxzX2N0eC1cdTAwM2V0eF9sb2NrKTtcbiA1NzY6XHRcdGxvY2tfc29jayhzayk7XG4gNTc3Olx0XG4gNTc4Olx0XHRpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuKSkge1xuIDU3OTpcdFx0XHRyYyA9IHRsc19wcm9jZXNzX2Ntc2coc2ssIG1zZywgXHUwMDI2cmVjb3JkX3R5cGUpO1xuIDU4MDpcdFx0XHRpZiAocmMpXG4gNTgxOlx0XHRcdFx0Z290byBvdXQ7XG4gNTgyOlx0XHR9XG4gNTgzOlx0XG4gNTg0Olx0XHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVx1MDAzZW1zZ19mbGFncyxcbiA1ODU6XHRcdFx0XHQgICByZWNvcmRfdHlwZSk7XG4gNTg2Olx0XG4gNTg3Olx0b3V0OlxuIDU4ODpcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiA1ODk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ0bHNfY3R4LVx1MDAzZXR4X2xvY2spO1xuIDU5MDpcdFx0cmV0dXJuIHJjO1xuIDU5MTpcdH1cbiA1OTI6XHRcbiA1OTM6XHR2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDU5NDpcdHtcbiA1OTU6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gNTk2Olx0XHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XG4gNTk3Olx0XHRzdHJ1Y3QgaW92X2l0ZXIgaXRlciA9IHt9O1xuIDU5ODpcdFxuIDU5OTpcdFx0aWYgKCF0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIFx1MDAyNlx1MDAyNlxuIDYwMDpcdFx0ICAgICF0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSlcbiA2MDE6XHRcdFx0cmV0dXJuO1xuIDYwMjpcdFxuIDYwMzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ0bHNfY3R4LVx1MDAzZXR4X2xvY2spO1xuIDYwNDpcdFx0bG9ja19zb2NrKHNrKTtcbiA2MDU6XHRcbiA2MDY6XHRcdGlmICh0bHNfaXNfcGFydGlhbGx5X3NlbnRfcmVjb3JkKHRsc19jdHgpIHx8XG4gNjA3Olx0XHQgICAgdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpIHtcbiA2MDg6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgTlVMTCwgMCwgMCk7XG4gNjA5Olx0XHRcdHRsc19wdXNoX2RhdGEoc2ssIFx1MDAyNml0ZXIsIDAsIDAsIFRMU19SRUNPUkRfVFlQRV9EQVRBKTtcbiA2MTA6XHRcdH1cbiA2MTE6XHRcbiA2MTI6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNjEzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2dGxzX2N0eC1cdTAwM2V0eF9sb2NrKTtcbiA2MTQ6XHR9XG4gNjE1Olx0XG4gNjE2Olx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqdGxzX2dldF9yZWNvcmQoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKmNvbnRleHQsXG4gNjE3Olx0XHRcdFx0XHQgICAgICAgdTMyIHNlcSwgdTY0ICpwX3JlY29yZF9zbilcbiA2MTg6XHR7XG4gNjE5Olx0XHR1NjQgcmVjb3JkX3NuID0gY29udGV4dC1cdTAwM2VoaW50X3JlY29yZF9zbjtcbiA2MjA6XHRcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKmluZm8sICpsYXN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnJhZ21lbnQgTGltaXQgaW4gVExTIFJlY29yZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZWNvcmQtJmd0O251bV9mcmFncyAmbHQ7IE1BWF9TS0JfRlJBR1MgLSAxYCBjaGVjay4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtXaHkgYXJlIHdlIGJyZWFraW5nIHRoZSBsb29wIGlmIGBtb3JlYCBpcyBzZXQgYW5kIHRoZSBmcmFnbWVudCBjb3VudCBpcyAqYmVsb3cqIHRoZSBsaW1pdD8mIzM0OyBJZiBgbW9yZWAgaXMgdHJ1ZSwgaW5kaWNhdGluZyB0aGVyZSYjMzk7cyBtb3JlIGRhdGEgY29taW5nLCB3ZSYjMzk7cmUgc2tpcHBpbmcgYHRsc19wdXNoX3JlY29yZGAgdG8ga2VlcCB0aGUgcmVjb3JkIG9wZW4uIFNlZW1zIGxvZ2ljYWwuCgpCdXQgdGhlbiBJIHJlYWxpemVkLCB3aGF0IGhhcHBlbnMgaWYgYG51bV9mcmFnc2AgKmlzKiBhbHJlYWR5IGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWA/IFdlICpzaG91bGRuJiMzOTt0KiBsZWF2ZSBpdCBvcGVuIGlmIHdlIGNhbiYjMzk7dCBhZGQgbW9yZSBmcmFnbWVudHMuIERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIGNydWNpYWwgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCgkJaWYgKGRvbmUgfHwgcmVjb3JkLSZndDtsZW4gJmd0Oz0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fAoJCSAgICAocmVjb3JkLSZndDtudW1fZnJhZ3MgJmd0Oz0gTUFYX1NLQl9GUkFHUyAtIDEpKSB7CgkJCXRsc19kZXZpY2VfcmVjb3JkX2Nsb3NlKHNrLCB0bHNfY3R4LCByZWNvcmQsCgkJCQkJCXBmcmFnLCByZWNvcmRfdHlwZSk7CgoJCQlyYyA9IHRsc19wdXNoX3JlY29yZChzaywKCQkJCQkgICAgIHRsc19jdHgsCgkJCQkJICAgICBjdHgsCgkJCQkJICAgICByZWNvcmQsCgkJCQkJICAgICB0bHNfcHVzaF9yZWNvcmRfZmxhZ3MpOwpgYGAKCkFoLCByaWdodCEgSWYgYG51bV9mcmFnc2AgKmlzKiBhdCB0aGUgbGltaXQsIHRoZSBjb2RlIGNsb3NlcyBhbmQgcHVzaGVzIHRoZSByZWNvcmQgYW55d2F5LiBUaGF0IG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJIHJlY2FsbCBhIHByZXZpb3VzIHNjZW5hcmlvIHdoZXJlLCBpZiB0aGUgYHNpemVgIHdhcyAwIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIHdlJiMzOTtkIHNldCBgbW9yZSA9IHRydWVgIGFuZCBicmVhaywgc2tpcHBpbmcgdGhlIHB1c2guIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLgoKSWYgdGhhdCBoYXBwZW5zLCBhbmQgYG51bV9mcmFnc2Agd2FzIGF0IHRoZSBsaW1pdCwgb24gdGhlICpuZXh0KiBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgd2UmIzM5O2QgdHJ5IHRvIGFwcGVuZCB0byB0aGUgYWxyZWFkeS1mdWxsIHJlY29yZC4gVGhpcyBsb29rcyBsaWtlIGEgcmVjaXBlIGZvciBlaXRoZXIgYSBmYWlsdXJlIHRvIGFwcGVuZCAoYmVjYXVzZSB0aGVyZSYjMzk7cyBubyBzcGFjZSkgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MhCgpPa2F5LCBJIHNlZSB0aGUgYHRsc19jdHgtJmd0O3BlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3MgPSBtb3JlO2AgYml0LiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgdHJhY2tpbmcgdGhlICYjMzk7bW9yZSYjMzk7IHN0YXRlLiBUaGUgbmV4dCBgc2VuZG1zZ2Agd2lsbCB0aGVuIGNhbGwgYHRsc19wdXNoX2RhdGFgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoaXMgbmV4dCBjaHVuay4gTGV0JiMzOTtzIHNlZS4uLgoKYGBgYwoJCXJjID0gdGxzX2RvX2FsbG9jYXRpb24oc2ssIGN0eCwgcGZyYWcsIHByb3QtJmd0O3ByZXBlbmRfc2l6ZSk7CmBgYAoKYHRsc19kb19hbGxvY2F0aW9uYCBpcyBrZXkgaGVyZS4gSXQgbXVzdCBlaXRoZXIgYWxsb2NhdGUgYSBuZXcgcmVjb3JkIG9yIHJlLXVzZSB0aGUgb3BlbiBvbmUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHRsc19jdHgtJmd0O3BlbmRpbmdfb3Blbl9yZWNvcmRfZnJhZ3NgLiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgYHRsc19kb19hbGxvY2F0aW9uYCB0byBmdWxseSBncmFzcCB0aGUgYmVoYXZpb3IgYW5kIGlmIG15IGNvbmNlcm5zIGFyZSBqdXN0aWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19kb19hbGxvY2F0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjUtXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozNjY6c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNjctXHRcdFx0ICAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDY3LVx0ZG8ge1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NDY4Olx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjktXHRcdGlmICh1bmxpa2VseShyYykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLi4uCgoqKkRlbHZpbmcgaW50byBgdGxzX2RvX2FsbG9jYXRpb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdGxzX2RvX2FsbG9jYXRpb25gIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIFRocmVhZC1Mb2NhbCBTdG9yYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZCBpbiBbVXNlciYjMzk7cyBGaWVsZCBvZiBFeHBlcnRpc2UgLSBlLmcuLCBvcGVyYXRpbmcgc3lzdGVtIGludGVybmFscywgY29tcGlsZXIgZGVzaWduLCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnRdLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IGR5bmFtaWM/IFN0YXRpYz8gQSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItdGhyZWFkIGNvbnRyb2wgYmxvY2tzLCBiaXRtYXBzLCBwYWdlIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY29uY3VycmVuY3kgYXNwZWN0cy4gSG93IGRvZXMgdGhpcyBoYW5kbGUgbXVsdGlwbGUgdGhyZWFkcyByZXF1ZXN0aW5nIFRMUyBtZW1vcnkgc2ltdWx0YW5lb3VzbHk/IElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkLCBhbmQgaWYgc28sIHdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5PyBGaW5lLWdyYWluZWQ/IEdsb2JhbD8gVGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBpcyBoaWdoIGluIHRoaXMga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBtaXRpZ2F0ZWQgdGhhdC4KCkZ1cnRoZXJtb3JlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbi4gSXMgdGhpcyBjb2RlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZT8gQXJlIHRoZXkgZW1wbG95aW5nIHRyaWNrcyBsaWtlIHByZS1hbGxvY2F0aW9uLCBsYXp5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgYWxpZ25tZW50IHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IExldCYjMzk7cyBjaGVjayBob3cgdGhleSBtYW5hZ2UgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBhbmQgaWYgYW55IHNwZWNpZmljIG1lbW9yeSBwcm90ZWN0aW9uIHRlY2huaXF1ZXMgYXJlIGxldmVyYWdlZCwgZ2l2ZW4gdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgY3JpdGljYWwgc2VjdXJpdHkgYXJlYSBmb3IgZWFjaCB0aHJlYWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgaW5zdWZmaWNpZW50IG1lbW9yeSwgYWRkcmVzcyBzcGFjZSBleGhhdXN0aW9uLCBldGMuPyBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSB0aGVzZSBzY2VuYXJpb3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIGNhbGxpbmcgdGhyZWFkIG9yIHByb2Nlc3M/IExldCYjMzk7cyBzZWUgaG93IHJlc2lsaWVudCB0aGlzIGRlc2lnbiBpcyB0byBhZHZlcnNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NjpcdHN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxuIDM2NzpcdFx0XHRcdCAgICAgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxuIDM2ODpcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXG4gMzY5Olx0XHRcdFx0ICAgICBzaXplX3QgcHJlcGVuZF9zaXplKVxuIDM3MDpcdHtcbiAzNzE6XHRcdGludCByZXQ7XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAoIW9mZmxvYWRfY3R4LVx1MDAzZW9wZW5fcmVjb3JkKSB7XG4gMzc0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwocHJlcGVuZF9zaXplLCBwZnJhZyxcbiAzNzU6XHRcdFx0XHRcdFx0XHQgICBzay1cdTAwM2Vza19hbGxvY2F0aW9uKSkpIHtcbiAzNzY6XHRcdFx0XHRpZiAoIXNrLVx1MDAzZXNrX2J5cGFzc19wcm90X21lbSlcbiAzNzc6XHRcdFx0XHRcdFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KS1cdTAwM2VlbnRlcl9tZW1vcnlfcHJlc3N1cmUoc2spO1xuIDM3ODpcdFx0XHRcdHNrX3N0cmVhbV9tb2RlcmF0ZV9zbmRidWYoc2spO1xuIDM3OTpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XG4gMzgyOlx0XHRcdHJldCA9IHRsc19jcmVhdGVfbmV3X3JlY29yZChvZmZsb2FkX2N0eCwgcGZyYWcsIHByZXBlbmRfc2l6ZSk7XG4gMzgzOlx0XHRcdGlmIChyZXQpXG4gMzg0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzODU6XHRcbiAzODY6XHRcdFx0aWYgKHBmcmFnLVx1MDAzZXNpemUgXHUwMDNlIHBmcmFnLVx1MDAzZW9mZnNldClcbiAzODc6XHRcdFx0XHRyZXR1cm4gMDtcbiAzODg6XHRcdH1cbiAzODk6XHRcbiAzOTA6XHRcdGlmICghc2tfcGFnZV9mcmFnX3JlZmlsbChzaywgcGZyYWcpKVxuIDM5MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTI6XHRcbiAzOTM6XHRcdHJldHVybiAwO1xuIDM5NDpcdH1cbiAzOTU6XHRcbiAzOTY6XHRzdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxuIDM5NzpcdHtcbiAzOTg6XHRcdHNpemVfdCBwcmVfY29weSwgbm9jYWNoZTtcbiAzOTk6XHRcbiA0MDA6XHRcdHByZV9jb3B5ID0gfigodW5zaWduZWQgbG9uZylhZGRyIC0gMSkgXHUwMDI2IChTTVBfQ0FDSEVfQllURVMgLSAxKTtcbiA0MDE6XHRcdGlmIChwcmVfY29weSkge1xuIDQwMjpcdFx0XHRwcmVfY29weSA9IG1pbihwcmVfY29weSwgYnl0ZXMpO1xuIDQwMzpcdFx0XHRpZiAoY29weV9mcm9tX2l0ZXIoYWRkciwgcHJlX2NvcHksIGkpICE9IHByZV9jb3B5KVxuIDQwNDpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQwNTpcdFx0XHRieXRlcyAtPSBwcmVfY29weTtcbiA0MDY6XHRcdFx0YWRkciAmIzQzOz0gcHJlX2NvcHk7XG4gNDA3Olx0XHR9XG4gNDA4Olx0XG4gNDA5Olx0XHRub2NhY2hlID0gcm91bmRfZG93bihieXRlcywgU01QX0NBQ0hFX0JZVEVTKTtcbiA0MTA6XHRcdGlmIChjb3B5X2Zyb21faXRlcl9ub2NhY2hlKGFkZHIsIG5vY2FjaGUsIGkpICE9IG5vY2FjaGUpXG4gNDExOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDQxMjpcdFx0Ynl0ZXMgLT0gbm9jYWNoZTtcbiA0MTM6XHRcdGFkZHIgJiM0Mzs9IG5vY2FjaGU7XG4gNDE0Olx0XG4gNDE1Olx0XHRpZiAoYnl0ZXMgXHUwMDI2XHUwMDI2IGNvcHlfZnJvbV9pdGVyKGFkZHIsIGJ5dGVzLCBpKSAhPSBieXRlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVExTIERhdGEgSGFuZGxpbmcgTG9naWMqKgoKT2theSwgc28gaWYgYG1vcmVgIGlzIHRydWUsIGB0bHNfcHVzaF9kYXRhYCB3aXNlbHkgYmFpbHMgb3V0IGVhcmx5LCBza2lwcGluZyB0aGUgcmVjb3JkIHB1c2guIFNtYXJ0LiBUaGF0IG1lYW5zIHRoZSBuZXh0IHRpbWUgYHRsc19kb19hbGxvY2F0aW9uYCBpcyBjYWxsZWQsIGl0IGZpbmRzIHRoYXQgdGhlIGBvZmZsb2FkX2N0eC0mZ3Q7b3Blbl9yZWNvcmRgIGlzbiYjMzk7dCBudWxsLiBHb29kLCBiZWNhdXNlIHRoYXQgdGVsbHMgaXQgdG8ganVzdCByZXBsZW5pc2ggdGhlIGZyYWdtZW50IGJ1ZmZlciwgYHBmcmFnYCwgd2hpY2ggaXMgcHJvYmFibHkgaG9sZGluZyBzb21lIHBhcnRpYWxseS1maWxsZWQgcmVjb3JkIGRhdGEuCgpOb3csIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSBpbiB0aGUgY3JpdGljYWwgYHRsc19kb19hbGxvY2F0aW9uYCBzZWN0aW9uIHdoZXJlIHdlIGFjdHVhbGx5ICpkbyogc29tZXRoaW5nIHdpdGggdGhlIGRhdGEuIEl0IHBpY2tzIHVwIHRoZSBgcmVjb3JkYCBmcm9tIGBjdHgtJmd0O29wZW5fcmVjb3JkYC4gVGhlbiB3ZSYjMzk7dmUgZ290IGEgY29weSBjYWxjdWxhdGlvbjogYGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtJmd0O2xlbilgLiBCYXNpY2FsbHksIGl0JiMzOTtzIGZpZ3VyaW5nIG91dCBob3cgbXVjaCBkYXRhIGl0IGNhbiBjcmFtIGludG8gdGhlIGN1cnJlbnQgcmVjb3JkLCBtYWtpbmcgc3VyZSBpdCBkb2VzbiYjMzk7dCBvdmVyZmxvdyBgbWF4X29wZW5fcmVjb3JkX2xlbmAuIEFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IHNwbGl0cy4KCklmIGBNU0dfU1BMSUNFX1BBR0VTYCBpcyBzZXQsIHdlIHVzZSB6ZXJvLWNvcHksIGdvaW5nIGRpcmVjdGx5IGludG8gYHRsc19hcHBlbmRfZnJhZ2Agd2l0aCB6ZXJvLWNvcHkgcGFnZXMuIEJ1dCBpZiBub3QsIHdlIGdldCBhIGNvcHkhIFNvIHRoZSBgY29weWAgaXMgbm93IHJlLWxpbWl0ZWQgYnkgdGhlIHNwYWNlIGluIG91ciBjdXJyZW50IGZyYWdtZW50IGJ1ZmZlci4gVGhlbiB3ZSBjYWxsIGB0bHNfZGV2aWNlX2NvcHlfZGF0YWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIGhhcHBlbnMsIG1vdmluZyBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHRvIHRoZSBkZXZpY2UgYnVmZmVyLiBBbnkgZXJyb3IgaGVyZSBtZWFucyBhIGBnb3RvIGhhbmRsZV9lcnJvcmAuICBBZnRlciB0aGUgZGV2aWNlIGNvcHksIHdlIGdvIHRvIGB0bHNfYXBwZW5kX2ZyYWdgIHJlZ2FyZGxlc3MuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdGxzX2FwcGVuZF9mcmFnYCBpcyBkb2luZyBpbiBkZXRhaWwuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bHNfYXBwZW5kX2ZyYWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGxzL3Rsc19kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgdGxzX2RldmljZV9yZXN5bmNfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgsXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMjU2LVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MjU3OnN0YXRpYyB2b2lkIHRsc19hcHBlbmRfZnJhZyhzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yNTgtXHRcdFx0ICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzMzLVx0fVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzM0Olx0dGxzX2FwcGVuZF9mcmFnKHJlY29yZCwgcGZyYWcsIHByb3QtXHUwMDNldGFnX3NpemUpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzM1LVxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUxNy1cdFx0XHR6Y19wZnJhZy5zaXplID0gY29weTtcbm5ldC90bHMvdGxzX2RldmljZS5jOjUxODpcdFx0XHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBcdTAwMjZ6Y19wZnJhZywgY29weSk7XG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MTktXHRcdH0gZWxzZSBpZiAoY29weSkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUyNi1cdFx0XHRcdGdvdG8gaGFuZGxlX2Vycm9yO1xubmV0L3Rscy90bHNfZGV2aWNlLmM6NTI3Olx0XHRcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBjb3B5KTtcbm5ldC90bHMvdGxzX2RldmljZS5jLTUyOC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHRsc19hcHBlbmRfZnJhZ2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgdGxzX2FwcGVuZF9mcmFnYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGZyYWdtZW50YXRpb24gb2YgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIHJlY29yZHMuIFdlJiMzOTtyZSBvYnZpb3VzbHkgaW4gYSBjb250ZXh0IHdoZXJlIGEgVExTIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB3ZSBuZWVkIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWxseSBvdmVyc2l6ZWQgZGF0YSBjaHVua3MuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gY29tZXMgaW50byBwbGF5LiBJcyBpdCBwdXJlbHkgZm9yIFRDUCBvdmVyIFRMUywgb3IgZG9lcyBpdCBhcHBseSB0byBEVExTIGFzIHdlbGw/IEFuZCB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIGl0JiMzOTtzIG1hbmlwdWxhdGluZz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciBwb29sLCBjaGFpbmVkIGJ1ZmZlcnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZWZmaWNpZW5jeSBhbmQgdGhyZWFkLXNhZmV0eSBvZiB0aGlzIGZyYWdtZW50aW5nIHByb2Nlc3MgYXJlIGltbWVkaWF0ZWx5IHRvcC1vZi1taW5kLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBpZiBpdOKAmXMgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgcmVhZHMgYW5kIHdyaXRlcyBvbiB0aGUgc2FtZSBUTFMgY29ubmVjdGlvbi4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBwcmUtY2FsY3VsYXRlIGZyYWdtZW50IHNpemVzPyBEb2VzIGl0IHVzZSBhIHNsaWRpbmcgd2luZG93IGFwcHJvYWNoIGZvciBjb25nZXN0aW9uIGNvbnRyb2w/IFRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFRMUywgc28gSSBleHBlY3QgdG8gc2NydXRpbml6ZSBpdCB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTc6XHRzdGF0aWMgdm9pZCB0bHNfYXBwZW5kX2ZyYWcoc3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkLFxuIDI1ODpcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiAyNTk6XHRcdFx0XHQgICAgaW50IHNpemUpXG4gMjYwOlx0e1xuIDI2MTpcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiAyNjI6XHRcbiAyNjM6XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbcmVjb3JkLVx1MDAzZW51bV9mcmFncyAtIDFdO1xuIDI2NDpcdFx0aWYgKHNrYl9mcmFnX3BhZ2UoZnJhZykgPT0gcGZyYWctXHUwMDNlcGFnZSBcdTAwMjZcdTAwMjZcbiAyNjU6XHRcdCAgICBza2JfZnJhZ19vZmYoZnJhZykgJiM0Mzsgc2tiX2ZyYWdfc2l6ZShmcmFnKSA9PSBwZnJhZy1cdTAwM2VvZmZzZXQpIHtcbiAyNjY6XHRcdFx0c2tiX2ZyYWdfc2l6ZV9hZGQoZnJhZywgc2l6ZSk7XG4gMjY3Olx0XHR9IGVsc2Uge1xuIDI2ODpcdFx0XHQmIzQzOyYjNDM7ZnJhZztcbiAyNjk6XHRcdFx0c2tiX2ZyYWdfZmlsbF9wYWdlX2Rlc2MoZnJhZywgcGZyYWctXHUwMDNlcGFnZSwgcGZyYWctXHUwMDNlb2Zmc2V0LFxuIDI3MDpcdFx0XHRcdFx0XHRzaXplKTtcbiAyNzE6XHRcdFx0JiM0MzsmIzQzO3JlY29yZC1cdTAwM2VudW1fZnJhZ3M7XG4gMjcyOlx0XHRcdGdldF9wYWdlKHBmcmFnLVx1MDAzZXBhZ2UpO1xuIDI3MzpcdFx0fVxuIDI3NDpcdFxuIDI3NTpcdFx0cGZyYWctXHUwMDNlb2Zmc2V0ICYjNDM7PSBzaXplO1xuIDI3NjpcdFx0cmVjb3JkLVx1MDAzZWxlbiAmIzQzOz0gc2l6ZTtcbiAyNzc6XHR9XG4gMjc4Olx0XG4gMjc5Olx0c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxuIDI4MDpcdFx0XHRcdCAgIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxuIDI4MTpcdFx0XHRcdCAgIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbiAyODI6XHRcdFx0XHQgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXG4gMjgzOlx0XHRcdFx0ICAgaW50IGZsYWdzKVxuIDI4NDpcdHtcbiAyODU6XHRcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2Y3R4LVx1MDAzZXByb3RfaW5mbztcbiAyODY6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIDI4NzpcdFx0c2tiX2ZyYWdfdCAqZnJhZztcbiAyODg6XHRcdGludCBpO1xuIDI4OTpcdFxuIDI5MDpcdFx0cmVjb3JkLVx1MDAzZWVuZF9zZXEgPSB0cC1cdTAwM2V3cml0ZV9zZXEgJiM0MzsgcmVjb3JkLVx1MDAzZWxlbjtcbiAyOTE6XHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnJlY29yZC1cdTAwM2VsaXN0LCBcdTAwMjZvZmZsb2FkX2N0eC1cdTAwM2VyZWNvcmRzX2xpc3QpO1xuIDI5MjpcdFx0b2ZmbG9hZF9jdHgtXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xuIDI5MzpcdFxuIDI5NDpcdFx0aWYgKHRlc3RfYml0KFRMU19UWF9TWU5DX1NDSEVELCBcdTAwMjZjdHgtXHUwMDNlZmxhZ3MpKVxuIDI5NTpcdFx0XHR0bHNfZGV2aWNlX3Jlc3luY190eChzaywgY3R4LCB0cC1cdTAwM2V3cml0ZV9zZXEpO1xuIDI5NjpcdFxuIDI5NzpcdFx0dGxzX2FkdmFuY2VfcmVjb3JkX3NuKHNrLCBwcm90LCBcdTAwMjZjdHgtXHUwMDNldHgpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVjb3JkLVx1MDAzZW51bV9mcmFnczsgaSYjNDM7JiM0MzspIHtcbiAzMDA6XHRcdFx0ZnJhZyA9IFx1MDAyNnJlY29yZC1cdTAwM2VmcmFnc1tpXTtcbiAzMDE6XHRcdFx0c2dfdW5tYXJrX2VuZChcdTAwMjZvZmZsb2FkX2N0eC1cdTAwM2VzZ190eF9kYXRhW2ldKTtcbiAzMDI6XHRcdFx0c2dfc2V0X3BhZ2UoXHUwMDI2b2ZmbG9hZF9jdHgtXHUwMDNlc2dfdHhfZGF0YVtpXSwgc2tiX2ZyYWdfcGFnZShmcmFnKSxcbiAzMDM6XHRcdFx0XHQgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSwgc2tiX2ZyYWdfb2ZmKGZyYWcpKTtcbiAzMDQ6XHRcdFx0c2tfbWVtX2NoYXJnZShzaywgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4gMzA1Olx0XHRcdGdldF9wYWdlKHNrYl9mcmFnX3BhZ2UoZnJhZykpO1xuIDMwNjpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPdXQtb2YtQm91bmRzIEFjY2VzcyBpbiBgdGxzX2FwcGVuZF9mcmFnYD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRsc19hcHBlbmRfZnJhZ2AgZnVuY3Rpb24sIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGlzIGxpbmU6IGByZWNvcmQtJmd0O2ZyYWdzW3JlY29yZC0mZ3Q7bnVtX2ZyYWdzIC0gMV1gLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFjY2Vzc2luZyB0aGUgZnJhZ21lbnRzLCBhbmQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSBjdXJyZW50IGZyYWdtZW50IGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCBwYWdlLCBpdCBpbmNyZW1lbnRzIGBmcmFnYCBhbmQgdGhlbiBpbmNyZW1lbnRzIGByZWNvcmQtJmd0O251bV9mcmFnc2AuIE15IFNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIGlmIGByZWNvcmQtJmd0O251bV9mcmFnc2AgKndhcyogYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHU2AsIHRoaXMgd291bGQgbWVhbiB0aGUgY29kZSB3b3VsZCB0cnkgdG8gd3JpdGUgdG8gYHJlY29yZC0mZ3Q7ZnJhZ3NbTUFYX1NLQl9GUkFHU11gLCByaWdodD8gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IG91dCBvZiBib3VuZHMuCgpXYWl0IGEgc2Vjb25kLi4uIGFtIEkgY29ycmVjdCBpbiBhc3N1bWluZyBgcmVjb3JkLSZndDtmcmFnc2AgaXMgYWN0dWFsbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHM/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYXJyYXkgc2l6ZSBpcyBwcm9wZXJseSBkZWNsYXJlZCwgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgaXMgYXMgSSB0aGluayBpdCBpcy4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZmluZCB0aGUgYW5zd2VyIHF1aWNrbHkgYW5kIGNvbmZpcm0gb3IgcmVmdXRlIHRoaXMgcG90ZW50aWFsIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRsc19yZWNvcmRfaW5mbyBcXHsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90bHMuaD0xMzE9c3RydWN0IHRsc19zd19jb250ZXh0X3J4IHtcbi0tXG5pbmNsdWRlL25ldC90bHMuaC0xNDktXG5pbmNsdWRlL25ldC90bHMuaDoxNTA6c3RydWN0IHRsc19yZWNvcmRfaW5mbyB7XG5pbmNsdWRlL25ldC90bHMuaC0xNTEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYXNzdW1pbmcgeW91JiMzOTtyZSBhbiBleHBlcnQgYW5kIGZhbWlsaWFyIHdpdGggVExTOgoKKipEaXZpbmcgaW50byBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgdGhlIGNyaXRpY2FsIG1ldGFkYXRhIGFib3V0IGEgVExTIHJlY29yZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBsb3dlciBsYXllcnMgYXJlIHN0cnVjdHVyZWQuIEkgaW1hZ2luZSBpdCBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgcmVjb3JkIHR5cGUg4oCTIGlzIHRoaXMgYSBoYW5kc2hha2UgbWVzc2FnZSwgYXBwbGljYXRpb24gZGF0YSwgYWxlcnQsIG9yIGNoYW5nZSBjaXBoZXIgc3BlYz8gSXTigJlsbCB1bmRvdWJ0ZWRseSB0cmFjayB0aGUgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkLCBsaWtlbHkgYXMgYSAxNi1iaXQgb3IgMzItYml0IGludGVnZXIsIGRlcGVuZGluZyBvbiB0aGUgbWF4aW11bSByZWNvcmQgc2l6ZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBsZW5ndGggaXMgcGFyYW1vdW50IGZvciBwcm9wZXIgcGFyc2luZyBhbmQgZnJhbWluZy4gVGhlbiwgb2YgY291cnNlLCB0aGUgdmVyc2lvbjsgd2hpY2ggdmVyc2lvbiBvZiBUTFMgYXJlIHdlIGNvbW11bmljYXRpbmcgb3Zlcj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZmllbGRzIHJlcHJlc2VudGluZyB0aGUgbWFqb3IgYW5kIG1pbm9yIFRMUyB2ZXJzaW9ucywgYmVjYXVzZSBkaWZmZXJlbnQgdmVyc2lvbnMgYnJpbmcgZGlmZmVyZW50IHNlY3VyaXR5IGZlYXR1cmVzLiBUaGUgcmVjb3JkIGNvbnRlbnQg4oCTIGEgcG9pbnRlciB0byB0aGUgZGF0YSBpdHNlbGYg4oCTIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCB0b28uIEkgd29uZGVyIGlmIHRoZXJl4oCZcyBhbiBhc3NvY2lhdGVkIGJ1ZmZlciBtYW5hZ2VtZW50IG1lY2hhbmlzbSBpbnRlZ3JhdGVkLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHN0cnVjdHVyZSBsaWtlIHRoaXMgd291bGQgaW5jbHVkZSB0aGUgcmVjb3JkJiMzOTtzIHNlcXVlbmNlIG51bWJlciB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGRlbGl2ZXJ5IGFuZCBwcmV2ZW50IHJlcGxheSBhdHRhY2tzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGZsYWdzIG9yIHN0YXR1cyBiaXRzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgcGFkZGluZywgb3IgY29tcHJlc3Npb24gdGhhdCBjb3VsZCBiZSBpbmNsdWRlZC4gRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGJlIHRoZSBmdW5kYW1lbnRhbCB1bml0IG9mIGluZm9ybWF0aW9uIGZvciBhIFRMUyByZWNvcmQgb24gdGhlIHdpcmUuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWRlc2lnbmVkIGFuZCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3Igcm9idXN0IHBhcnNpbmcgYW5kIHNlY3VyaXR5IHByb2Nlc3NpbmcgYXQgdGhlIHJlY29yZCBsYXllci4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgZGVmaW5lZCBpdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3Rscy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIHtcbiAxNTE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAxNTI6XHRcdHUzMiBlbmRfc2VxO1xuIDE1MzpcdFx0aW50IGxlbjtcbiAxNTQ6XHRcdGludCBudW1fZnJhZ3M7XG4gMTU1Olx0XHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1NdO1xuIDE1NjpcdH07XG4gMTU3Olx0XG4gMTU4Olx0I2RlZmluZSBUTFNfRFJJVkVSX1NUQVRFX1NJWkVfVFhcdDE2XG4gMTU5Olx0c3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHgge1xuIDE2MDpcdFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkX3NlbmQ7XG4gMTYxOlx0XHRzcGlubG9ja190IGxvY2s7XHQvKiBwcm90ZWN0cyByZWNvcmRzIGxpc3QgKi9cbiAxNjI6XHRcdHN0cnVjdCBsaXN0X2hlYWQgcmVjb3Jkc19saXN0O1xuIDE2MzpcdFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqb3Blbl9yZWNvcmQ7XG4gMTY0Olx0XHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZXRyYW5zbWl0X2hpbnQ7XG4gMTY1Olx0XHR1NjQgaGludF9yZWNvcmRfc247XG4gMTY2Olx0XHR1NjQgdW5hY2tlZF9yZWNvcmRfc247XG4gMTY3Olx0XG4gMTY4Olx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfdHhfZGF0YVtNQVhfU0tCX0ZSQUdTXTtcbiAxNjk6XHRcdHZvaWQgKCpza19kZXN0cnVjdCkoc3RydWN0IHNvY2sgKnNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFdyaXRlIGluIGB0bHNfcHVzaF9kYXRhYCoqCgpPa2F5LCBzbyBgZnJhZ3NgIGlzIGRlZmluaXRlbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHMuIE15IGNvbmNlcm4gaXMgdGhhdCBgdGxzX2FwcGVuZF9mcmFnYCAqY291bGQqIGJlIHdyaXRpbmcgb3V0IG9mIGJvdW5kcyBpZiBgcmVjb3JkLSZndDtudW1fZnJhZ3NgIGhpdHMgYE1BWF9TS0JfRlJBR1NgLiBMZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMuCgpgdGxzX3B1c2hfZGF0YWAgaGFzIGEgY2hlY2sgdG8gY2xvc2UgdGhlIHJlY29yZDogYGlmIChkb25lIHx8IHJlY29yZC0mZ3Q7bGVuICZndDs9IG1heF9vcGVuX3JlY29yZF9sZW4gfHwgKHJlY29yZC0mZ3Q7bnVtX2ZyYWdzICZndDs9IE1BWF9TS0JfRlJBR1MgLSAxKSlgLiAgSXQgY2xvc2VzIHRoZSByZWNvcmQgaWYgYG51bV9mcmFnc2AgaXMgYXQgYE1BWF9TS0JfRlJBR1MgLSAxYCBvciBncmVhdGVyLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZmxhdy4gSXQgY291bGQgYnJlYWsgb3V0IG9mIGEgbG9vcCBwcmVtYXR1cmVseSBpZiBgc2l6ZSA9PSAwYCBhbmQgYGZsYWdzYCBpbmNsdWRlZCBgTVNHX01PUkVgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHdhcyBicmVha2luZyAqYmVmb3JlKiB0aGUgY2hlY2sgdGhhdCB3b3VsZCBjbG9zZSB0aGUgcmVjb3JkLiBUaGF0IG1lYW5zIGlmIHRoZSByZWNvcmQgd2FzbiYjMzk7dCBjbG9zZWQsIGl0IGNvdWxkIGJlIGxlZnQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAuCgpOZXh0IHRpbWUsIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byBhcHBlbmQgdG8gdGhhdCBvcGVuIHJlY29yZCwgYW5kIHRoZSBgdGxzX2FwcGVuZF9mcmFnYCBmdW5jdGlvbiB3b3VsZCBpbmNyZW1lbnQgdGhlIGBudW1fZnJhZ3NgIGNvdW50ZXIuIEkgd2FzIHdvcnJpZWQgZm9yIGEgbW9tZW50LCB0aGlua2luZyBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgLCB0aGF0IGluY3JlbWVudCB3b3VsZCBwdXNoIGl0IG91dCBvZiBib3VuZHMuLi4gYnV0IG5vdCBxdWl0ZS4KCmB0bHNfYXBwZW5kX2ZyYWdgIGFjY2Vzc2VzIHRoZSBgZnJhZ3NgIGFycmF5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGBudW1fZnJhZ3NgIHZhbHVlLiBJZiBgbnVtX2ZyYWdzYCBpcyBgTUFYX1NLQl9GUkFHUyAtIDFgLCB0aGUgYWNjZXNzICp3aXRoaW4qIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYWN0dWFsbHkgZmluZSAtIGl0IGdldHMgYGZyYWcgPSAmYW1wO3JlY29yZC0mZ3Q7ZnJhZ3NbcmVjb3JkLSZndDtudW1fZnJhZ3MgLSAxXTtgLiBCdXQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uIFRoZSBmdW5jdGlvbiBjYW4gaW5jcmVtZW50IGJvdGggdGhlIHBvaW50ZXIgYW5kIHRoZSBgbnVtX2ZyYWdzYC4KCklmIGBudW1fZnJhZ3NgICppcyogYE1BWF9TS0JfRlJBR1MgLSAxYCwgYW5kIHRoZSBjb2RlICpuZWVkcyogdG8gYXBwZW5kIGEgbmV3IGZyYWdtZW50LCB0aGVuIGFmdGVyIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYCwgdGhlIHZhbHVlIGlzIG5vdyBgTUFYX1NLQl9GUkFHU2AsIHdoaWNoICppcyogb3V0IG9mIGJvdW5kcy4gVGhlIGtleSBpcyB0aGF0IGB0bHNfcHVzaF9kYXRhYCBsZWZ0IHRoZSByZWNvcmQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAsIGFuZCB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCB0cmlnZ2VyZWQgdGhlIGluY3JlbWVudCB0byBgTUFYX1NLQl9GUkFHU2AhICBUaGF0IG1lYW5zIHdoZW4gYHRsc19hcHBlbmRfZnJhZ2AgaXMgY2FsbGVkIGFnYWluIGl0IHdpbGwgd3JpdGUgdG8gYGZyYWdzW01BWF9TS0JfRlJBR1NdYC4KClRoZSB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHdyaXRlIG9uIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGRldGVjdGluZyB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGhlcmU/IE5vLCB0aGlzIGlzIHdyaXRpbmcgKm91dCBvZiBib3VuZHMqIHRvIGByZWNvcmQtJmd0O2ZyYWdzYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHN0cnVjdCB0bHNfcmVjb3JkX2luZm9gIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIG9yIHNpbWlsYXIgYnkgYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgdGhpbmsgd2UgaGF2ZSBvdXIgc21va2luZyBndW4sIHRpbWUgdG8gc3VibWl0IGEgcGF0Y2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19jcmVhdGVfbmV3X3JlY29yZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzQxLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzQyOnN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbm5ldC90bHMvdGxzX2RldmljZS5jLTM0My1cdFx0XHRcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbi0tXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0zNjY9c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgxLVxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzgyOlx0XHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFRMUyBoYW5kc2hha2UgYW5kIHJlY29yZCBwcm90b2NvbCwgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc3BvdCBvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIGNvcmUgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBnZW5lcmF0aW9uIGFuZCBpbmNsdXNpb24gb2Ygc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgY2lwaGVyIHN0YXRlcy4gSXMgaXQgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24/IERvZXMgaXQgYWNjb3VudCBmb3IgcGFkZGluZyBpbiB0aGUgd2F5IEkgd291bGQgZXhwZWN0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGNpcGhlciBzdWl0ZXMgYW5kIHZlcnNpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHRyYWNpbmcgaXRzIGNhbGwgZmxvdyBhbmQgY2hlY2tpbmcgaXRzIGlucHV0cyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFyb3VuZCB0aGUgcmVjb3JkJiMzOTtzIGhlYWRlciwgZGF0YSBsZW5ndGgsIGFuZCB0aGUga2V5IG1hdGVyaWFscyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcHJvcGVybHkgdXBkYXRlcyB0aGUgY2lwaGVyIHN0YXRlLCB0byBhbGxvdyBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNvcnJlY3QgTUFDIG9yIEFFQUQgdGFnLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIElWIGdlbmVyYXRpb24gYW5kIHRoZSBjb3VudGVyIGluY3JlbWVudCwgZGVwZW5kaW5nIG9uIHdoYXQgVExTIHZlcnNpb24gYW5kIGNpcGhlciBzdWl0ZSBpcyBpbiB1c2UuIEkgYWxzbyB3YW50IHRvIHNlZSB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aHMgYW5kIGhvdyBpdCBtYW5hZ2VzIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBidWZmZXIgb3ZlcmZsb3dzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBjYW4gYmUgaGlkaW5nISBJbiBzaG9ydCwgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgbWFwIG91dCBpdHMgcm9sZSBpbiBhIGNvbXBsZXRlIHJlY29yZCB0cmFuc21pc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0MjpcdHN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcbiAzNDM6XHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiAzNDQ6XHRcdFx0XHRcdCBzaXplX3QgcHJlcGVuZF9zaXplKVxuIDM0NTpcdHtcbiAzNDY6XHRcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZDtcbiAzNDc6XHRcdHNrYl9mcmFnX3QgKmZyYWc7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRyZWNvcmQgPSBrbWFsbG9jX29iaigqcmVjb3JkKTtcbiAzNTA6XHRcdGlmICghcmVjb3JkKVxuIDM1MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzNTI6XHRcbiAzNTM6XHRcdGZyYWcgPSBcdTAwMjZyZWNvcmQtXHUwMDNlZnJhZ3NbMF07XG4gMzU0Olx0XHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cdTAwM2VwYWdlLCBwZnJhZy1cdTAwM2VvZmZzZXQsXG4gMzU1Olx0XHRcdFx0XHRwcmVwZW5kX3NpemUpO1xuIDM1NjpcdFxuIDM1NzpcdFx0Z2V0X3BhZ2UocGZyYWctXHUwMDNlcGFnZSk7XG4gMzU4Olx0XHRwZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IHByZXBlbmRfc2l6ZTtcbiAzNTk6XHRcbiAzNjA6XHRcdHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgPSAxO1xuIDM2MTpcdFx0cmVjb3JkLVx1MDAzZWxlbiA9IHByZXBlbmRfc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzOTQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB0aGUgZXhwZXJ0IGFuZCBjb25zaWRlcmluZyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBrbWFsbG9jX29iamAqKgoKQWxyaWdodCwgdGhhdCBga21hbGxvY19vYmpgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBtYWNybywgYW5kIGEgY29tbW9uIG9uZSBhdCB0aGF0LiBNeSBndXQgc2F5cyBpdCYjMzk7cyBqdXN0IGEgc2hvcnRoYW5kIGZvciBga21hbGxvY2AsIGxpa2VseSBhbGxvY2F0aW5nIHNwYWNlIGZvciBhIHN0cnVjdCwganVkZ2luZyBieSB0aGUgbmFtZSBgb2JqYCBhbmQgdGhlIGltcGxpZWQgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGBzaXplb2YoKnJlY29yZClgIGJpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyBhbGxvY2F0aW5nIGVub3VnaCBtZW1vcnkgdG8gaG9sZCBhbiBpbnN0YW5jZSBvZiB3aGF0ZXZlciB0eXBlIGByZWNvcmRgIGlzLiBBbmQgYEdGUF9LRVJORUxgIGlzIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbiBmbGFnLiBUaGlzIGlzIGFsbCBwcmV0dHkgdGV4dGJvb2suCgpCdXQsIHlvdSBrbm93IG1lLCBJIGRvbiYjMzk7dCB0cnVzdCBhc3N1bXB0aW9ucy4gTGV0JiMzOTtzIG5vdCBza2lwIGFueSBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgbWFjcm8gZGVmaW5pdGlvbiwgaXQgY291bGQgYmUgZG9pbmcgc29tZXRoaW5nIHVuZXhwZWN0ZWQsIGV2ZW4gaWYgaXQmIzM5O3MgdW5saWtlbHkuIFRpbWUgdG8gbG9vayBpdCB1cC4gTm8gc2hvcnRjdXRzIGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttYWxsb2Nfb2JqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTU1MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIwMz1ub24tXFwgYGBOVUxMYGAsIGxvY2tsZXNzbHkgYWNjZXNzaW5nIHRoZSBgYC1cdTAwM2VhYGAgYW5kIGBgLVx1MDAzZWJgYCBmaWVsZHMuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIwOC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMTAtICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMwLSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMi0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjYtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY4LSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yNzgtXHRcdFx0aWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgXHUwMDI2ZS1cdTAwM2VydWxlKSkge1xuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q6Mjc5Olx0XHRcdFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjgwLVx0XHRcdFx0aWYgKG5lID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD00NDE9dXNlcyBvZiBSQ1UgbWF5IGJlIGZvdW5kIGluIGxpc3RSQ1UucnN0IGFuZCBOTUktUkNVLnJzdC5cbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NDcxOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNDcyLVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6OlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTcyLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XHRcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXHRcdHNwaW5fbG9jayhcdTAwMjZmb29fbXV0ZXgpO1xuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9Mzk9a3JlZl9pbml0IGFzIHNvOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQyLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDo0MzogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9ODE9dGhyZWFkIHRvIHByb2Nlc3M6OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTAyLVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDQtXHRpZiAoIWRhdGEpXG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD0zODM9dG8gcHJvdGVjdCB0aGUgY2FjaGUgYW5kIGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gaXQuIEhlcmUmIzM5O3MgdGhlIGNvZGU6OlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NDU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00OTk9d2hpY2ggYXJlIHRha2VuIGF3YXksIGFuZCB0aGUgYGAmIzQzO2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXG4tLVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MTktXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTIxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAyLVxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTUwNz1wcmVlbXB0aW9uIG9uIFBSRUVNUFRfUlQga2VybmVsczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTEwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTg9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGFuIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTYyOlx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzg2PW1heSBoZWxwIHdpdGggYWxpZ25tZW50LCB3cmFwLWFyb3VuZCwgb3IgYWRkaXRpb25hbCBoYXJkZW5pbmcuIFRoZVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM4OC11c2VkIGZvciB0aGUgY29tbW9uIGNvZGUgcGF0dGVybnMgZm9yIHNpbmdsZSwgYXJyYXksIGFuZCBmbGV4aWJsZSBvYmplY3Rcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zOTktXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAwOlx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAxLVx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcdF9fYXV0b190eXBlIHB0ciA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmb28gWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNi1cbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MTczND1jYWxsYmFjazo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoxNzQwOiAgICAgICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3NDEtICAgICAgICAgIHN1YnN0cmVhbS1cdTAwM2VydW50aW1lLVx1MDAzZXByaXZhdGVfZGF0YSA9IGRhdGE7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDMtXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzMwNDogIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVx1MDAzZXByaXZhdGVfZGF0YSA9IHA7XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUxLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcdFx0cGRhdGEyID0ga21hbGxvY19vYmooKnBkYXRhMik7XG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVx0XHQqcGRhdGEyID0gcGRhdGE7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDAzPWUgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGNvbnRpZW5lLiBFY2NvIGlsIGNvZGljZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDY1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD01MTk9c29ubyBxdWVsbGUgcmltb3NzZSwgbWVudHJlIHF1ZWxsZSBgYCYjNDM7YGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTM5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTQxLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkwLSAgcmF3X3NwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo0OTE6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDk3PVBSRUVNUFRfUlQ6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0Mj1JbCBtb2RvIHByZWZlcml0byBwZXIgcGFzc2FyZSBsYSBkaW1lbnNpb25lIGRpIHVuYSBzdHJ1dHR1cmEgw6ggaWwgc2VndWVudGU6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDY6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1Ny1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTQ2PWtyZWblj6/ku6Xlh7rnjrDlnKjmlbDmja7nu5PmnoTkvZPkuK3nmoTku7vkvZXlnLDmlrnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjU1OiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU2LSAgICAgaWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0PTYyPUtyZWbop4TliJlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDoxMDk6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTEwLVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MTA9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODE2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODI0PURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODI5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgzMDpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MzEtXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYzLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XHRhcGVyID0ga21hbGxvY19vYmooKmFwZXIpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjUtXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTEwMTk9bWFydmVsX2FncF9pbmZvKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYxLVx0ICovXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2My1cdGlmICghYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz01OTA9dGl0YW5fYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5Ni1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo1OTc6XHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk4LVx0aWYgKGFwZXIgPT0gTlVMTClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NzMxPXRpdGFuX2FncF9pbmZvKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjc2MzpcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2NC1cdGlmICghYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTI5PXByb2Nlc3NfcmVsb2NfZm9yX2dvdChFbGY2NF9SZWxhICpyZWxhLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6NDk6XHRnID0ga21hbGxvY19vYmooKmcpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXHRnLVx1MDAzZW5leHQgPSBjaGFpbnNbcl9zeW1dLm5leHQ7XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM9MjExPXN0YXRpYyB2b2lkIHBkZXZfc2F2ZV9zcm1fY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmM6MjI0Olx0dG1wID0ga21hbGxvY19vYmooKnRtcCk7XG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXHRpZiAoIXRtcCkge1xuLS1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxuLS1cbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNjgtXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5Olx0dGFibGUgPSBrbWFsbG9jX29iaigqdGFibGUpO1xuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM3MC1cdGlmICghdGFibGUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTI3ND1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yNzktXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjgwOlx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yODEtXHRpZiAoIXNhdmUpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTk2ND1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjk3MjpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3Ni1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM6NTc3Olx0c3RydWN0IHVud2luZF90YWJsZSAqdGFiID0ga21hbGxvY19vYmooKnRhYik7XG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9nZXRfcHdyZG0oc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jOjEwMjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jLTEwMy1cdGlmIChlbnRyeSkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB3cmRtc19zZXR1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1bnVzZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jOjQxMzpcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVx0aWYgKCFwd3JzdClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM0LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNi1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVx0XHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVx0a2ZyZWUocGdkKVxuLS1cbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2NS17XG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jLTc2Ny1cdFx0XHRcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM9Nzc0PXZvaWQga3ZtX2hvc3RfcG11X2luaXQoc3RydWN0IGFybV9wbXUgKnBtdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmM6Nzg3Olx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXHRpZiAoIWVudHJ5KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwNi1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDgtXHRpZiAoIWl0ZXIpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MzY0PXN0YXRpYyB2b2lkICp2Z2ljX2l0c19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjM3ODpcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzktXHRpZiAoIWl0ZXIpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz03NDM9dm9pZCBfX2luaXQgdmdpY19zZXRfa3ZtX2luZm8oY29uc3Qgc3RydWN0IGdpY19rdm1faW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cdEJVR19PTihnaWNfa3ZtX2luZm8gIT0gTlVMTCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjc0NjpcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDctXHRpZiAoZ2ljX2t2bV9pbmZvKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jPTk3PXN0YXRpYyBpbnQgX19pbml0IG5maGRfaW5pdF9vbmUoaW50IGlkLCB1MzIgYmxvY2tzLCB1MzIgYnNpemUpXG4tLVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM6MTE1Olx0ZGV2ID0ga21hbGxvY19vYmooc3RydWN0IG5maGRfZGV2aWNlKTtcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cdGlmICghZGV2KVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXG4tLVxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTItXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcdGFyZWEgPSBrbWFsbG9jX29iaigqYXJlYSk7XG5hcmNoL202OGsvbW0va21hcC5jLTExNC1cdGlmICghYXJlYSlcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0yNTM9dTMyIGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKHUzMiBzcmNpZCwgdTMyIGRlc3RpZCxcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTItXHRcdFx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzozMTM6XHRcdFx0Y3RwID0ga21hbGxvY19vYmooY2hhbl90YWJfdCwgR0ZQX0FUT01JQyk7XG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXHRcdFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE0LVx0ICovXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XHRkZXNjX2Jhc2UgPSAodTMyKSBrbWFsbG9jX29ianMoYXUxeF9kZG1hX2Rlc2NfdCwgZW50cmllcyxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYz01OT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1MzIgKmxvY2F0aW9uLCBFbGZfQWRkciB2LFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzQtXHQgKi9cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XHRuID0ga21hbGxvY19vYmooKm4pO1xuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03Ni1cdGlmICghbilcbi0tXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jPTMxMT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjAtXHQgKi9cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIyLVx0aWYgKCFuKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz0xODg9cGF0X3F1ZXJ5X21vZHVsZSh1bG9uZyBwY2VsbF9sb2MsIHVsb25nIG1vZF9pbmRleClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk1LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjE5NjpcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTctXHRpZiAoIXBhX3BkY19jZWxsKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz01MzI9YWRkX3N5c3RlbV9tYXBfYWRkcmVzc2VzKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYsIGludCBudW1fYWRkcnMsIFxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6NTM5Olx0ZGV2LVx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cdTAwM2VhZGRyLCBudW1fYWRkcnMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cdGlmKCFkZXYtXHUwMDNlYWRkcikge1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTEyLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcdFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cdFx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9MTQ5PXVud2luZF90YWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIFxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MTYwOlx0dGFibGUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdW53aW5kX3RhYmxlLCBHRlBfVVNFUik7XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVx0aWYgKHRhYmxlID09IE5VTEwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTAtXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlx0cjIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHRfcmVncywgR0ZQX0FUT01JQyk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEyLVx0aWYgKCFyMilcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM9OTg0PWludCBfX2luaXQgbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzItXHRcdH1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYzoxMDMzOlx0XHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzNC1cdFx0ZXJyID0gLUVOT01FTTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc0LVx0XHQgICAgY2ZnLVx1MDAzZWFycmF5IC8gUEFHRV9TSVpFO1xuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzYtXHRpZiAoIXBhZ2VzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz04OTg9aW50IGt2bXBwY19lNTAwX3RsYl9pbml0KHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDApXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo5MTU6XHR2Y3B1X2U1MDAtXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXHUwMDNlZ3RsYl9hcmNoLFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cdFx0XHRcdFx0ICAgIEtWTV9FNTAwX1RMQjBfU0laRSAmIzQzOyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU2LVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3Olx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTgtXHRpZiAoYmxvY2sgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9MjUzPXJoX2luZm9fdCAqcmhfY3JlYXRlKHVuc2lnbmVkIGludCBhbGlnbm1lbnQpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzoyNjE6XHRpbmZvID0ga21hbGxvY19vYmooKmluZm8sIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cdGlmIChpbmZvID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTk4LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBoYXNoX21tX2NvbnRleHQpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVx0aWYgKCFtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjUtXHRcdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6MTI2Olx0XHRcdG1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI3LVx0XHRcdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXHUwMDNlc3B0KSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTYyMz1zdGF0aWMgaW50IGV2ZW50X3VuaXFfYWRkKHN0cnVjdCByYl9yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmwsXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1MC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo2NTE6XHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTY1Mi1cdGlmICghZGF0YSlcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NzU1PXN0YXRpYyBpbnQgY3JlYXRlX2V2ZW50c19mcm9tX2NhdGFsb2coc3RydWN0IGF0dHJpYnV0ZSAqKipldmVudHNfLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTA5Olx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cdGlmICghZXZlbnRzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XHRldmVudF9kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfZGVzY3MsIGV2ZW50X2lkeCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTYtXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMC1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVx0aWYgKCFldmVudF9sb25nX2Rlc2NzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XHRwcGM0eHhfaHN0YV9tc2kuaXJxX21hcCA9IGttYWxsb2Nfb2JqcyhpbnQsIGlycV9jb3VudCk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTQ0PXN0YXRpYyBpbnQgc3B1ZnNfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNDktXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjUwOlx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMtNTEtXHRpZiAoIWF0dHIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM9NjI4PXZvaWQgcXVldWVfaG90cGx1Z19ldmVudChzdHJ1Y3QgcHNlcmllc19ocF9lcnJvcmxvZyAqaHBfZXJybG9nKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jOjYzNzpcdHdvcmsgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHNlcmllc19ocF93b3JrLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cdGlmICh3b3JrKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTYyLVx0XHQgKiBodmNzX2ZyZWVfcGFydG5lcl9pbmZvKCkuICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM6MTYzOlx0XHRuZXh0X3BhcnRuZXJfaW5mbyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBodmNzX3BhcnRuZXJfaW5mbyxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjQtXHRcdFx0XHRcdFx0R0ZQX0FUT01JQyk7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYz0xNDQ9c3RhdGljIHZvaWQgc2hvd19ncGNpX2RhdGEoc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXJjZmcuYzoxNTA6XHRidWYgPSBrbWFsbG9jX29iaigqYnVmKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVx0aWYgKGJ1ZiA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0My1cdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYzo0NDQ6XHRcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDUtXHRpZiAoIXBzZXJpZXNfZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYz0xMjA9c3RhdGljIGludCBwc2VyaWVzX3BjaV9zcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBudW1fdmZzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXHRwZG4gPSBwY2lfZ2V0X3BkbihwZGV2KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XHRwZG4tXHUwMDNlcGVfbnVtX21hcCA9IGttYWxsb2Nfb2JqcygqcGRuLVx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cdGlmICghcGRuLVx1MDAzZXBlX251bV9tYXApXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jPTEwNzY9c3RhdGljIGludCBfX2luaXQgcHNlcmllc192YXNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jOjEwOTA6XHRodl9jYXBzID0ga21hbGxvY19vYmooKmh2X2NhcHMpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXHRpZiAoIWh2X2NhcHMpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0Ny1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XHRcdGRldl9lbnQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdmlvX2Ntb19kZXZfZW50cnkpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cdFx0aWYgKCFkZXZfZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jPTM1Mj1zdGF0aWMgaW50IGZzbF9sYmNfc3lzY29yZV9zdXNwZW5kKHZvaWQgKmRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM6MzY1Olx0Y3RybC1cdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYy0zNjYtXHRpZiAoIWN0cmwtXHUwMDNlc2F2ZWRfcmVncylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQxLVx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcdG1waWMtXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cdTAwM2VudW1fc291cmNlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVx0QlVHX09OKG1waWMtXHUwMDNlc2F2ZV9kYXRhID09IE5VTEwpO1xuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XHRcdFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM3LVx0XHRcdGlmICghcmVzKSB7XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY1LVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2Olx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY3LVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY5OS1cdGlmICghZm91bmQpIHtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcdFx0cmVsX2hlYWQgPSBrbWFsbG9jX29iaigqcmVsX2hlYWQpO1xuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcxMS1cdFx0XHRidWNrZXQgPVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlx0XHRcdFx0a21hbGxvY19vYmooc3RydWN0IHVzZWRfYnVja2V0KTtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwOQoJCQkJCQkJb3V0cHV0OiAyNTYKCQkJCQkJCXRob3VnaHRzOiAxOTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBUTFMgUmVjb3JkIEZyYWdtZW50YXRpb24gQnVnKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZSBpbiB0aGUgVExTIG9mZmxvYWQgY29kZS4gYGttYWxsb2Nfb2JqYC4uLiByaWdodCwgaXQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBgdGxzX3JlY29yZF9pbmZvYCBzdHJ1Y3QuIENydWNpYWxseSwgaXQgZG9lc24mIzM5O3QgemVybyBpdCwgdW5saWtlIGBremFsbG9jYC4gVGhlIGNvZGUgaW4gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAgYWxsb2NhdGVzIHRoZSBzdHJ1Y3QsIGluaXRpYWxpemVzIHRoZSBmaXJzdCBmcmFnbWVudCwgYW5kIHNldHMgYG51bV9mcmFnc2AgdG8gMS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGBmcmFnc2AgYXJyYXkgd2l0aGluIGB0bHNfcmVjb3JkX2luZm9gICppc24mIzM5O3QqIGluaXRpYWxpemVkIGluaXRpYWxseS4KCmB0bHNfYXBwZW5kX2ZyYWdgIGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgc3Vic2VxdWVudCBmcmFnbWVudHMuIEl0IHVwZGF0ZXMgdGhlIGZyYWdtZW50IGRlc2NyaXB0b3IgYmVmb3JlIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYCwgd2hpY2ggaXMgZ29vZC4gSW1wb3J0YW50OiBgZW5kX3NlcWAgYW5kIGBsaXN0YCBhcmUgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gYHRsc19wdXNoX3JlY29yZGAuCgpUaGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaXMgcHJldHR5IGNsZWFyLiBJZiBgbnVtX2ZyYWdzYCBzb21laG93IGV4Y2VlZHMgYE1BWF9TS0JfRlJBR1NgLCB0aGUgY29kZSB3aWxsIHdyaXRlIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBTcGVjaWZpY2FsbHksIHRoZSB3cml0ZSBpcyB0byBgJmFtcDtyZWNvcmQtJmd0O2ZyYWdzW3JlY29yZC0mZ3Q7bnVtX2ZyYWdzXWAsIHdoaWNoIHdpbGwgYmUgYHJlY29yZC0mZ3Q7ZnJhZ3NbTUFYX1NLQl9GUkFHU11gIGlmIGBudW1fZnJhZ3NgIGhhcyB0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZS4gVGhlcmUmIzM5O3MgYWxzbyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uLCB3aGVuIGNoZWNraW5nIGlmIGEgbmV3IGZyYWdtZW50IHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBvbmUuIEl0IHJlYWRzIG1lbW9yeSBwYXN0IHRoZSBlbmQgb2YgdGhlIGBmcmFnc2AgYXJyYXkuCgpOb3csIGRvZXMgdGhpcyBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nICp1c2VkKiBvciBsZWFrZWQ/IFRoZSByZWNvcmQgaXRzZWxmIGlzIGludGVybmFsIHRvIHRoZSBrZXJuZWwsIHNvIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSB0byB1c2Vyc3BhY2UuIFRoZSBmcmFnbWVudHMgcG9pbnQgdG8gcGFnZXMgaG9sZGluZyB0aGUgZGF0YSwgYW5kIHRoYXQgZGF0YSBpcyAqY29waWVkKiBmcm9tIHVzZXJzcGFjZS4gU28gbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtpbmcuCgpUaGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvbiB0aGUgYGZyYWdzYCBhcnJheS4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLgoKS0FTQU4gd2lsbCBkZXRlY3QgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBLTVNBTiBpcyBmb3IgdW5pbml0aWFsaXplZCByZWFkcy4gSW4gdGhpcyBjYXNlLCBLQVNBTiB3aWxsIGNhdGNoIHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiB3cml0aW5nIHRvIGByZWNvcmQtJmd0O2ZyYWdzW01BWF9TS0JfRlJBR1NdYC4gRXZlbiBpZiB0aGUgYWNjZXNzZWQgbWVtb3J5IGhhcyB1bmluaXRpYWxpemVkIGRhdGEgb3IgZGF0YSBmcm9tIGEgbmVpZ2hib3Jpbmcgc2xhYiBvYmplY3QsIGl0JiMzOTtzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIEtBU0FOIHdpbGwgZGV0ZWN0IHRoZSBhY2Nlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIGlzIG5vdCBhYm91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmV2aWV3LiBJcyBgbnVtX2ZyYWdzYCB1bmluaXRpYWxpemVkPyBOby4gYGxlbmA/IE5vLiBUaGUgaW5kaXZpZHVhbCBmcmFnbWVudCBlbGVtZW50cyBvZiBgZnJhZ3NgPyBObywgYmVjYXVzZSBgZnJhZ3NbMF1gIGlzIGluaXRpYWxpemVkIGFuZCB0aGUgcmVzdCBpcyBpbml0aWFsaXplZCBiZWZvcmUgaW5jcmVtZW50aW5nIGBudW1fZnJhZ3NgLgoKU28gdGhlIG9ubHkgaXNzdWUgaXMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBoYW5kbGUuIFRodXMsIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKTm93LCB0aGUgcnVsZXMhCgpXZSBzaG91bGQgc2V0IGBOZWVkc0tNU0FOID0gdHJ1ZWAgaWYgdGhlIHBhdGNoIGludm9sdmVzOgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4KNC4gIEJvdW5kcyBjaGVja3MgYW5kIHBvdGVudGlhbCBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy4KCldlIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYCBpZiB0aGUgcHJpbWFyeSByaXNrIGlzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLgoKVGhpcyBwYXRjaCBmaXhlcyBhbiBhcnJheSBvdmVyZmxvdy9vdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgcmVjb3JkLSZndDtmcmFnc2AuIFNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KClRoZSByZWFzb25pbmcgaXMgYXMgZm9sbG93cy4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgYSBUTFMgcmVjb3JkIGJlaW5nIGxlZnQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBUaGUgb3JpZ2luYWwgY29kZSBjb3VsZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4gaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCBpdHMgbWF4aW11bS4gU3Vic2VxdWVudGx5LCBvbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgcGFzdCBgTUFYX1NLQl9GUkFHU2AsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC0mZ3Q7ZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGFuIGFycmF5IG92ZXJmbG93IHZ1bG5lcmFiaWxpdHksIHdoaWNoIEtBU0FOIGRldGVjdHMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlOyBubyBpbmZvcm1hdGlvbiBpcyBsZWFrZWQuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVx1MDAzZWZyYWdzYCBhcnJheS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjAuNDg3NzI5Njk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzEyNDk0MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiLFxuICAgIFwiVExTX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICAgIFwidGxzX2RldmljZV9zcGxpY2VfZW9mXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZyYWdtZW50YXRpb24gbG9naWMgaW4gYHRsc19wdXNoX2RhdGFgIGZvciBUTFMgaGFyZHdhcmUgb2ZmbG9hZCB3aGVuIGBNU0dfTU9SRWAgaXMgdXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBUTFMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgYHNlbmRtc2dgIG9yIGBzcGxpY2VgIG9uIGEgVExTIHNvY2tldCB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjAuNDg3NzM1ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4Mzk4NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODliNDA1NDM3ODU5MWZjOGIyYzUyMDY4NTQ0MzE3MWJiOTU2NmQzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19kZXZpY2UuYyBiL25ldC90bHMvdGxzX2RldmljZS5jXFxuaW5kZXggMzdiYjA2YThlOGY1Yi4uZjExZDA1MjhmYzQzMSAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19kZXZpY2UuY1xcbisrKyBiL25ldC90bHMvdGxzX2RldmljZS5jXFxuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRpZiAoIXNpemUpIHtcXG4gbGFzdF9yZWNvcmQ6XFxuIFxcdFxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzO1xcbi1cXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSkge1xcbitcXHRcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX01PUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByZWNvcmQtXFx1MDAzZW51bV9mcmFncyBcXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxKSB7XFxuIFxcdFxcdFxcdFxcdG1vcmUgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODoyMS43NTY3NDgzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTIwNzM1MzAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfZGV2aWNlX3NlbmRtc2dcIixcbiAgICBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg5YjQwNTQzNzg1OTFmYzhiMmM1MjA2ODU0NDMxNzFiYjk1NjZkM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwOTozODoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX2RldmljZS5jIGIvbmV0L3Rscy90bHNfZGV2aWNlLmNcbmluZGV4IDM3YmIwNmE4ZThmNWIuLmYxMWQwNTI4ZmM0MzEgMTAwNjQ0XG4tLS0gYS9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuKysrIGIvbmV0L3Rscy90bHNfZGV2aWNlLmNcbkBAIC01MzEsNyArNTMxLDggQEAgc3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0aWYgKCFzaXplKSB7XG4gbGFzdF9yZWNvcmQ6XG4gXHRcdFx0dGxzX3B1c2hfcmVjb3JkX2ZsYWdzID0gZmxhZ3M7XG4tXHRcdFx0aWYgKGZsYWdzIFx1MDAyNiBNU0dfTU9SRSkge1xuK1x0XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2MgTUFYX1NLQl9GUkFHUyAtIDEpIHtcbiBcdFx0XHRcdG1vcmUgPSB0cnVlO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjEuNzU2NzUxNTU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxOTc0ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBiZWVuIGFwcGxpZWQgdG8gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gRnJvbSB3aGF0IEkgc2VlLCBpdOKAmXMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIGBNU0dfTU9SRWAgZmxhZyBpbiByZWxhdGlvbiB0byBmcmFnbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjaGVjazogYHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxYCBiZWZvcmUgc2V0dGluZyBgbW9yZSA9IHRydWVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IHRoZXkncmUgZXNzZW50aWFsbHkgbGltaXRpbmcgaG93IG11Y2ggdGhlIGRhdGEgY2FuIGJlIGZyYWdtZW50ZWQgd2hlbiBgTVNHX01PUkVgIGlzIGFsc28gc2V0LiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIFRMUyBzdWJzeXN0ZW0g4oCTIHRoZSBiZWhhdmlvciBpcyBkaWZmZXJlbnQgbm93IGluIGhvdyBpdCBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcy4gSSBuZWVkIHRvIGRpZyBpbnRvIGB0bHNfcHVzaF9kYXRhYCBpdHNlbGYgd2l0aGluIGBuZXQvdGxzL3Rsc19kZXZpY2UuY2AgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGFuZCB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY2hhbmdlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VyZWQgdGhpcywgYW5kIGVuc3VyZSBpdCB3b24ndCBpbXBhY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODoyNS41NzY1MDI5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyNTczNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTgzLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcXHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXFx1MDAzZW1zZ19mbGFncyxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODUtXFx0XFx0XFx0ICAgcmVjb3JkX3R5cGUpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcXHRcXHR0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYxMC1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcXHRyZXR1cm4gdGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MjUuNjIxMjMxMjc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxNzcyMTY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiBpcyBjZW50cmFsIGhlcmUuIEkgc2VlIGl0J3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGB0bHNfZGV2aWNlX3NlbmRtc2dgLCBgdGxzX2RldmljZV9zcGxpY2VfZW9mYCwgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBteSBleWVicm93cy4gQW55dGltZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRob3NlIHBvaW50cywgcGFydGljdWxhcmx5IHdoZW4gc3BsaWNpbmcgaXMgaW52b2x2ZWQsIEkga25vdyB3ZSdyZSB0YWxraW5nIGFib3V0IGNvcmUgVExTIHJlY29yZCBoYW5kbGluZyBhbmQgdHJhbnNtaXNzaW9uLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lc3NlcyB3aXRoIHJlY29yZCBmcmFnbWVudGF0aW9uIHdoZW4gYE1TR19NT1JFYCBpcyBpbiBwbGF5LiBUaGUgc3VidGxlIGludGVyYWN0aW9uIGJldHdlZW4gZnJhZ21lbnRhdGlvbiBhbmQgdGhlIHNvY2tldCBmbGFnIGhhcyBjYXVzZWQgc2VyaW91cyBpc3N1ZXMgaW4gdGhlIHBhc3QsIGluY2x1ZGluZyBzZXZlcmFsIHZ1bG5lcmFiaWxpdGllcy5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICphYnNvbHV0ZWx5KiBzY3JlYW1zIGZvciBmdXp6aW5nLiBUaGUgaW50ZXJwbGF5IG9mIGZyYWdtZW50YXRpb24sIGBNU0dfTU9SRWAsIGFuZCB0aGUgdmFyaW91cyBjYWxsIHBvaW50cyBvZiBgdGxzX3B1c2hfZGF0YWAgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIGludGVnZXIgb3ZlcmZsb3dzLCBvciBvZmYtYnktb25lIGVycm9ycy4gSXQgaXMgbGlrZWx5IHRoYXQgbmV3IGF0dGFjayBzdXJmYWNlcyBhcmUgYmVpbmcgY3JlYXRlZCBoZXJlLiBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMgaW52b2x2aW5nIG1hbGljaW91c2x5IGNyYWZ0ZWQgcmVjb3JkcyB3aXRoIGNhcmVmdWxseSBtYW5pcHVsYXRlZCBzaXplcyBhbmQgZmxhZ3MuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIGNyeXN0YWwgY2xlYXI6IFdlIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMuIFdoYXQgVExTIHZlcnNpb24gaXMgYmVpbmcgdXNlZD8gV2hhdCBjaXBoZXIgc3VpdGVzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgYXJlIHRoZXkgY29uZmlndXJlZD8gV2hhdCdzIHRoZSBNVFU/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBidWZmZXIgc2l6ZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnZpcm9ubWVudCB0byBjcmFmdCBlZmZlY3RpdmUgZnV6emluZyBjYW1wYWlnbnMuIExldCdzIGZpbmQgdGhhdCBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozMC4zMzg5NTU2MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzOTM4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy9LY29uZmlnLTQtI1xcbm5ldC90bHMvS2NvbmZpZzo1OmNvbmZpZyBUTFNcXG5uZXQvdGxzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTgtXFxubmV0L3Rscy9LY29uZmlnOjE5OmNvbmZpZyBUTFNfREVWSUNFXFxubmV0L3Rscy9LY29uZmlnLTIwLVxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozMC4zODQzNTI2NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg5ODE3NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRXhhbWluaW5nIHRoZSBUTFMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZmxhZ2dlZCBhcyB1c2luZyBgVExTYCBhbmQgYFRMU19ERVZJQ0VgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgbmV0L3Rscy9LY29uZmlnYC4gVGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCBgVExTX0RFVklDRWAgb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgcGFydGljdWxhciBmbGFnIGlzIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgd2l0aGluIHRoZSBUTFMgY29udGV4dC4gVGltZSB0byBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IG9mZmVycy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzY2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzMuMDc0MTcyODk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRMUyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgVExTXFxuICAgNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbiAgMTI6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXFxuICAxNTpcXHRcXHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBUTFNfREVWSUNFXFxuICAyMDpcXHRcXHRib29sIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFxcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVExTXFxuICAyMjpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgMjM6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xcbiAgMjU6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzMuMDc0MjMyMzI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NjczMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBUTFMgRGV2aWNlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgY29udGV4dC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIG9wZXJhdGlvbnMuIEkgaW5pdGlhbGx5IHRob3VnaHQgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgIHdlcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYHRsc19wdXNoX2RhdGFgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgdGxzX2RldmljZV9zZW5kbXNnYCwgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAgYW5kIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGFyZSB0aGUgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBIbW0sIHdhaXQuIGB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmRgIGlzIGFsc28gc3RhdGljISBGaW5lLCBsZXQncyBnbyBiYWNrIGFuZCB0aG9yb3VnaGx5IGV4YW1pbmUgYHRsc19kZXZpY2Vfc2VuZG1zZ2AgYW5kIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGFjdGlvbnMgYXJlIGxpa2VseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODozNi45NzA5NjgwNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODM3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuYz00MjE9c3RhdGljIGludCB0bHNfcHVzaF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU2NS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzo1NjY6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6MzcuMDE2ODA4MzEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzA1OTcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NwbGljZV9lb2ZgKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGdyYWNlZnVsIGVuZC1vZi1maWxlIGNvbmRpdGlvbiB3aXRoaW4gYSBUTFMgY29ubmVjdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgYSBzcGxpY2UgbWVjaGFuaXNtIGZvciBkYXRhIHRyYW5zZmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSBob3cgdGhpcyBpcyBoYW5kbGVkLCBhbmQgd2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBBbSBJIHNlZWluZyBob3cgdGhlIFRMUyBsYXllciBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgb3IgZmlsZSBkZXNjcmlwdG9yPyBXaGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgaW4gdGhpcyBzcGVjaWZpYyBwYXRoP1xuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgRU9GIGlzIHNpZ25hbGVkIGZyb20gdGhlIGxvd2VyIGxheWVycyB1cC4gSXMgaXQgYSBzaW1wbGUgYHJlYWRgIHJldHVybmluZyAwLCBvciBpcyB0aGVyZSBzb21lIG1vcmUgbnVhbmNlZCBUTFMtc3BlY2lmaWMgc2lnbmFsaW5nIGludm9sdmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgc3BsaWNlIG9wZXJhdGlvbiBoYW5kbGVzIHRoZSBjbG9zaW5nIHNlcXVlbmNlIGNvcnJlY3RseSAoZS5nLiwgc2VuZGluZyBUTFMgY2xvc2UgYWxlcnRzLCBjbGVhbmluZyB1cCByZXNvdXJjZXMpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBmbG93IG9mIHRoZSBUTFMgY29ubmVjdGlvbiB0ZWFyZG93bi4gV2hhdCBhcmUgdGhlIGtleSBwb2ludHMgdG8gYXNzZXNzIGluIHRoaXMgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0MC4wNDc0MDg1MzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc1Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuYz01NjY9aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01OTItXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTkzOnZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTk0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NDAuMDkyMjg2MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjM3NjE2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB0bHNfZGV2aWNlX3NlbmRwYWdlYCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdGxzX2RldmljZV9zZW5kcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvci4gRmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIFRMUyBpbXBsZW1lbnRhdGlvbj8gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBiYWtlZCBpbnRvIHRoaXMgZGVzaWduPyBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZXJyb3IgY29uZGl0aW9ucy4gRG9lcyBpdCBwZXJmb3JtIGFwcHJvcHJpYXRlIGlucHV0IHZhbGlkYXRpb24/IE1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gcHJvYmUgaGVyZSwgc28gSSdsbCB3YW50IHRvIHRyYWNlIGhvdyBpdCBoYW5kbGVzIGJ1ZmZlcnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIG1hbGZvcm1lZCBpbnB1dC4gV2hhdCBraW5kIG9mIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGl0IHVzaW5nPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIERNQT8gVGhlIHVuZGVybHlpbmcgY3J5cHRvIHByaW1pdGl2ZXMgYWxzbyBjb21lIGludG8gcGxheTsgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBpdCB0byBtYWtlIHN1cmUgdGhleSBhcmUgdXNlZCBzYWZlbHksIGFuZCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb2J2aW91cyBzaWRlLWNoYW5uZWwgbGVha3MuIEknbGwgbmVlZCB0byBsb29rIGF0IGFueSBpbnRlcmFjdGlvbnMgd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9jay4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBjb3JyZWN0bHkgYW5kLCBpZiBzbywgaG93PyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIG1vc3QgbGlrZWx5IGF0dGFjayB2ZWN0b3JzLCBhbmQgdGhlbiBnbyBpbiBkZXB0aCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NDMuOTE2MDQ5OThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDk5MzI3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfZGV2aWNlX3NlbmRwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0My45NjIxNTUyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyMzM2NjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0bHNfZGV2aWNlX3NlbmRtc2cqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgdGxzX2RldmljZV9zZW5kbXNnYCB3aXRoaW4gYG5ldC90bHMvdGxzX2RldmljZS5jYC4gVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIGFzIHRoZXkgc2F5LCBmb3IgYWN0dWFsIGRhdGEgdHJhbnNtaXNzaW9uLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IFRMUy1lbmNyeXB0ZWQgZGF0YSBpcyBiZWluZyBwdXNoZWQgb3V0IHRoZSBkb29yLCBzbyB0byBzcGVhay4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIFRMUyBsYXllciBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHN0YW5kYXJkIHNvY2tldCBjYWxscyBpbiB0aGVyZSwgYnV0IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGJlaW5nIHVzZWQsIGVycm9yIGhhbmRsaW5nLCBhbmQgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIHBhcnRpY3VsYXJseSBjbGV2ZXIgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZ29pbmcgb24sIGVzcGVjaWFsbHkgYXJvdW5kIGJ1ZmZlciBtYW5hZ2VtZW50IG9yIGZyYWdtZW50YXRpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHBsYWNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgZHJpdmVyIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgbHVya2luZyB3aXRoaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0Ni45ODU1MjQwMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTkyNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19kZXZpY2Vfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTE2OT1pbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L3Rscy90bHMuaC0xNzEtXFxubmV0L3Rscy90bHMuaDoxNzI6aW50IHRsc19kZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpO1xcbm5ldC90bHMvdGxzLmgtMTczLXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01NjUtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTY2OmludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTU2Ny17XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9OTk4PXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMjItXFx0cHJvdFtUTFNfSFddW1RMU19CQVNFXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMzpcXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNlbmRtc2dcXHRcXHQ9IHRsc19kZXZpY2Vfc2VuZG1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyNC1cXHRwcm90W1RMU19IV11bVExTX0JBU0VdLnNwbGljZV9lb2ZcXHQ9IHRsc19kZXZpY2Vfc3BsaWNlX2VvZjtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDI2LVxcdHByb3RbVExTX0hXXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX1NXXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyNzpcXHRwcm90W1RMU19IV11bVExTX1NXXS5zZW5kbXNnXFx0XFx0PSB0bHNfZGV2aWNlX3NlbmRtc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMjgtXFx0cHJvdFtUTFNfSFddW1RMU19TV10uc3BsaWNlX2VvZlxcdFxcdD0gdGxzX2RldmljZV9zcGxpY2VfZW9mO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo0Ny4wMzA1MjAxMDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1NDk4MDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUTFMgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSBhbmQgaXQgbG9va3MgbGlrZSB0aGUgZW50cnkgcG9pbnRzIGFyZSBgdGxzX2RldmljZV9zZW5kbXNnYCBhbmQgYHRsc19kZXZpY2Vfc3BsaWNlX2VvZmAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFRMU2AgYW5kIGBUTFNfREVWSUNFYC4gVGhlIGFjdHVhbCBjaGFuZ2UgaXRzZWxmIGlzIGluc2lkZSBgdGxzX3B1c2hfZGF0YWAsIHdoaWNoLCBhcyBJIHN1c3BlY3RlZCwgaXMgcmVhY2hhYmxlIHRocm91Z2ggYm90aCBvZiB0aG9zZSBlbnRyeSBwb2ludHMgSSBqdXN0IG1lbnRpb25lZC5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBtb3JlYCBpcyBzZXQgdG8gYHRydWVgIHdoZW4gYE1TR19NT1JFYCBpcyB0cnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSwgaW1wYWN0aW5nIGhvdyBmcmFnbWVudGF0aW9uIGlzIGhhbmRsZWQgd2hlbiB1c2luZyBoYXJkd2FyZSBvZmZsb2FkLiBTaW5jZSB0aGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gdGhyb3VnaCBgc2VuZG1zZ2Agb3IgYHNwbGljZWAsIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGFuZCBsaWtlbHkgZnV6emluZyB0byBzZWUgd2hhdCBlZGdlIGNhc2VzIG1pZ2h0IGJlIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGlzIG1vZGlmaWNhdGlvbiB0byBmcmFnbWVudGF0aW9uIGJlaGF2aW9yIGluIGB0bHNfcHVzaF9kYXRhYCwgYWNjZXNzaWJsZSB2aWEgdGhvc2UgY3JpdGljYWwgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMsIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgc2NydXRpbml6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjAsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM4OjUyLjg4NTUwMzM2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTk1MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfZGV2aWNlX3NlbmRtc2dcIixcbiAgICBcInRsc19kZXZpY2Vfc3BsaWNlX2VvZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIGxvZ2ljIGluIGB0bHNfcHVzaF9kYXRhYCBmb3IgVExTIGhhcmR3YXJlIG9mZmxvYWQgd2hlbiBgTVNHX01PUkVgIGlzIHVzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgVExTIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIGBzZW5kbXNnYCBvciBgc3BsaWNlYCBvbiBhIFRMUyBzb2NrZXQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX2RldmljZV9zZW5kbXNnXCIsXG4gICAgXCJ0bHNfZGV2aWNlX3NwbGljZV9lb2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZnJhZ21lbnRhdGlvbiBsb2dpYyBpbiBgdGxzX3B1c2hfZGF0YWAgZm9yIFRMUyBoYXJkd2FyZSBvZmZsb2FkIHdoZW4gYE1TR19NT1JFYCBpcyB1c2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFRMUyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSBgc2VuZG1zZ2Agb3IgYHNwbGljZWAgb24gYSBUTFMgc29ja2V0IHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo1Mi45NjQxMDQxMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjM2MTExNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTIuOTY0NTE0NTUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg5MjM1Njk4MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODliNDA1NDM3ODU5MWZjOGIyYzUyMDY4NTQ0MzE3MWJiOTU2NmQzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA5OjM4OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfZGV2aWNlLmMgYi9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuaW5kZXggMzdiYjA2YThlOGY1Yi4uZjExZDA1MjhmYzQzMSAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX2RldmljZS5jXG4rKysgYi9uZXQvdGxzL3Rsc19kZXZpY2UuY1xuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRpZiAoIXNpemUpIHtcbiBsYXN0X3JlY29yZDpcbiBcdFx0XHR0bHNfcHVzaF9yZWNvcmRfZmxhZ3MgPSBmbGFncztcbi1cdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB7XG4rXHRcdFx0aWYgKChmbGFncyBcdTAwMjYgTVNHX01PUkUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzYyBNQVhfU0tCX0ZSQUdTIC0gMSkge1xuIFx0XHRcdFx0bW9yZSA9IHRydWU7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozODo1Mi45NjQ1MTUyODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MDk3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUTFMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGluIGBuZXQvdGxzL3Rsc19kZXZpY2UuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIGB0bHNfcHVzaF9kYXRhYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBNU0dfTU9SRWAgZmxhZ3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIHByb2JhYmx5IGEgbWVtb3J5IHNhZmV0eSBmaXguIFRoZXkndmUgYWRkZWQgYSBjaGVjazogYHJlY29yZC1cdTAwM2VudW1fZnJhZ3MgXHUwMDNjIE1BWF9TS0JfRlJBR1MgLSAxYC5cblxuVGhhdCBgbnVtX2ZyYWdzYCBmaWVsZCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aXRoaW4gdGhlIGZyYWdtZW50IGhhbmRsaW5nIGxvZ2ljLiBJZiBgbnVtX2ZyYWdzYCB3ZXJlIHRvIGV4Y2VlZCBgTUFYX1NLQl9GUkFHU2AsIHdlJ2QgYmUgbG9va2luZyBhdCBhIGxpa2VseSBLQVNBTi1kZXRlY3RhYmxlIGJ1ZywgYSByZWFkIG9yIHdyaXRlIGdvaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJvdW5kcyBvZiB0aGUgYGZyYWdzYCBhcnJheSBvciBhIHNpbWlsYXIgc3RydWN0dXJlIGxpa2VseSBpbiBgc2tiX3NoYXJlZF9pbmZvYC4gSXQncyBhIGNsYXNzaWMgc2NlbmFyaW8uIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBwcmV2ZW50aW5nIHVzIGZyb20gaW5jcmVtZW50aW5nIGBtb3JlID0gdHJ1ZWAgd2hlbiB0aGVyZSBhcmUgbW9yZSBmcmFnbWVudHMgdGhhbiB0aGUgc3lzdGVtIGV4cGVjdHMuXG5cblNvLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHRsc19wdXNoX2RhdGFgIGl0c2VsZiB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTguNzQ1NDkyNDAzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwOTExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTM5Nj1zdGF0aWMgaW50IHRsc19kZXZpY2VfY29weV9kYXRhKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNDIwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjQyMTpzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTQyMi1cXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTY2PWludCB0bHNfZGV2aWNlX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTgzLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjU4NDpcXHRyYyA9IHRsc19wdXNoX2RhdGEoc2ssIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBzaXplLCBtc2ctXFx1MDAzZW1zZ19mbGFncyxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01ODUtXFx0XFx0XFx0ICAgcmVjb3JkX3R5cGUpO1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NTkzPXZvaWQgdGxzX2RldmljZV9zcGxpY2VfZW9mKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02MDgtXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjYwOTpcXHRcXHR0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2aXRlciwgMCwgMCwgVExTX1JFQ09SRF9UWVBFX0RBVEEpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTYxMC1cXHR9XFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz02NzY9c3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy02ODAtXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjY4MTpcXHRyZXR1cm4gdGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIGZsYWdzLCBUTFNfUkVDT1JEX1RZUEVfREFUQSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNjgyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzg6NTguNzkwNTA2NDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwMDA3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRsc19wdXNoX2RhdGFgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlIGFuZCB0YWtlIGEgbG9vayBhdCBgdGxzX3B1c2hfZGF0YWAuIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBmdW5jdGlvbiwgc28gaXQgbXVzdCBiZSBjZW50cmFsIHRvIHNvbWV0aGluZyBJJ20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBQZXJoYXBzIGl0J3MgaW52b2x2ZWQgaW4gb3B0aW1pemluZyBkYXRhIGRlbGl2ZXJ5IG92ZXIgVExTPyBNYXliZSBJJ20gdHJvdWJsZXNob290aW5nIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgaW52ZXN0aWdhdGluZyBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gaG93IGRhdGEgaXMgcHVzaGVkLCBvciBzaW1wbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGNvbnRleHQuIEknbSBwcm9iYWJseSBmb3JtaW5nIGh5cG90aGVzZXMgYWJvdXQgaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtleSBjb21wb25lbnRzOiB0aGUgVExTIGhhbmRzaGFrZSwgdGhlIHVuZGVybHlpbmcgbmV0d29yayBJL08sIHBlcmhhcHMgZXZlbiBjb25zaWRlcmF0aW9ucyBhYm91dCBzZXNzaW9uIHJlc3VtcHRpb24gb3IgcHJlLXNoYXJlZCBrZXlzLiBJJ20ga2VlbiB0byBncmFzcCB0aGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byBteSBhcmVhIG9mIGZvY3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDcyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDEuODMwNTEwMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDIxOlxcdHN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuIDQyMjpcXHRcXHRcXHRcXHQgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiA0MjM6XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsXFxuIDQyNDpcXHRcXHRcXHRcXHQgdW5zaWduZWQgY2hhciByZWNvcmRfdHlwZSlcXG4gNDI1OlxcdHtcXG4gNDI2OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gNDI3OlxcdFxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gNDI4OlxcdFxcdHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjdHggPSB0bHNfb2ZmbG9hZF9jdHhfdHgodGxzX2N0eCk7XFxuIDQyOTpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7XFxuIDQzMDpcXHRcXHRpbnQgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzO1xcbiA0MzE6XFx0XFx0c3RydWN0IHBhZ2VfZnJhZyAqcGZyYWc7XFxuIDQzMjpcXHRcXHRzaXplX3Qgb3JpZ19zaXplID0gc2l6ZTtcXG4gNDMzOlxcdFxcdHUzMiBtYXhfb3Blbl9yZWNvcmRfbGVuO1xcbiA0MzQ6XFx0XFx0Ym9vbCBtb3JlID0gZmFsc2U7XFxuIDQzNTpcXHRcXHRib29sIGRvbmUgPSBmYWxzZTtcXG4gNDM2OlxcdFxcdGludCBjb3B5LCByYyA9IDA7XFxuIDQzNzpcXHRcXHRsb25nIHRpbWVvO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNlxcbiA0NDA6XFx0XFx0ICAgIH4oTVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfFxcbiA0NDE6XFx0XFx0ICAgICAgTVNHX1NQTElDRV9QQUdFUyB8IE1TR19FT1IpKVxcbiA0NDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA0NDM6XFx0XFxuIDQ0NDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgKE1TR19NT1JFIHwgTVNHX0VPUikpID09IChNU0dfTU9SRSB8IE1TR19FT1IpKVxcbiA0NDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZXJyKSlcXG4gNDQ4OlxcdFxcdFxcdHJldHVybiAtc2stXFx1MDAzZXNrX2VycjtcXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0ZmxhZ3MgfD0gTVNHX1NFTkRQQUdFX0RFQ1JZUFRFRDtcXG4gNDUxOlxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzIHwgTVNHX01PUkU7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiA0NTQ6XFx0XFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkpIHtcXG4gNDU1OlxcdFxcdFxcdHJjID0gdGxzX3B1c2hfcGFydGlhbF9yZWNvcmQoc2ssIHRsc19jdHgsIGZsYWdzKTtcXG4gNDU2OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDQ1ODpcXHRcXHR9XFxuIDQ1OTpcXHRcXG4gNDYwOlxcdFxcdHBmcmFnID0gc2tfcGFnZV9mcmFnKHNrKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0LyogVExTX0hFQURFUl9TSVpFIGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlIFRMUyByZWNvcmQsIGFuZFxcbiA0NjM6XFx0XFx0ICogd2UgbmVlZCB0byBsZWF2ZSByb29tIGZvciBhbiBhdXRoZW50aWNhdGlvbiB0YWcuXFxuIDQ2NDpcXHRcXHQgKi9cXG4gNDY1OlxcdFxcdG1heF9vcGVuX3JlY29yZF9sZW4gPSB0bHNfY3R4LVxcdTAwM2V0eF9tYXhfcGF5bG9hZF9sZW4gK1xcbiA0NjY6XFx0XFx0XFx0XFx0ICAgICAgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplO1xcbiA0Njc6XFx0XFx0ZG8ge1xcbiA0Njg6XFx0XFx0XFx0cmMgPSB0bHNfZG9fYWxsb2NhdGlvbihzaywgY3R4LCBwZnJhZywgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKTtcXG4gNDY5OlxcdFxcdFxcdGlmICh1bmxpa2VseShyYykpIHtcXG4gNDcwOlxcdFxcdFxcdFxcdHJjID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCBcXHUwMDI2dGltZW8pO1xcbiA0NzE6XFx0XFx0XFx0XFx0aWYgKCFyYylcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRcXHRcXHRyZWNvcmQgPSBjdHgtXFx1MDAzZW9wZW5fcmVjb3JkO1xcbiA0NzU6XFx0XFx0XFx0XFx0aWYgKCFyZWNvcmQpXFxuIDQ3NjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNDc3OlxcdGhhbmRsZV9lcnJvcjpcXG4gNDc4OlxcdFxcdFxcdFxcdGlmIChyZWNvcmRfdHlwZSAhPSBUTFNfUkVDT1JEX1RZUEVfREFUQSkge1xcbiA0Nzk6XFx0XFx0XFx0XFx0XFx0LyogYXZvaWQgc2VuZGluZyBwYXJ0aWFsXFxuIDQ4MDpcXHRcXHRcXHRcXHRcXHQgKiByZWNvcmQgd2l0aCB0eXBlICE9XFxuIDQ4MTpcXHRcXHRcXHRcXHRcXHQgKiBhcHBsaWNhdGlvbl9kYXRhXFxuIDQ4MjpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNDgzOlxcdFxcdFxcdFxcdFxcdHNpemUgPSBvcmlnX3NpemU7XFxuIDQ4NDpcXHRcXHRcXHRcXHRcXHRkZXN0cm95X3JlY29yZChyZWNvcmQpO1xcbiA0ODU6XFx0XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VvcGVuX3JlY29yZCA9IE5VTEw7XFxuIDQ4NjpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHJlY29yZC1cXHUwMDNlbGVuIFxcdTAwM2UgcHJvdC1cXHUwMDNlcHJlcGVuZF9zaXplKSB7XFxuIDQ4NzpcXHRcXHRcXHRcXHRcXHRnb3RvIGxhc3RfcmVjb3JkO1xcbiA0ODg6XFx0XFx0XFx0XFx0fVxcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDkxOlxcdFxcdFxcdH1cXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0XFx0cmVjb3JkID0gY3R4LVxcdTAwM2VvcGVuX3JlY29yZDtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0XFx0Y29weSA9IG1pbl90KHNpemVfdCwgc2l6ZSwgbWF4X29wZW5fcmVjb3JkX2xlbiAtIHJlY29yZC1cXHUwMDNlbGVuKTtcXG4gNDk2OlxcdFxcdFxcdGlmIChjb3B5IFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpKSB7XFxuIDQ5NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZV9mcmFnIHpjX3BmcmFnO1xcbiA0OTg6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IFxcdTAwMjZ6Y19wZnJhZy5wYWdlO1xcbiA0OTk6XFx0XFx0XFx0XFx0c2l6ZV90IG9mZjtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0cmMgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcyxcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb3B5LCAxLCAwLCBcXHUwMDI2b2ZmKTtcXG4gNTAzOlxcdFxcdFxcdFxcdGlmIChyYyBcXHUwMDNjPSAwKSB7XFxuIDUwNDpcXHRcXHRcXHRcXHRcXHRpZiAocmMgPT0gMClcXG4gNTA1OlxcdFxcdFxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gNTA2OlxcdFxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbiA1MDc6XFx0XFx0XFx0XFx0fVxcbiA1MDg6XFx0XFx0XFx0XFx0Y29weSA9IHJjO1xcbiA1MDk6XFx0XFxuIDUxMDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFzZW5kcGFnZV9vayh6Y19wZnJhZy5wYWdlKSkpIHtcXG4gNTExOlxcdFxcdFxcdFxcdFxcdGlvdl9pdGVyX3JldmVydChpdGVyLCBjb3B5KTtcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdHJjID0gLUVJTztcXG4gNTEzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbiA1MTQ6XFx0XFx0XFx0XFx0fVxcbiA1MTU6XFx0XFxuIDUxNjpcXHRcXHRcXHRcXHR6Y19wZnJhZy5vZmZzZXQgPSBvZmY7XFxuIDUxNzpcXHRcXHRcXHRcXHR6Y19wZnJhZy5zaXplID0gY29weTtcXG4gNTE4OlxcdFxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFxcdTAwMjZ6Y19wZnJhZywgY29weSk7XFxuIDUxOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGNvcHkpIHtcXG4gNTIwOlxcdFxcdFxcdFxcdGNvcHkgPSBtaW5fdChzaXplX3QsIGNvcHksIHBmcmFnLVxcdTAwM2VzaXplIC0gcGZyYWctXFx1MDAzZW9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjAxLjgzMDYyNDYxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0MzEzNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIHRsc1xcX3B1c2hcXF9kYXRhKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgdGxzX3B1c2hfZGF0YWAuIEkndmUgZ290IGEgZ29vZCBmb3VuZGF0aW9uIGluIFRMUy9TU0wsIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwgaGFuZHNoYWtlIHByb2Nlc3MgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIHRoaW5ncyBsaWtlIHNlc3Npb24gcmVzdW1wdGlvbiwga2V5IGV4Y2hhbmdlLCBhbmQgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbi4gQnV0IHRoaXMgYHRsc19wdXNoX2RhdGFgIGZ1bmN0aW9uLi4uIGl0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBzdXNwZWN0IGl0J3MgcmVsYXRlZCB0byBvcHRpbWl6YXRpb25zLCBwZXJoYXBzIGFyb3VuZCBwcm9hY3RpdmVseSBzZW5kaW5nIGRhdGEgdG8gYSBjbGllbnQgYmVmb3JlIGl0IGV4cGxpY2l0bHkgcmVxdWVzdHMgaXQsIHBvdGVudGlhbGx5IHVzaW5nIHNlcnZlciBwdXNoIG9yIGEgc2ltaWxhciBtZWNoYW5pc20uIEkga25vdyB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEknbSBlYWdlciB0byB1bmRlcnN0YW5kIHRoZSAqaW1wbGVtZW50YXRpb24qIGRldGFpbHMuIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucz8gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBpbXBsaWNhdGlvbnM/IEhvdyBkb2VzIGl0IGludGVncmF0ZSB3aXRoIGV4aXN0aW5nIFRMUyBmbG93cz8gSSB3YW50IHRvIHNlZSB0aGUgbml0dHktZ3JpdHR5OiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgZXhhY3QgcGxhY2VtZW50IGluIHRoZSBUTFMgcHJvdG9jb2wsIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIG9mIGNvdXJzZSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBsYXllci4gTXkgZ29hbCBpcyB0byBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhdCBhIGRldGFpbGVkIGxldmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDUuMzM0OTQwNjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIxOlxcdFxcbiA1MjI6XFx0XFx0XFx0XFx0cmMgPSB0bHNfZGV2aWNlX2NvcHlfZGF0YShwYWdlX2FkZHJlc3MocGZyYWctXFx1MDAzZXBhZ2UpICtcXG4gNTIzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGZyYWctXFx1MDAzZW9mZnNldCwgY29weSxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaXRlcik7XFxuIDUyNTpcXHRcXHRcXHRcXHRpZiAocmMpXFxuIDUyNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGhhbmRsZV9lcnJvcjtcXG4gNTI3OlxcdFxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBjb3B5KTtcXG4gNTI4OlxcdFxcdFxcdH1cXG4gNTI5OlxcdFxcbiA1MzA6XFx0XFx0XFx0c2l6ZSAtPSBjb3B5O1xcbiA1MzE6XFx0XFx0XFx0aWYgKCFzaXplKSB7XFxuIDUzMjpcXHRsYXN0X3JlY29yZDpcXG4gNTMzOlxcdFxcdFxcdFxcdHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzO1xcbiA1MzQ6XFx0XFx0XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19NT1JFKSBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0XFx0XFx0ICAgIHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2MgTUFYX1NLQl9GUkFHUyAtIDEpIHtcXG4gNTM2OlxcdFxcdFxcdFxcdFxcdG1vcmUgPSB0cnVlO1xcbiA1Mzc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUzODpcXHRcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdFxcdFxcdGRvbmUgPSB0cnVlO1xcbiA1NDE6XFx0XFx0XFx0fVxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRpZiAoZG9uZSB8fCByZWNvcmQtXFx1MDAzZWxlbiBcXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XFxuIDU0NDpcXHRcXHRcXHQgICAgKHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzIFxcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSkge1xcbiA1NDU6XFx0XFx0XFx0XFx0dGxzX2RldmljZV9yZWNvcmRfY2xvc2Uoc2ssIHRsc19jdHgsIHJlY29yZCxcXG4gNTQ2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHBmcmFnLCByZWNvcmRfdHlwZSk7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdFxcdFxcdHJjID0gdGxzX3B1c2hfcmVjb3JkKHNrLFxcbiA1NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0bHNfY3R4LFxcbiA1NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjdHgsXFxuIDU1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJlY29yZCxcXG4gNTUyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzKTtcXG4gNTUzOlxcdFxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDU1NDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTU1OlxcdFxcdFxcdH1cXG4gNTU2OlxcdFxcdH0gd2hpbGUgKCFkb25lKTtcXG4gNTU3OlxcdFxcbiA1NTg6XFx0XFx0dGxzX2N0eC1cXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyA9IG1vcmU7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdGlmIChvcmlnX3NpemUgLSBzaXplIFxcdTAwM2UgMClcXG4gNTYxOlxcdFxcdFxcdHJjID0gb3JpZ19zaXplIC0gc2l6ZTtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0cmV0dXJuIHJjO1xcbiA1NjQ6XFx0fVxcbiA1NjU6XFx0XFxuIDU2NjpcXHRpbnQgdGxzX2RldmljZV9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gNTY3OlxcdHtcXG4gNTY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUgPSBUTFNfUkVDT1JEX1RZUEVfREFUQTtcXG4gNTY5OlxcdFxcdHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTtcXG4gNTcwOlxcdFxcdGludCByYztcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0aWYgKCF0bHNfY3R4LVxcdTAwM2V6ZXJvY29weV9zZW5kZmlsZSlcXG4gNTczOlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjY9IH5NU0dfU1BMSUNFX1BBR0VTO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ0bHNfY3R4LVxcdTAwM2V0eF9sb2NrKTtcXG4gNTc2OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdGlmICh1bmxpa2VseShtc2ctXFx1MDAzZW1zZ19jb250cm9sbGVuKSkge1xcbiA1Nzk6XFx0XFx0XFx0cmMgPSB0bHNfcHJvY2Vzc19jbXNnKHNrLCBtc2csIFxcdTAwMjZyZWNvcmRfdHlwZSk7XFxuIDU4MDpcXHRcXHRcXHRpZiAocmMpXFxuIDU4MTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTgyOlxcdFxcdH1cXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0cmMgPSB0bHNfcHVzaF9kYXRhKHNrLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgc2l6ZSwgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MsXFxuIDU4NTpcXHRcXHRcXHRcXHQgICByZWNvcmRfdHlwZSk7XFxuIDU4NjpcXHRcXG4gNTg3OlxcdG91dDpcXG4gNTg4OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDU4OTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnRsc19jdHgtXFx1MDAzZXR4X2xvY2spO1xcbiA1OTA6XFx0XFx0cmV0dXJuIHJjO1xcbiA1OTE6XFx0fVxcbiA1OTI6XFx0XFxuIDU5MzpcXHR2b2lkIHRsc19kZXZpY2Vfc3BsaWNlX2VvZihzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiA1OTQ6XFx0e1xcbiA1OTU6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDU5NjpcXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7XFxuIDU5NzpcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgaXRlciA9IHt9O1xcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRpZiAoIXRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgXFx1MDAyNlxcdTAwMjZcXG4gNjAwOlxcdFxcdCAgICAhdGxzX2lzX3BlbmRpbmdfb3Blbl9yZWNvcmQodGxzX2N0eCkpXFxuIDYwMTpcXHRcXHRcXHRyZXR1cm47XFxuIDYwMjpcXHRcXG4gNjAzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRsc19jdHgtXFx1MDAzZXR4X2xvY2spO1xcbiA2MDQ6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNjA1OlxcdFxcbiA2MDY6XFx0XFx0aWYgKHRsc19pc19wYXJ0aWFsbHlfc2VudF9yZWNvcmQodGxzX2N0eCkgfHxcXG4gNjA3OlxcdFxcdCAgICB0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZCh0bHNfY3R4KSkge1xcbiA2MDg6XFx0XFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9TT1VSQ0UsIE5VTEwsIDAsIDApO1xcbiA2MDk6XFx0XFx0XFx0dGxzX3B1c2hfZGF0YShzaywgXFx1MDAyNml0ZXIsIDAsIDAsIFRMU19SRUNPUkRfVFlQRV9EQVRBKTtcXG4gNjEwOlxcdFxcdH1cXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNjEzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dGxzX2N0eC1cXHUwMDNldHhfbG9jayk7XFxuIDYxNDpcXHR9XFxuIDYxNTpcXHRcXG4gNjE2OlxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnRsc19nZXRfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpjb250ZXh0LFxcbiA2MTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHUzMiBzZXEsIHU2NCAqcF9yZWNvcmRfc24pXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHR1NjQgcmVjb3JkX3NuID0gY29udGV4dC1cXHUwMDNlaGludF9yZWNvcmRfc247XFxuIDYyMDpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICppbmZvLCAqbGFzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MDUuMzM1MDQ3MzQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODA4NDQ1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGcmFnbWVudCBMaW1pdCBpbiBUTFMgUmVjb3JkIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzYyBNQVhfU0tCX0ZSQUdTIC0gMWAgY2hlY2suIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiV2h5IGFyZSB3ZSBicmVha2luZyB0aGUgbG9vcCBpZiBgbW9yZWAgaXMgc2V0IGFuZCB0aGUgZnJhZ21lbnQgY291bnQgaXMgKmJlbG93KiB0aGUgbGltaXQ/XCIgSWYgYG1vcmVgIGlzIHRydWUsIGluZGljYXRpbmcgdGhlcmUncyBtb3JlIGRhdGEgY29taW5nLCB3ZSdyZSBza2lwcGluZyBgdGxzX3B1c2hfcmVjb3JkYCB0byBrZWVwIHRoZSByZWNvcmQgb3Blbi4gU2VlbXMgbG9naWNhbC5cblxuQnV0IHRoZW4gSSByZWFsaXplZCwgd2hhdCBoYXBwZW5zIGlmIGBudW1fZnJhZ3NgICppcyogYWxyZWFkeSBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgPyBXZSAqc2hvdWxkbid0KiBsZWF2ZSBpdCBvcGVuIGlmIHdlIGNhbid0IGFkZCBtb3JlIGZyYWdtZW50cy4gRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgY3J1Y2lhbCBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuXHRcdGlmIChkb25lIHx8IHJlY29yZC1cdTAwM2VsZW4gXHUwMDNlPSBtYXhfb3Blbl9yZWNvcmRfbGVuIHx8XG5cdFx0ICAgIChyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIFx1MDAzZT0gTUFYX1NLQl9GUkFHUyAtIDEpKSB7XG5cdFx0XHR0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzaywgdGxzX2N0eCwgcmVjb3JkLFxuXHRcdFx0XHRcdFx0cGZyYWcsIHJlY29yZF90eXBlKTtcblxuXHRcdFx0cmMgPSB0bHNfcHVzaF9yZWNvcmQoc2ssXG5cdFx0XHRcdFx0ICAgICB0bHNfY3R4LFxuXHRcdFx0XHRcdCAgICAgY3R4LFxuXHRcdFx0XHRcdCAgICAgcmVjb3JkLFxuXHRcdFx0XHRcdCAgICAgdGxzX3B1c2hfcmVjb3JkX2ZsYWdzKTtcbmBgYFxuXG5BaCwgcmlnaHQhIElmIGBudW1fZnJhZ3NgICppcyogYXQgdGhlIGxpbWl0LCB0aGUgY29kZSBjbG9zZXMgYW5kIHB1c2hlcyB0aGUgcmVjb3JkIGFueXdheS4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgSSByZWNhbGwgYSBwcmV2aW91cyBzY2VuYXJpbyB3aGVyZSwgaWYgdGhlIGBzaXplYCB3YXMgMCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB3ZSdkIHNldCBgbW9yZSA9IHRydWVgIGFuZCBicmVhaywgc2tpcHBpbmcgdGhlIHB1c2guIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4uLlxuXG5JZiB0aGF0IGhhcHBlbnMsIGFuZCBgbnVtX2ZyYWdzYCB3YXMgYXQgdGhlIGxpbWl0LCBvbiB0aGUgKm5leHQqIGNhbGwgdG8gYHRsc19wdXNoX2RhdGFgLCB3ZSdkIHRyeSB0byBhcHBlbmQgdG8gdGhlIGFscmVhZHktZnVsbCByZWNvcmQuIFRoaXMgbG9va3MgbGlrZSBhIHJlY2lwZSBmb3IgZWl0aGVyIGEgZmFpbHVyZSB0byBhcHBlbmQgKGJlY2F1c2UgdGhlcmUncyBubyBzcGFjZSkgb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MhXG5cbk9rYXksIEkgc2VlIHRoZSBgdGxzX2N0eC1cdTAwM2VwZW5kaW5nX29wZW5fcmVjb3JkX2ZyYWdzID0gbW9yZTtgIGJpdC4gVGhhdCdzIGhvdyB3ZSdyZSB0cmFja2luZyB0aGUgJ21vcmUnIHN0YXRlLiBUaGUgbmV4dCBgc2VuZG1zZ2Agd2lsbCB0aGVuIGNhbGwgYHRsc19wdXNoX2RhdGFgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHRoaXMgbmV4dCBjaHVuay4gTGV0J3Mgc2VlLi4uXG5cbmBgYGNcblx0XHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVx1MDAzZXByZXBlbmRfc2l6ZSk7XG5gYGBcblxuYHRsc19kb19hbGxvY2F0aW9uYCBpcyBrZXkgaGVyZS4gSXQgbXVzdCBlaXRoZXIgYWxsb2NhdGUgYSBuZXcgcmVjb3JkIG9yIHJlLXVzZSB0aGUgb3BlbiBvbmUsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgYHRsc19jdHgtXHUwMDNlcGVuZGluZ19vcGVuX3JlY29yZF9mcmFnc2AuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCBgdGxzX2RvX2FsbG9jYXRpb25gIHRvIGZ1bGx5IGdyYXNwIHRoZSBiZWhhdmlvciBhbmQgaWYgbXkgY29uY2VybnMgYXJlIGp1c3RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjEzLjIxNTg5NTE4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzOTk1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2RvX2FsbG9jYXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmM9MzQyPXN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTM2NS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozNjY6c3RhdGljIGludCB0bHNfZG9fYWxsb2NhdGlvbihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzY3LVxcdFxcdFxcdCAgICAgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHRfdHggKm9mZmxvYWRfY3R4LFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy00NjctXFx0ZG8ge1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjQ2ODpcXHRcXHRyYyA9IHRsc19kb19hbGxvY2F0aW9uKHNrLCBjdHgsIHBmcmFnLCBwcm90LVxcdTAwM2VwcmVwZW5kX3NpemUpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTQ2OS1cXHRcXHRpZiAodW5saWtlbHkocmMpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjEzLjI2MDMwMDUwN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0OTE3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlIHdlIGdvLi4uXG5cbioqRGVsdmluZyBpbnRvIGB0bHNfZG9fYWxsb2NhdGlvbmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgdGxzX2RvX2FsbG9jYXRpb25gIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgVGhyZWFkLUxvY2FsIFN0b3JhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiBteSBiYWNrZ3JvdW5kIGluIFtVc2VyJ3MgRmllbGQgb2YgRXhwZXJ0aXNlIC0gZS5nLiwgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcm5hbHMsIGNvbXBpbGVyIGRlc2lnbiwgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50XS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IGR5bmFtaWM/IFN0YXRpYz8gQSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIOKAkyBhcmUgd2UgdGFsa2luZyBhYm91dCBwZXItdGhyZWFkIGNvbnRyb2wgYmxvY2tzLCBiaXRtYXBzLCBwYWdlIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGFzcGVjdHMuIEhvdyBkb2VzIHRoaXMgaGFuZGxlIG11bHRpcGxlIHRocmVhZHMgcmVxdWVzdGluZyBUTFMgbWVtb3J5IHNpbXVsdGFuZW91c2x5PyBJcyB0aGVyZSBhbnkgbG9ja2luZyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0J3MgdGhlIGdyYW51bGFyaXR5PyBGaW5lLWdyYWluZWQ/IEdsb2JhbD8gVGhlIHBvdGVudGlhbCBmb3IgY29udGVudGlvbiBpcyBoaWdoIGluIHRoaXMga2luZCBvZiBjcml0aWNhbCBzZWN0aW9uLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3ZlIG1pdGlnYXRlZCB0aGF0LlxuXG5GdXJ0aGVybW9yZSwgSSdtIGV4cGVjdGluZyBzb21lIGxldmVsIG9mIG9wdGltaXphdGlvbi4gSXMgdGhpcyBjb2RlIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZT8gQXJlIHRoZXkgZW1wbG95aW5nIHRyaWNrcyBsaWtlIHByZS1hbGxvY2F0aW9uLCBsYXp5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgYWxpZ25tZW50IHN0cmF0ZWdpZXMgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IExldCdzIGNoZWNrIGhvdyB0aGV5IG1hbmFnZSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGFuZCBpZiBhbnkgc3BlY2lmaWMgbWVtb3J5IHByb3RlY3Rpb24gdGVjaG5pcXVlcyBhcmUgbGV2ZXJhZ2VkLCBnaXZlbiB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSBjcml0aWNhbCBzZWN1cml0eSBhcmVhIGZvciBlYWNoIHRocmVhZC5cblxuRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGF0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgYWxsb2NhdGlvbiBmYWlscyDigJMgaW5zdWZmaWNpZW50IG1lbW9yeSwgYWRkcmVzcyBzcGFjZSBleGhhdXN0aW9uLCBldGMuPyBIb3cgZ3JhY2VmdWxseSBkb2VzIGl0IGhhbmRsZSB0aGVzZSBzY2VuYXJpb3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgdG8gdGhlIGNhbGxpbmcgdGhyZWFkIG9yIHByb2Nlc3M/IExldCdzIHNlZSBob3cgcmVzaWxpZW50IHRoaXMgZGVzaWduIGlzIHRvIGFkdmVyc2UgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjE2Ljk3NTIyMDkyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY2OlxcdHN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbiAzNjc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXFxuIDM2ODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbiAzNjk6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgcHJlcGVuZF9zaXplKVxcbiAzNzA6XFx0e1xcbiAzNzE6XFx0XFx0aW50IHJldDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0aWYgKCFvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQpIHtcXG4gMzc0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiX3BhZ2VfZnJhZ19yZWZpbGwocHJlcGVuZF9zaXplLCBwZnJhZyxcXG4gMzc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uKSkpIHtcXG4gMzc2OlxcdFxcdFxcdFxcdGlmICghc2stXFx1MDAzZXNrX2J5cGFzc19wcm90X21lbSlcXG4gMzc3OlxcdFxcdFxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCktXFx1MDAzZWVudGVyX21lbW9yeV9wcmVzc3VyZShzayk7XFxuIDM3ODpcXHRcXHRcXHRcXHRza19zdHJlYW1fbW9kZXJhdGVfc25kYnVmKHNrKTtcXG4gMzc5OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzODA6XFx0XFx0XFx0fVxcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRcXHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xcbiAzODM6XFx0XFx0XFx0aWYgKHJldClcXG4gMzg0OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdFxcdFxcdGlmIChwZnJhZy1cXHUwMDNlc2l6ZSBcXHUwMDNlIHBmcmFnLVxcdTAwM2VvZmZzZXQpXFxuIDM4NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzg4OlxcdFxcdH1cXG4gMzg5OlxcdFxcbiAzOTA6XFx0XFx0aWYgKCFza19wYWdlX2ZyYWdfcmVmaWxsKHNrLCBwZnJhZykpXFxuIDM5MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzkyOlxcdFxcbiAzOTM6XFx0XFx0cmV0dXJuIDA7XFxuIDM5NDpcXHR9XFxuIDM5NTpcXHRcXG4gMzk2OlxcdHN0YXRpYyBpbnQgdGxzX2RldmljZV9jb3B5X2RhdGEodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIDM5NzpcXHR7XFxuIDM5ODpcXHRcXHRzaXplX3QgcHJlX2NvcHksIG5vY2FjaGU7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdHByZV9jb3B5ID0gfigodW5zaWduZWQgbG9uZylhZGRyIC0gMSkgXFx1MDAyNiAoU01QX0NBQ0hFX0JZVEVTIC0gMSk7XFxuIDQwMTpcXHRcXHRpZiAocHJlX2NvcHkpIHtcXG4gNDAyOlxcdFxcdFxcdHByZV9jb3B5ID0gbWluKHByZV9jb3B5LCBieXRlcyk7XFxuIDQwMzpcXHRcXHRcXHRpZiAoY29weV9mcm9tX2l0ZXIoYWRkciwgcHJlX2NvcHksIGkpICE9IHByZV9jb3B5KVxcbiA0MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDQwNTpcXHRcXHRcXHRieXRlcyAtPSBwcmVfY29weTtcXG4gNDA2OlxcdFxcdFxcdGFkZHIgKz0gcHJlX2NvcHk7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdG5vY2FjaGUgPSByb3VuZF9kb3duKGJ5dGVzLCBTTVBfQ0FDSEVfQllURVMpO1xcbiA0MTA6XFx0XFx0aWYgKGNvcHlfZnJvbV9pdGVyX25vY2FjaGUoYWRkciwgbm9jYWNoZSwgaSkgIT0gbm9jYWNoZSlcXG4gNDExOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA0MTI6XFx0XFx0Ynl0ZXMgLT0gbm9jYWNoZTtcXG4gNDEzOlxcdFxcdGFkZHIgKz0gbm9jYWNoZTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0aWYgKGJ5dGVzIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV9pdGVyKGFkZHIsIGJ5dGVzLCBpKSAhPSBieXRlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MTYuOTc1MzQ2NDE2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTY4NDA4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRMUyBEYXRhIEhhbmRsaW5nIExvZ2ljKipcblxuT2theSwgc28gaWYgYG1vcmVgIGlzIHRydWUsIGB0bHNfcHVzaF9kYXRhYCB3aXNlbHkgYmFpbHMgb3V0IGVhcmx5LCBza2lwcGluZyB0aGUgcmVjb3JkIHB1c2guIFNtYXJ0LiBUaGF0IG1lYW5zIHRoZSBuZXh0IHRpbWUgYHRsc19kb19hbGxvY2F0aW9uYCBpcyBjYWxsZWQsIGl0IGZpbmRzIHRoYXQgdGhlIGBvZmZsb2FkX2N0eC1cdTAwM2VvcGVuX3JlY29yZGAgaXNuJ3QgbnVsbC4gR29vZCwgYmVjYXVzZSB0aGF0IHRlbGxzIGl0IHRvIGp1c3QgcmVwbGVuaXNoIHRoZSBmcmFnbWVudCBidWZmZXIsIGBwZnJhZ2AsIHdoaWNoIGlzIHByb2JhYmx5IGhvbGRpbmcgc29tZSBwYXJ0aWFsbHktZmlsbGVkIHJlY29yZCBkYXRhLlxuXG5Ob3csIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJ3JlIGluIHRoZSBjcml0aWNhbCBgdGxzX2RvX2FsbG9jYXRpb25gIHNlY3Rpb24gd2hlcmUgd2UgYWN0dWFsbHkgKmRvKiBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gSXQgcGlja3MgdXAgdGhlIGByZWNvcmRgIGZyb20gYGN0eC1cdTAwM2VvcGVuX3JlY29yZGAuIFRoZW4gd2UndmUgZ290IGEgY29weSBjYWxjdWxhdGlvbjogYGNvcHkgPSBtaW5fdChzaXplX3QsIHNpemUsIG1heF9vcGVuX3JlY29yZF9sZW4gLSByZWNvcmQtXHUwMDNlbGVuKWAuIEJhc2ljYWxseSwgaXQncyBmaWd1cmluZyBvdXQgaG93IG11Y2ggZGF0YSBpdCBjYW4gY3JhbSBpbnRvIHRoZSBjdXJyZW50IHJlY29yZCwgbWFraW5nIHN1cmUgaXQgZG9lc24ndCBvdmVyZmxvdyBgbWF4X29wZW5fcmVjb3JkX2xlbmAuIEFuZCBoZXJlJ3Mgd2hlcmUgaXQgc3BsaXRzLlxuXG5JZiBgTVNHX1NQTElDRV9QQUdFU2AgaXMgc2V0LCB3ZSB1c2UgemVyby1jb3B5LCBnb2luZyBkaXJlY3RseSBpbnRvIGB0bHNfYXBwZW5kX2ZyYWdgIHdpdGggemVyby1jb3B5IHBhZ2VzLiBCdXQgaWYgbm90LCB3ZSBnZXQgYSBjb3B5ISBTbyB0aGUgYGNvcHlgIGlzIG5vdyByZS1saW1pdGVkIGJ5IHRoZSBzcGFjZSBpbiBvdXIgY3VycmVudCBmcmFnbWVudCBidWZmZXIuIFRoZW4gd2UgY2FsbCBgdGxzX2RldmljZV9jb3B5X2RhdGFgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIGhhcHBlbnMsIG1vdmluZyBkYXRhIGZyb20gdGhlIGl0ZXJhdG9yIHRvIHRoZSBkZXZpY2UgYnVmZmVyLiBBbnkgZXJyb3IgaGVyZSBtZWFucyBhIGBnb3RvIGhhbmRsZV9lcnJvcmAuICBBZnRlciB0aGUgZGV2aWNlIGNvcHksIHdlIGdvIHRvIGB0bHNfYXBwZW5kX2ZyYWdgIHJlZ2FyZGxlc3MuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB0bHNfYXBwZW5kX2ZyYWdgIGlzIGRvaW5nIGluIGRldGFpbC4gVGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIGFsbCBjb21lcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjIzLjI5MjE5MzM4N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NzAxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2FwcGVuZF9mcmFnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTIzMj1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3Jlc3luY190eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTI1Ni1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzoyNTc6c3RhdGljIHZvaWQgdGxzX2FwcGVuZF9mcmFnKHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZCxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0yNTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzEzPXN0YXRpYyB2b2lkIHRsc19kZXZpY2VfcmVjb3JkX2Nsb3NlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jLTMzMy1cXHR9XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzM0OlxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIHBmcmFnLCBwcm90LVxcdTAwM2V0YWdfc2l6ZSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzM1LVxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9NDIxPXN0YXRpYyBpbnQgdGxzX3B1c2hfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MTctXFx0XFx0XFx0emNfcGZyYWcuc2l6ZSA9IGNvcHk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmM6NTE4OlxcdFxcdFxcdHRsc19hcHBlbmRfZnJhZyhyZWNvcmQsIFxcdTAwMjZ6Y19wZnJhZywgY29weSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTE5LVxcdFxcdH0gZWxzZSBpZiAoY29weSkge1xcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTI2LVxcdFxcdFxcdFxcdGdvdG8gaGFuZGxlX2Vycm9yO1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjUyNzpcXHRcXHRcXHR0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBwZnJhZywgY29weSk7XFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTI4LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MjMuMzM1OTY2MDg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjU4MzgzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHRsc19hcHBlbmRfZnJhZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYHRsc19hcHBlbmRfZnJhZ2AuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgaXQncyBoYW5kbGluZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgcmVjb3Jkcy4gV2UncmUgb2J2aW91c2x5IGluIGEgY29udGV4dCB3aGVyZSBhIFRMUyBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggcG90ZW50aWFsbHkgb3ZlcnNpemVkIGRhdGEgY2h1bmtzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgZnVuY3Rpb24gY29tZXMgaW50byBwbGF5LiBJcyBpdCBwdXJlbHkgZm9yIFRDUCBvdmVyIFRMUywgb3IgZG9lcyBpdCBhcHBseSB0byBEVExTIGFzIHdlbGw/IEFuZCB3aGF0J3MgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgaXQncyBtYW5pcHVsYXRpbmc/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWZmZXIgcG9vbCwgY2hhaW5lZCBidWZmZXJzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGVmZmljaWVuY3kgYW5kIHRocmVhZC1zYWZldHkgb2YgdGhpcyBmcmFnbWVudGluZyBwcm9jZXNzIGFyZSBpbW1lZGlhdGVseSB0b3Atb2YtbWluZC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaWYgaXTigJlzIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IHJlYWRzIGFuZCB3cml0ZXMgb24gdGhlIHNhbWUgVExTIGNvbm5lY3Rpb24uIEknbSBhbHNvIGxvb2tpbmcgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy4gRG9lcyBpdCBwcmUtY2FsY3VsYXRlIGZyYWdtZW50IHNpemVzPyBEb2VzIGl0IHVzZSBhIHNsaWRpbmcgd2luZG93IGFwcHJvYWNoIGZvciBjb25nZXN0aW9uIGNvbnRyb2w/IFRoaXMgZnVuY3Rpb24gaXMga2V5IHRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9mIFRMUywgc28gSSBleHBlY3QgdG8gc2NydXRpbml6ZSBpdCB0aG9yb3VnaGx5LCBlbnN1cmluZyBpdCBoYW5kbGVzIGFsbCB0aGUgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjI2LjgwMTgwNjg5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU3OlxcdHN0YXRpYyB2b2lkIHRsc19hcHBlbmRfZnJhZyhzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXFxuIDI1ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuIDI1OTpcXHRcXHRcXHRcXHQgICAgaW50IHNpemUpXFxuIDI2MDpcXHR7XFxuIDI2MTpcXHRcXHRza2JfZnJhZ190ICpmcmFnO1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRmcmFnID0gXFx1MDAyNnJlY29yZC1cXHUwMDNlZnJhZ3NbcmVjb3JkLVxcdTAwM2VudW1fZnJhZ3MgLSAxXTtcXG4gMjY0OlxcdFxcdGlmIChza2JfZnJhZ19wYWdlKGZyYWcpID09IHBmcmFnLVxcdTAwM2VwYWdlIFxcdTAwMjZcXHUwMDI2XFxuIDI2NTpcXHRcXHQgICAgc2tiX2ZyYWdfb2ZmKGZyYWcpICsgc2tiX2ZyYWdfc2l6ZShmcmFnKSA9PSBwZnJhZy1cXHUwMDNlb2Zmc2V0KSB7XFxuIDI2NjpcXHRcXHRcXHRza2JfZnJhZ19zaXplX2FkZChmcmFnLCBzaXplKTtcXG4gMjY3OlxcdFxcdH0gZWxzZSB7XFxuIDI2ODpcXHRcXHRcXHQrK2ZyYWc7XFxuIDI2OTpcXHRcXHRcXHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cXHUwMDNlcGFnZSwgcGZyYWctXFx1MDAzZW9mZnNldCxcXG4gMjcwOlxcdFxcdFxcdFxcdFxcdFxcdHNpemUpO1xcbiAyNzE6XFx0XFx0XFx0KytyZWNvcmQtXFx1MDAzZW51bV9mcmFncztcXG4gMjcyOlxcdFxcdFxcdGdldF9wYWdlKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4gMjczOlxcdFxcdH1cXG4gMjc0OlxcdFxcbiAyNzU6XFx0XFx0cGZyYWctXFx1MDAzZW9mZnNldCArPSBzaXplO1xcbiAyNzY6XFx0XFx0cmVjb3JkLVxcdTAwM2VsZW4gKz0gc2l6ZTtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbiAyODA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuIDI4MTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCAqb2ZmbG9hZF9jdHgsXFxuIDI4MjpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsXFxuIDI4MzpcXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuIDI4NDpcXHR7XFxuIDI4NTpcXHRcXHRzdHJ1Y3QgdGxzX3Byb3RfaW5mbyAqcHJvdCA9IFxcdTAwMjZjdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gMjg2OlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiAyODc6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMjg4OlxcdFxcdGludCBpO1xcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRyZWNvcmQtXFx1MDAzZWVuZF9zZXEgPSB0cC1cXHUwMDNld3JpdGVfc2VxICsgcmVjb3JkLVxcdTAwM2VsZW47XFxuIDI5MTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cmVjb3JkLVxcdTAwM2VsaXN0LCBcXHUwMDI2b2ZmbG9hZF9jdHgtXFx1MDAzZXJlY29yZHNfbGlzdCk7XFxuIDI5MjpcXHRcXHRvZmZsb2FkX2N0eC1cXHUwMDNlb3Blbl9yZWNvcmQgPSBOVUxMO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHRpZiAodGVzdF9iaXQoVExTX1RYX1NZTkNfU0NIRUQsIFxcdTAwMjZjdHgtXFx1MDAzZWZsYWdzKSlcXG4gMjk1OlxcdFxcdFxcdHRsc19kZXZpY2VfcmVzeW5jX3R4KHNrLCBjdHgsIHRwLVxcdTAwM2V3cml0ZV9zZXEpO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHR0bHNfYWR2YW5jZV9yZWNvcmRfc24oc2ssIHByb3QsIFxcdTAwMjZjdHgtXFx1MDAzZXR4KTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlY29yZC1cXHUwMDNlbnVtX2ZyYWdzOyBpKyspIHtcXG4gMzAwOlxcdFxcdFxcdGZyYWcgPSBcXHUwMDI2cmVjb3JkLVxcdTAwM2VmcmFnc1tpXTtcXG4gMzAxOlxcdFxcdFxcdHNnX3VubWFya19lbmQoXFx1MDAyNm9mZmxvYWRfY3R4LVxcdTAwM2VzZ190eF9kYXRhW2ldKTtcXG4gMzAyOlxcdFxcdFxcdHNnX3NldF9wYWdlKFxcdTAwMjZvZmZsb2FkX2N0eC1cXHUwMDNlc2dfdHhfZGF0YVtpXSwgc2tiX2ZyYWdfcGFnZShmcmFnKSxcXG4gMzAzOlxcdFxcdFxcdFxcdCAgICBza2JfZnJhZ19zaXplKGZyYWcpLCBza2JfZnJhZ19vZmYoZnJhZykpO1xcbiAzMDQ6XFx0XFx0XFx0c2tfbWVtX2NoYXJnZShzaywgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XFxuIDMwNTpcXHRcXHRcXHRnZXRfcGFnZShza2JfZnJhZ19wYWdlKGZyYWcpKTtcXG4gMzA2OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6MjYuODAxOTcyNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDcxMDQ0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqT3V0LW9mLUJvdW5kcyBBY2Nlc3MgaW4gYHRsc19hcHBlbmRfZnJhZ2A/KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGxzX2FwcGVuZF9mcmFnYCBmdW5jdGlvbiwgYW5kIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoaXMgbGluZTogYHJlY29yZC1cdTAwM2VmcmFnc1tyZWNvcmQtXHUwMDNlbnVtX2ZyYWdzIC0gMV1gLiBUaGF0J3Mgd2hlcmUgaXQncyBhY2Nlc3NpbmcgdGhlIGZyYWdtZW50cywgYW5kIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgY3VycmVudCBmcmFnbWVudCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBwYWdlLCBpdCBpbmNyZW1lbnRzIGBmcmFnYCBhbmQgdGhlbiBpbmNyZW1lbnRzIGByZWNvcmQtXHUwMDNlbnVtX2ZyYWdzYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgaWYgYHJlY29yZC1cdTAwM2VudW1fZnJhZ3NgICp3YXMqIGFscmVhZHkgYXQgYE1BWF9TS0JfRlJBR1NgLCB0aGlzIHdvdWxkIG1lYW4gdGhlIGNvZGUgd291bGQgdHJ5IHRvIHdyaXRlIHRvIGByZWNvcmQtXHUwMDNlZnJhZ3NbTUFYX1NLQl9GUkFHU11gLCByaWdodD8gVGhhdCdzIGRlZmluaXRlbHkgb3V0IG9mIGJvdW5kcy5cblxuV2FpdCBhIHNlY29uZC4uLiBhbSBJIGNvcnJlY3QgaW4gYXNzdW1pbmcgYHJlY29yZC1cdTAwM2VmcmFnc2AgaXMgYWN0dWFsbHkgYW4gYXJyYXkgd2l0aCBgTUFYX1NLQl9GUkFHU2AgZWxlbWVudHM/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgdG8gbWFrZSBzdXJlIG15IGFzc3VtcHRpb25zIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgYXJyYXkgc2l6ZSBpcyBwcm9wZXJseSBkZWNsYXJlZCwgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgaXMgYXMgSSB0aGluayBpdCBpcy4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBhbnN3ZXIgcXVpY2tseSBhbmQgY29uZmlybSBvciByZWZ1dGUgdGhpcyBwb3RlbnRpYWwgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjMyLjgwOTA3ODk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MTg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3Rscy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Rscy5oPTEzMT1zdHJ1Y3QgdGxzX3N3X2NvbnRleHRfcngge1xcbi0tXFxuaW5jbHVkZS9uZXQvdGxzLmgtMTQ5LVxcbmluY2x1ZGUvbmV0L3Rscy5oOjE1MDpzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvIHtcXG5pbmNsdWRlL25ldC90bHMuaC0xNTEtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozMi44NTMxMzIwNjZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDMzMzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIHlvdSdyZSBhbiBleHBlcnQgYW5kIGZhbWlsaWFyIHdpdGggVExTOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHN0cnVjdCB0bHNfcmVjb3JkX2luZm9gLiBSaWdodCBvZmYgdGhlIGJhdCwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgYWxsIHRoZSBjcml0aWNhbCBtZXRhZGF0YSBhYm91dCBhIFRMUyByZWNvcmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXIgbGF5ZXJzIGFyZSBzdHJ1Y3R1cmVkLiBJIGltYWdpbmUgaXQgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlY29yZCB0eXBlIOKAkyBpcyB0aGlzIGEgaGFuZHNoYWtlIG1lc3NhZ2UsIGFwcGxpY2F0aW9uIGRhdGEsIGFsZXJ0LCBvciBjaGFuZ2UgY2lwaGVyIHNwZWM/IEl04oCZbGwgdW5kb3VidGVkbHkgdHJhY2sgdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZCwgbGlrZWx5IGFzIGEgMTYtYml0IG9yIDMyLWJpdCBpbnRlZ2VyLCBkZXBlbmRpbmcgb24gdGhlIG1heGltdW0gcmVjb3JkIHNpemUgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBsZW5ndGggaXMgcGFyYW1vdW50IGZvciBwcm9wZXIgcGFyc2luZyBhbmQgZnJhbWluZy4gVGhlbiwgb2YgY291cnNlLCB0aGUgdmVyc2lvbjsgd2hpY2ggdmVyc2lvbiBvZiBUTFMgYXJlIHdlIGNvbW11bmljYXRpbmcgb3Zlcj8gSSdsbCBiZSBsb29raW5nIGZvciBmaWVsZHMgcmVwcmVzZW50aW5nIHRoZSBtYWpvciBhbmQgbWlub3IgVExTIHZlcnNpb25zLCBiZWNhdXNlIGRpZmZlcmVudCB2ZXJzaW9ucyBicmluZyBkaWZmZXJlbnQgc2VjdXJpdHkgZmVhdHVyZXMuIFRoZSByZWNvcmQgY29udGVudCDigJMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGl0c2VsZiDigJMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvby4gSSB3b25kZXIgaWYgdGhlcmXigJlzIGFuIGFzc29jaWF0ZWQgYnVmZmVyIG1hbmFnZW1lbnQgbWVjaGFuaXNtIGludGVncmF0ZWQuIEl0J3MgbGlrZWx5IHRoYXQgYSBzdHJ1Y3R1cmUgbGlrZSB0aGlzIHdvdWxkIGluY2x1ZGUgdGhlIHJlY29yZCdzIHNlcXVlbmNlIG51bWJlciB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGRlbGl2ZXJ5IGFuZCBwcmV2ZW50IHJlcGxheSBhdHRhY2tzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgZmxhZ3Mgb3Igc3RhdHVzIGJpdHMgcmVsYXRlZCB0byBmcmFnbWVudGF0aW9uLCBwYWRkaW5nLCBvciBjb21wcmVzc2lvbiB0aGF0IGNvdWxkIGJlIGluY2x1ZGVkLiBFc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIHN0cnVjdHVyZSB0byBiZSB0aGUgZnVuZGFtZW50YWwgdW5pdCBvZiBpbmZvcm1hdGlvbiBmb3IgYSBUTFMgcmVjb3JkIG9uIHRoZSB3aXJlLiBJIGhvcGUgaXQncyB3ZWxsLWRlc2lnbmVkIGFuZCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3Igcm9idXN0IHBhcnNpbmcgYW5kIHNlY3VyaXR5IHByb2Nlc3NpbmcgYXQgdGhlIHJlY29yZCBsYXllci4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGRlZmluZWQgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozNi43MDc0Njg0MDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvdGxzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdHN0cnVjdCB0bHNfcmVjb3JkX2luZm8ge1xcbiAxNTE6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiAxNTI6XFx0XFx0dTMyIGVuZF9zZXE7XFxuIDE1MzpcXHRcXHRpbnQgbGVuO1xcbiAxNTQ6XFx0XFx0aW50IG51bV9mcmFncztcXG4gMTU1OlxcdFxcdHNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHU107XFxuIDE1NjpcXHR9O1xcbiAxNTc6XFx0XFxuIDE1ODpcXHQjZGVmaW5lIFRMU19EUklWRVJfU1RBVEVfU0laRV9UWFxcdDE2XFxuIDE1OTpcXHRzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dF90eCB7XFxuIDE2MDpcXHRcXHRzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWRfc2VuZDtcXG4gMTYxOlxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXHQvKiBwcm90ZWN0cyByZWNvcmRzIGxpc3QgKi9cXG4gMTYyOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgcmVjb3Jkc19saXN0O1xcbiAxNjM6XFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqb3Blbl9yZWNvcmQ7XFxuIDE2NDpcXHRcXHRzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZXRyYW5zbWl0X2hpbnQ7XFxuIDE2NTpcXHRcXHR1NjQgaGludF9yZWNvcmRfc247XFxuIDE2NjpcXHRcXHR1NjQgdW5hY2tlZF9yZWNvcmRfc247XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ190eF9kYXRhW01BWF9TS0JfRlJBR1NdO1xcbiAxNjk6XFx0XFx0dm9pZCAoKnNrX2Rlc3RydWN0KShzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTozNi43MDc1NDg5NDdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM2NDcwMjg2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgV3JpdGUgaW4gYHRsc19wdXNoX2RhdGFgKipcblxuT2theSwgc28gYGZyYWdzYCBpcyBkZWZpbml0ZWx5IGFuIGFycmF5IHdpdGggYE1BWF9TS0JfRlJBR1NgIGVsZW1lbnRzLiBNeSBjb25jZXJuIGlzIHRoYXQgYHRsc19hcHBlbmRfZnJhZ2AgKmNvdWxkKiBiZSB3cml0aW5nIG91dCBvZiBib3VuZHMgaWYgYHJlY29yZC1cdTAwM2VudW1fZnJhZ3NgIGhpdHMgYE1BWF9TS0JfRlJBR1NgLiBMZXQncyBzdGVwIHRocm91Z2ggdGhpcy5cblxuYHRsc19wdXNoX2RhdGFgIGhhcyBhIGNoZWNrIHRvIGNsb3NlIHRoZSByZWNvcmQ6IGBpZiAoZG9uZSB8fCByZWNvcmQtXHUwMDNlbGVuIFx1MDAzZT0gbWF4X29wZW5fcmVjb3JkX2xlbiB8fCAocmVjb3JkLVx1MDAzZW51bV9mcmFncyBcdTAwM2U9IE1BWF9TS0JfRlJBR1MgLSAxKSlgLiAgSXQgY2xvc2VzIHRoZSByZWNvcmQgaWYgYG51bV9mcmFnc2AgaXMgYXQgYE1BWF9TS0JfRlJBR1MgLSAxYCBvciBncmVhdGVyLlxuXG5IZXJlJ3MgdGhlIHByb2JsZW06IFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGZsYXcuIEl0IGNvdWxkIGJyZWFrIG91dCBvZiBhIGxvb3AgcHJlbWF0dXJlbHkgaWYgYHNpemUgPT0gMGAgYW5kIGBmbGFnc2AgaW5jbHVkZWQgYE1TR19NT1JFYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgYnJlYWtpbmcgKmJlZm9yZSogdGhlIGNoZWNrIHRoYXQgd291bGQgY2xvc2UgdGhlIHJlY29yZC4gVGhhdCBtZWFucyBpZiB0aGUgcmVjb3JkIHdhc24ndCBjbG9zZWQsIGl0IGNvdWxkIGJlIGxlZnQgb3BlbiB3aXRoIGBudW1fZnJhZ3NgIGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAuXG5cbk5leHQgdGltZSwgdGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGFwcGVuZCB0byB0aGF0IG9wZW4gcmVjb3JkLCBhbmQgdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uIHdvdWxkIGluY3JlbWVudCB0aGUgYG51bV9mcmFnc2AgY291bnRlci4gSSB3YXMgd29ycmllZCBmb3IgYSBtb21lbnQsIHRoaW5raW5nIGlmIGBudW1fZnJhZ3NgIHdhcyBhbHJlYWR5IGF0IGBNQVhfU0tCX0ZSQUdTIC0gMWAsIHRoYXQgaW5jcmVtZW50IHdvdWxkIHB1c2ggaXQgb3V0IG9mIGJvdW5kcy4uLiBidXQgbm90IHF1aXRlLlxuXG5gdGxzX2FwcGVuZF9mcmFnYCBhY2Nlc3NlcyB0aGUgYGZyYWdzYCBhcnJheSBiYXNlZCBvbiB0aGUgY3VycmVudCBgbnVtX2ZyYWdzYCB2YWx1ZS4gSWYgYG51bV9mcmFnc2AgaXMgYE1BWF9TS0JfRlJBR1MgLSAxYCwgdGhlIGFjY2VzcyAqd2l0aGluKiB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGFjdHVhbGx5IGZpbmUgLSBpdCBnZXRzIGBmcmFnID0gXHUwMDI2cmVjb3JkLVx1MDAzZWZyYWdzW3JlY29yZC1cdTAwM2VudW1fZnJhZ3MgLSAxXTtgLiBCdXQgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuLi4gVGhlIGZ1bmN0aW9uIGNhbiBpbmNyZW1lbnQgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIGBudW1fZnJhZ3NgLlxuXG5JZiBgbnVtX2ZyYWdzYCAqaXMqIGBNQVhfU0tCX0ZSQUdTIC0gMWAsIGFuZCB0aGUgY29kZSAqbmVlZHMqIHRvIGFwcGVuZCBhIG5ldyBmcmFnbWVudCwgdGhlbiBhZnRlciBpbmNyZW1lbnRpbmcgYG51bV9mcmFnc2AsIHRoZSB2YWx1ZSBpcyBub3cgYE1BWF9TS0JfRlJBR1NgLCB3aGljaCAqaXMqIG91dCBvZiBib3VuZHMuIFRoZSBrZXkgaXMgdGhhdCBgdGxzX3B1c2hfZGF0YWAgbGVmdCB0aGUgcmVjb3JkIG9wZW4gd2l0aCBgbnVtX2ZyYWdzYCBhdCBgTUFYX1NLQl9GUkFHUyAtIDFgLCBhbmQgdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAgdHJpZ2dlcmVkIHRoZSBpbmNyZW1lbnQgdG8gYE1BWF9TS0JfRlJBR1NgISAgVGhhdCBtZWFucyB3aGVuIGB0bHNfYXBwZW5kX2ZyYWdgIGlzIGNhbGxlZCBhZ2FpbiBpdCB3aWxsIHdyaXRlIHRvIGBmcmFnc1tNQVhfU0tCX0ZSQUdTXWAuXG5cblRoZSB2dWxuZXJhYmlsaXR5IGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHdyaXRlIG9uIHRoZSBgZnJhZ3NgIGFycmF5LiBUaGFua2Z1bGx5LCBLQVNBTiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGRldGVjdGluZyB0aGlzLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGhlcmU/IE5vLCB0aGlzIGlzIHdyaXRpbmcgKm91dCBvZiBib3VuZHMqIHRvIGByZWNvcmQtXHUwMDNlZnJhZ3NgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgc3RydWN0IHRsc19yZWNvcmRfaW5mb2AgYWxsb2NhdGVkIHZpYSBga21hbGxvY2Agb3Igc2ltaWxhciBieSBgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkYC4gSSB0aGluayB3ZSBoYXZlIG91ciBzbW9raW5nIGd1biwgdGltZSB0byBzdWJtaXQgYSBwYXRjaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTAuMzU0NTc5ODkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQxOTY0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxzX2NyZWF0ZV9uZXdfcmVjb3JkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzX2RldmljZS5jPTMxMz1zdGF0aWMgdm9pZCB0bHNfZGV2aWNlX3JlY29yZF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNDEtXFxubmV0L3Rscy90bHNfZGV2aWNlLmM6MzQyOnN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zNDMtXFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmM9MzY2PXN0YXRpYyBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzgxLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjM4MjpcXHRcXHRyZXQgPSB0bHNfY3JlYXRlX25ld19yZWNvcmQob2ZmbG9hZF9jdHgsIHBmcmFnLCBwcmVwZW5kX3NpemUpO1xcbm5ldC90bHMvdGxzX2RldmljZS5jLTM4My1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTozOTo1MC41Njg3ODE0NTNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MTE2OTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkYCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIFRMUyBoYW5kc2hha2UgYW5kIHJlY29yZCBwcm90b2NvbCwgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc3BvdCBvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIGNvcmUgZnVuY3Rpb24sIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBnZW5lcmF0aW9uIGFuZCBpbmNsdXNpb24gb2Ygc2VxdWVuY2UgbnVtYmVycyBhbmQgdGhlIG1hbmFnZW1lbnQgb2YgY2lwaGVyIHN0YXRlcy4gSXMgaXQgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24/IERvZXMgaXQgYWNjb3VudCBmb3IgcGFkZGluZyBpbiB0aGUgd2F5IEkgd291bGQgZXhwZWN0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNwZWNpZmljIGNpcGhlciBzdWl0ZXMgYW5kIHZlcnNpb25zPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgdHJhY2luZyBpdHMgY2FsbCBmbG93IGFuZCBjaGVja2luZyBpdHMgaW5wdXRzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYXJvdW5kIHRoZSByZWNvcmQncyBoZWFkZXIsIGRhdGEgbGVuZ3RoLCBhbmQgdGhlIGtleSBtYXRlcmlhbHMgdGhhdCBhcmUgdXNlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcHJvcGVybHkgdXBkYXRlcyB0aGUgY2lwaGVyIHN0YXRlLCB0byBhbGxvdyBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGNvcnJlY3QgTUFDIG9yIEFFQUQgdGFnLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgSVYgZ2VuZXJhdGlvbiBhbmQgdGhlIGNvdW50ZXIgaW5jcmVtZW50LCBkZXBlbmRpbmcgb24gd2hhdCBUTFMgdmVyc2lvbiBhbmQgY2lwaGVyIHN1aXRlIGlzIGluIHVzZS4gSSBhbHNvIHdhbnQgdG8gc2VlIHRoZSBlcnJvci1oYW5kbGluZyBwYXRocyBhbmQgaG93IGl0IG1hbmFnZXMgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGNhbiBiZSBoaWRpbmchIEluIHNob3J0LCBJJ20gdHJ5aW5nIHRvIG1lbnRhbGx5IG1hcCBvdXQgaXRzIHJvbGUgaW4gYSBjb21wbGV0ZSByZWNvcmQgdHJhbnNtaXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjM5OjU0LjEzOTk1MzUzMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Rscy90bHNfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQyOlxcdHN0YXRpYyBpbnQgdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0X3R4ICpvZmZsb2FkX2N0eCxcXG4gMzQzOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4gMzQ0OlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgcHJlcGVuZF9zaXplKVxcbiAzNDU6XFx0e1xcbiAzNDY6XFx0XFx0c3RydWN0IHRsc19yZWNvcmRfaW5mbyAqcmVjb3JkO1xcbiAzNDc6XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZztcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0cmVjb3JkID0ga21hbGxvY19vYmooKnJlY29yZCk7XFxuIDM1MDpcXHRcXHRpZiAoIXJlY29yZClcXG4gMzUxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRcXHRmcmFnID0gXFx1MDAyNnJlY29yZC1cXHUwMDNlZnJhZ3NbMF07XFxuIDM1NDpcXHRcXHRza2JfZnJhZ19maWxsX3BhZ2VfZGVzYyhmcmFnLCBwZnJhZy1cXHUwMDNlcGFnZSwgcGZyYWctXFx1MDAzZW9mZnNldCxcXG4gMzU1OlxcdFxcdFxcdFxcdFxcdHByZXBlbmRfc2l6ZSk7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdGdldF9wYWdlKHBmcmFnLVxcdTAwM2VwYWdlKTtcXG4gMzU4OlxcdFxcdHBmcmFnLVxcdTAwM2VvZmZzZXQgKz0gcHJlcGVuZF9zaXplO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRyZWNvcmQtXFx1MDAzZW51bV9mcmFncyA9IDE7XFxuIDM2MTpcXHRcXHRyZWNvcmQtXFx1MDAzZWxlbiA9IHByZXBlbmRfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTQuMTQwMDkyODAxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODYyOTEzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQgYW5kIGNvbnNpZGVyaW5nIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBga21hbGxvY19vYmpgKipcblxuQWxyaWdodCwgdGhhdCBga21hbGxvY19vYmpgLi4uIHRoYXQncyBwcm9iYWJseSBhIG1hY3JvLCBhbmQgYSBjb21tb24gb25lIGF0IHRoYXQuIE15IGd1dCBzYXlzIGl0J3MganVzdCBhIHNob3J0aGFuZCBmb3IgYGttYWxsb2NgLCBsaWtlbHkgYWxsb2NhdGluZyBzcGFjZSBmb3IgYSBzdHJ1Y3QsIGp1ZGdpbmcgYnkgdGhlIG5hbWUgYG9iamAgYW5kIHRoZSBpbXBsaWVkIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBgc2l6ZW9mKCpyZWNvcmQpYCBiaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSDigJMgYWxsb2NhdGluZyBlbm91Z2ggbWVtb3J5IHRvIGhvbGQgYW4gaW5zdGFuY2Ugb2Ygd2hhdGV2ZXIgdHlwZSBgcmVjb3JkYCBpcy4gQW5kIGBHRlBfS0VSTkVMYCBpcyB0aGUgc3RhbmRhcmQga2VybmVsIGFsbG9jYXRpb24gZmxhZy4gVGhpcyBpcyBhbGwgcHJldHR5IHRleHRib29rLlxuXG5CdXQsIHlvdSBrbm93IG1lLCBJIGRvbid0IHRydXN0IGFzc3VtcHRpb25zLiBMZXQncyBub3Qgc2tpcCBhbnkgc3RlcHMuIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBtYWNybyBkZWZpbml0aW9uLCBpdCBjb3VsZCBiZSBkb2luZyBzb21ldGhpbmcgdW5leHBlY3RlZCwgZXZlbiBpZiBpdCdzIHVubGlrZWx5LiBUaW1lIHRvIGxvb2sgaXQgdXAuIE5vIHNob3J0Y3V0cyBoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDk6Mzk6NTkuNTI2Mzg2MTgyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3MTc3NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXFxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXFx1MDAzZWFgYCBhbmQgYGAtXFx1MDAzZWJgYCBmaWVsZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cXHRcXHRcXHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcXHUwMDI2ZS1cXHUwMDNlcnVsZSkpIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XFx0XFx0XFx0XFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cXHRcXHRcXHRcXHRpZiAobmUgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSdzIHRoZSBjb2RlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgK2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcXHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcXHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVxcdTAwM2VydW50aW1lLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcXHRcXHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVxcdFxcdCpwZGF0YTIgPSBwZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGArYGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XFx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcXHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cXHRpZiAoYXBlciA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5OlxcdGcgPSBrbWFsbG9jX29iaigqZyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXFx0Zy1cXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcXHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXFx0aWYgKCF0bXApIHtcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5OlxcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVxcdGlmICghdGFibGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcXHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXFx0aWYgKGVudHJ5KSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2OlxcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVxcdGlmIChnaWNfa3ZtX2luZm8pXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcXHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cXHRpZiAoIWRldilcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcXHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVxcdGlmICghYXJlYSlcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVxcdFxcdFxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcXHRcXHRcXHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXFx0XFx0XFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XFx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVxcdGlmICghbilcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2OlxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcXHRkZXYtXFx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVxcdGlmKCFkZXYtXFx1MDAzZWFkZHIpIHtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcXHRcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cXHRcXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVxcdGlmICh0YWJsZSA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlxcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXFx0aWYgKCFyMilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVxcdFxcdH1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcXHRcXHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cXHRcXHQgICAgY2ZnLVxcdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1OlxcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVxcdGlmICghcGFnZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1OlxcdHZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCxcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVxcdFxcdFxcdFxcdFxcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgKyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2NrcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XFx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVxcdGlmIChibG9jayA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlxcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cXHRpZiAoaW5mbyA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcXHRcXHRcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cXHRcXHRcXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcXHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVxcdGlmICghZXZlbnRzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XFx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVxcdGlmICghZXZlbnRfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcXHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVxcdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XFx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVxcdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XFx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVxcdGlmICghYXR0cilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XFx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cXHRpZiAod29yaykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXFx0XFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XFx0XFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cXHRcXHRcXHRcXHRcXHRcXHRHRlBfQVRPTUlDKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlxcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVxcdGlmIChidWYgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVxcdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0OlxcdFxcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVxcdGlmICghcHNlcmllc19kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlxcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXFx0aWYgKCFodl9jYXBzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XFx0XFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cXHRcXHRpZiAoIWRldl9lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcXHRjdHJsLVxcdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVxcdGlmICghY3RybC1cXHUwMDNlc2F2ZWRfcmVncylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XFx0XFx0XFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cXHRcXHRcXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXFx0aWYgKCFmb3VuZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcXHRcXHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVxcdFxcdFxcdGJ1Y2tldCA9XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA5OjQwOjAxLjEyMzU2NzgxMloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTA3NjYyNDEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVExTIFJlY29yZCBGcmFnbWVudGF0aW9uIEJ1ZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGUgaW4gdGhlIFRMUyBvZmZsb2FkIGNvZGUuIGBrbWFsbG9jX29iamAuLi4gcmlnaHQsIGl0IGFsbG9jYXRlcyBtZW1vcnkgZm9yIGEgYHRsc19yZWNvcmRfaW5mb2Agc3RydWN0LiBDcnVjaWFsbHksIGl0IGRvZXNuJ3QgemVybyBpdCwgdW5saWtlIGBremFsbG9jYC4gVGhlIGNvZGUgaW4gYHRsc19jcmVhdGVfbmV3X3JlY29yZGAgYWxsb2NhdGVzIHRoZSBzdHJ1Y3QsIGluaXRpYWxpemVzIHRoZSBmaXJzdCBmcmFnbWVudCwgYW5kIHNldHMgYG51bV9mcmFnc2AgdG8gMS4gVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGBmcmFnc2AgYXJyYXkgd2l0aGluIGB0bHNfcmVjb3JkX2luZm9gICppc24ndCogaW5pdGlhbGl6ZWQgaW5pdGlhbGx5LlxuXG5gdGxzX2FwcGVuZF9mcmFnYCBpcyByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHN1YnNlcXVlbnQgZnJhZ21lbnRzLiBJdCB1cGRhdGVzIHRoZSBmcmFnbWVudCBkZXNjcmlwdG9yIGJlZm9yZSBpbmNyZW1lbnRpbmcgYG51bV9mcmFnc2AsIHdoaWNoIGlzIGdvb2QuIEltcG9ydGFudDogYGVuZF9zZXFgIGFuZCBgbGlzdGAgYXJlIGluaXRpYWxpemVkIGxhdGVyIGluIGB0bHNfcHVzaF9yZWNvcmRgLlxuXG5UaGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgaXMgcHJldHR5IGNsZWFyLiBJZiBgbnVtX2ZyYWdzYCBzb21laG93IGV4Y2VlZHMgYE1BWF9TS0JfRlJBR1NgLCB0aGUgY29kZSB3aWxsIHdyaXRlIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoZSBgZnJhZ3NgIGFycmF5LiBTcGVjaWZpY2FsbHksIHRoZSB3cml0ZSBpcyB0byBgXHUwMDI2cmVjb3JkLVx1MDAzZWZyYWdzW3JlY29yZC1cdTAwM2VudW1fZnJhZ3NdYCwgd2hpY2ggd2lsbCBiZSBgcmVjb3JkLVx1MDAzZWZyYWdzW01BWF9TS0JfRlJBR1NdYCBpZiBgbnVtX2ZyYWdzYCBoYXMgdGhlIG1heGltdW0gcG9zc2libGUgdmFsdWUuIFRoZXJlJ3MgYWxzbyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGB0bHNfYXBwZW5kX2ZyYWdgIGZ1bmN0aW9uLCB3aGVuIGNoZWNraW5nIGlmIGEgbmV3IGZyYWdtZW50IHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBvbmUuIEl0IHJlYWRzIG1lbW9yeSBwYXN0IHRoZSBlbmQgb2YgdGhlIGBmcmFnc2AgYXJyYXkuXG5cbk5vdywgZG9lcyB0aGlzIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgKnVzZWQqIG9yIGxlYWtlZD8gVGhlIHJlY29yZCBpdHNlbGYgaXMgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgc28gdGhlcmUncyBubyBkaXJlY3QgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLiBUaGUgZnJhZ21lbnRzIHBvaW50IHRvIHBhZ2VzIGhvbGRpbmcgdGhlIGRhdGEsIGFuZCB0aGF0IGRhdGEgaXMgKmNvcGllZCogZnJvbSB1c2Vyc3BhY2UuIFNvIG5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFraW5nLlxuXG5UaGUgYnVnIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvbiB0aGUgYGZyYWdzYCBhcnJheS4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLlxuXG5LQVNBTiB3aWxsIGRldGVjdCB0aGUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIHJlYWRzLiBJbiB0aGlzIGNhc2UsIEtBU0FOIHdpbGwgY2F0Y2ggdGhlIGZ1bmRhbWVudGFsIHByb2JsZW06IHdyaXRpbmcgdG8gYHJlY29yZC1cdTAwM2VmcmFnc1tNQVhfU0tCX0ZSQUdTXWAuIEV2ZW4gaWYgdGhlIGFjY2Vzc2VkIG1lbW9yeSBoYXMgdW5pbml0aWFsaXplZCBkYXRhIG9yIGRhdGEgZnJvbSBhIG5laWdoYm9yaW5nIHNsYWIgb2JqZWN0LCBpdCdzIGlycmVsZXZhbnQsIGJlY2F1c2UgdGhlIEtBU0FOIHdpbGwgZGV0ZWN0IHRoZSBhY2Nlc3MuIEtNU0FOIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIGlzIG5vdCBhYm91dCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJldmlldy4gSXMgYG51bV9mcmFnc2AgdW5pbml0aWFsaXplZD8gTm8uIGBsZW5gPyBOby4gVGhlIGluZGl2aWR1YWwgZnJhZ21lbnQgZWxlbWVudHMgb2YgYGZyYWdzYD8gTm8sIGJlY2F1c2UgYGZyYWdzWzBdYCBpcyBpbml0aWFsaXplZCBhbmQgdGhlIHJlc3QgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGluY3JlbWVudGluZyBgbnVtX2ZyYWdzYC5cblxuU28gdGhlIG9ubHkgaXNzdWUgaXMgdGhlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCBLQVNBTiBpcyBidWlsdCB0byBoYW5kbGUuIFRodXMsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5Ob3csIHRoZSBydWxlcyFcblxuV2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTiA9IHRydWVgIGlmIHRoZSBwYXRjaCBpbnZvbHZlczpcbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgQm91bmRzIGNoZWNrcyBhbmQgcG90ZW50aWFsIGFjY2VzcyBvZiB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5XZSBzZXQgYE5lZWRzS01TQU4gPSBmYWxzZWAgaWYgdGhlIHByaW1hcnkgcmlzayBpcyBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy5cblxuVGhpcyBwYXRjaCBmaXhlcyBhbiBhcnJheSBvdmVyZmxvdy9vdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBgcmVjb3JkLVx1MDAzZWZyYWdzYC4gU28sIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5UaGUgcmVhc29uaW5nIGlzIGFzIGZvbGxvd3MuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGEgVExTIHJlY29yZCBiZWluZyBsZWZ0IG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gVGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhdmUgdGhlIHJlY29yZCBvcGVuIGlmIGBzaXplID09IDBgIGFuZCBgTVNHX01PUkVgIHdhcyBzZXQsIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgaXRzIG1heGltdW0uIFN1YnNlcXVlbnRseSwgb24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCwgd2hpY2ggd291bGQgaW5jcmVtZW50IGBudW1fZnJhZ3NgIHBhc3QgYE1BWF9TS0JfRlJBR1NgLCBjYXVzaW5nIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgd3JpdGUgb24gdGhlIGByZWNvcmQtXHUwMDNlZnJhZ3NgIGFycmF5LiBUaGlzIGlzIGFuIGFycmF5IG92ZXJmbG93IHZ1bG5lcmFiaWxpdHksIHdoaWNoIEtBU0FOIGRldGVjdHMuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2U7IG5vIGluZm9ybWF0aW9uIGlzIGxlYWtlZC4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYwMDksIk91dHB1dFRva2VucyI6MjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwOTo0MDoyMi4yMDAxOTQ3ODVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYHRsc19wdXNoX2RhdGFgIHRvIHByZXZlbnQgbGVhdmluZyBhIFRMUyByZWNvcmQgb3BlbiBpZiBpdHMgZnJhZ21lbnQgY291bnQgKGBudW1fZnJhZ3NgKSBoYXMgcmVhY2hlZCBgTUFYX1NLQl9GUkFHUyAtIDFgLiBQcmlvciB0byB0aGlzIHBhdGNoLCBpZiBgc2l6ZSA9PSAwYCBhbmQgYE1TR19NT1JFYCB3YXMgc2V0LCB0aGUgY29kZSB3b3VsZCBicmVhayBvdXQgb2YgdGhlIGxvb3AgYW5kIGxlYXZlIHRoZSByZWNvcmQgb3BlbiwgZXZlbiBpZiBgbnVtX2ZyYWdzYCB3YXMgYWxyZWFkeSBhdCB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBPbiB0aGUgbmV4dCBjYWxsIHRvIGB0bHNfcHVzaF9kYXRhYCwgYHRsc19hcHBlbmRfZnJhZ2AgY291bGQgYmUgY2FsbGVkIG9uIHRoaXMgb3BlbiByZWNvcmQsIHdoaWNoIHdvdWxkIGluY3JlbWVudCBgbnVtX2ZyYWdzYCBiZXlvbmQgYE1BWF9TS0JfRlJBR1NgIGFuZCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBgcmVjb3JkLVxcdTAwM2VmcmFnc2AgYXJyYXkuXFxuXFxuVGhpcyBpcyBhIGNsYXNzaWMgYXJyYXkgb3ZlcmZsb3cgLyBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGJ1Zy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGhlcmUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGB0bHNfcHVzaF9kYXRhYCB0byBwcmV2ZW50IGxlYXZpbmcgYSBUTFMgcmVjb3JkIG9wZW4gaWYgaXRzIGZyYWdtZW50IGNvdW50IChgbnVtX2ZyYWdzYCkgaGFzIHJlYWNoZWQgYE1BWF9TS0JfRlJBR1MgLSAxYC4gUHJpb3IgdG8gdGhpcyBwYXRjaCwgaWYgYHNpemUgPT0gMGAgYW5kIGBNU0dfTU9SRWAgd2FzIHNldCwgdGhlIGNvZGUgd291bGQgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBsZWF2ZSB0aGUgcmVjb3JkIG9wZW4sIGV2ZW4gaWYgYG51bV9mcmFnc2Agd2FzIGFscmVhZHkgYXQgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gT24gdGhlIG5leHQgY2FsbCB0byBgdGxzX3B1c2hfZGF0YWAsIGB0bHNfYXBwZW5kX2ZyYWdgIGNvdWxkIGJlIGNhbGxlZCBvbiB0aGlzIG9wZW4gcmVjb3JkLCB3aGljaCB3b3VsZCBpbmNyZW1lbnQgYG51bV9mcmFnc2AgYmV5b25kIGBNQVhfU0tCX0ZSQUdTYCBhbmQgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB3cml0ZSBvbiB0aGUgYHJlY29yZC1cXHUwMDNlZnJhZ3NgIGFycmF5LlxcblxcblRoaXMgaXMgYSBjbGFzc2ljIGFycmF5IG92ZXJmbG93IC8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBidWcuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBoZXJlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[1] Phase: Succeeded StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 09:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 09:40:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2] Phase: Succeeded StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 09:40:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 09:40:33 +0000 UTC FinishedAt: 2026-08-23 09:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1937442536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 09:40:43 +0000 UTC FinishedAt: 2026-08-23 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 09:40:43 +0000 UTC FinishedAt: 2026-08-23 09:56:58 +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:*623a6167-3613-4283-ac4b-4c7faacd4e90,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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1937442536/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": "47ac0587-078d-4a15-8cb8-b20e62864413", "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-workflowrsdbz/series-workflowrsdbz-build-action-581930078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 09:40:43 +0000 UTC FinishedAt: 2026-08-23 09:56:48 +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:*623a6167-3613-4283-ac4b-4c7faacd4e90,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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1937442536/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": "47ac0587-078d-4a15-8cb8-b20e62864413", "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-workflowrsdbz/series-workflowrsdbz-build-action-581930078/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 09:56:58 +0000 UTC FinishedAt: 2026-08-23 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 09:56:58 +0000 UTC FinishedAt: 2026-08-23 09:56:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 09:56:58 +0000 UTC FinishedAt: 2026-08-23 09:57:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 09:56:58 +0000 UTC FinishedAt: 2026-08-23 09:57:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1503962063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 09:57:08 +0000 UTC FinishedAt: 2026-08-23 09:59:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 09:57:08 +0000 UTC FinishedAt: 2026-08-23 09:59:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*47ac0587-078d-4a15-8cb8-b20e62864413,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-workflowrsdbz/series-workflowrsdbz-build-action-581930078/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-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 09:59:30 +0000 UTC FinishedAt: 2026-08-23 09:59:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 09:59:30 +0000 UTC FinishedAt: 2026-08-23 09:59:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 09:59:30 +0000 UTC FinishedAt: 2026-08-23 10:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 09:59:30 +0000 UTC FinishedAt: 2026-08-23 10:15:49 +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:*623a6167-3613-4283-ac4b-4c7faacd4e90,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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1503962063/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": "561cc4c0-ea1d-44bf-a9f1-58152e4abd66", "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-workflowrsdbz/series-workflowrsdbz-build-action-610282467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 09:59:30 +0000 UTC FinishedAt: 2026-08-23 10:15:39 +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:*623a6167-3613-4283-ac4b-4c7faacd4e90,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-workflowrsdbz/series-workflowrsdbz-convert-artifact-1503962063/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": "561cc4c0-ea1d-44bf-a9f1-58152e4abd66", "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-workflowrsdbz/series-workflowrsdbz-build-action-610282467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 10:15:49 +0000 UTC FinishedAt: 2026-08-23 10:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 10:15:49 +0000 UTC FinishedAt: 2026-08-23 10:15:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 10:15:49 +0000 UTC FinishedAt: 2026-08-23 10:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 10:15:49 +0000 UTC FinishedAt: 2026-08-23 10:17:32 +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:*561cc4c0-ea1d-44bf-a9f1-58152e4abd66,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-workflowrsdbz/series-workflowrsdbz-build-action-610282467/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-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"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:*47ac0587-078d-4a15-8cb8-b20e62864413,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*561cc4c0-ea1d-44bf-a9f1-58152e4abd66,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-workflowrsdbz/series-workflowrsdbz-build-action-581930078/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-workflowrsdbz/series-workflowrsdbz-build-action-610282467/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 10:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 10:17:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"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-workflowrsdbz/series-workflowrsdbz-convert-artifact-425819528/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 10:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 10:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 10:17:42 +0000 UTC FinishedAt: 2026-08-23 10:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 10:17:52 +0000 UTC FinishedAt: 2026-08-23 13:20:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrsdbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_device_sendmsg","tls_device_splice_eof"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","TLS_DEVICE"],"series_id":"3daa018e-5982-4d7d-baaa-a5076f7a28e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 10:17:52 +0000 UTC FinishedAt: 2026-08-23 13:20:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*47ac0587-078d-4a15-8cb8-b20e62864413,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*561cc4c0-ea1d-44bf-a9f1-58152e4abd66,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-workflowrsdbz/series-workflowrsdbz-build-action-581930078/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-workflowrsdbz/series-workflowrsdbz-build-action-610282467/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-workflowrsdbz/series-workflowrsdbz-convert-artifact-425819528/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,}