Name: series-workflowwsbzj Phase: Succeeded StartedAt: 2026-08-14 10:37:35 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[0] Phase: Succeeded StartedAt: 2026-08-14 10:37:35 +0000 UTC FinishedAt: 2026-08-14 10:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 10:37:35 +0000 UTC FinishedAt: 2026-08-14 10:42:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIO", "USERIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIO", "USERIO" ], "series_id": "7576e22d-20f9-4b27-bb1f-99dbf3aebfd8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__serio_register_port", "serio_unregister_port", "__serio_register_driver", "serio_unregister_driver", "serio_reconnect", "serio_rescan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklPJiMzNDssCiAgICAmIzM0O1VTRVJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fcmVjb25uZWN0JiMzNDssCiAgICAmIzM0O3NlcmlvX3Jlc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuaW5kZXggNTRkZDI2MjQ5YjAyNy4uYzI0ZTQzMWFmNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG5AQCAtMTA5LDYgJiM0MzsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7XHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyb3IgPSBkZXZpY2VfYXR0YWNoKFx1MDAyNnNlcmlvLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXG4gXHRcdGRldl93YXJuKFx1MDAyNnNlcmlvLVx1MDAzZWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSU8mIzM0OywKICAgICYjMzQ7VVNFUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9wb3J0JiMzNDssCiAgICAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICAgJiMzNDtzZXJpb19yZWNvbm5lY3QmIzM0OywKICAgICYjMzQ7c2VyaW9fcmVzY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBkZXZpY2VfYXR0YWNoKClgIGlzIGNhbGxlZCBvbiBhbiB1bnJlZ2lzdGVyZWQgc2VyaW8gZGV2aWNlIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBzZXJpbyBwb3J0IGlzIGJlaW5nIHVucmVnaXN0ZXJlZCBvciByZWNvbm5lY3RlZCBjb25jdXJyZW50bHkgd2l0aCBkcml2ZXIgYmluZGluZyBvciBzeXNmcyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VyaW8gc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYHVzZXJpb2AgZHJpdmVyIGFuZCBzeXNmcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gc2VyaW8gcG9ydCByZWdpc3RyYXRpb24sIHVucmVnaXN0cmF0aW9uLCBhbmQgZHJpdmVyIGJpbmRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTA6NDA6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggNTRkZDI2MjQ5YjAyNy4uYzI0ZTQzMWFmNjc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMTA5LDYgJiM0MzsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCWludCBlcnJvcjsKIAomIzQzOwlpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKCZhbXA7c2VyaW8tJmd0O2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyb3IgPSBkZXZpY2VfYXR0YWNoKCZhbXA7c2VyaW8tJmd0O2Rldik7CiAJaWYgKGVycm9yICZsdDsgMCAmYW1wOyZhbXA7IGVycm9yICE9IC1FUFJPQkVfREVGRVIpCiAJCWRldl93YXJuKCZhbXA7c2VyaW8tJmd0O2RldiwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBTRVJJTyBEcml2ZXIgUmVnaXN0cmF0aW9uIElzc3VlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdGhhdCYjMzk7cyBhZGRlZCBhIGNoZWNrIGluIGBzZXJpb19maW5kX2RyaXZlcmAuIFNwZWNpZmljYWxseSwgaXTigJlzIGd1YXJkaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gd2l0aCBgaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKSByZXR1cm47YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0h1aCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gV2h5IGFyZSB3ZSBiYWlsaW5nIG91dCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmVkPyYjMzQ7IEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBpbXByb3BlciBzdGF0ZSBoYW5kbGluZy4KCk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgc2VyaW9fZmluZF9kcml2ZXJgICphY3R1YWxseSogZG9lcy4gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHByb2Jpbmcgb3IgYmluZGluZyBkcml2ZXJzIHRvIFNFUklPIGRldmljZXM/IEFuZCBqdXN0IGFzIGltcG9ydGFudGx5LCB3aGVyZSBpcyBpdCBiZWluZyAqY2FsbGVkKiBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoaXMgY2hlY2sgaXMgYmVpbmcgaGl0LCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMsIGFuZCB3aGF0IHByb2JsZW0gaXQmIzM5O3MgdHJ5aW5nIHRvIHNvbHZlLiBJcyB0aGlzIGEgY29tbW9uIGlzc3VlLCBvciBhIHZlcnkgc3BlY2lmaWMgZWRnZSBjYXNlIHRoYXQgc29tZW9uZSBoYXMgc2Vlbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBmb3IgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiB0byBvY2N1ciBhc3luY2hyb25vdXNseS4gTGV0JiMzOTtzIGdldCBjcmFja2luZywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX2ZpbmRfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz04Mj1zdGF0aWMgaW50IHNlcmlvX2JpbmRfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjEwODpzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTEwOS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTE4OT1zdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDgtXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LVx1MDAzZW9iamVjdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjA5Olx0XHRcdHNlcmlvX2ZpbmRfZHJpdmVyKGV2ZW50LVx1MDAzZW9iamVjdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEwLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTc9c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNjktXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNzA6XHRcdFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM3MS1cdFx0XHRzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NTk9c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjQtXHRcdHNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTY1Olx0XHRzZXJpb19maW5kX2RyaXZlcihzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTY2LVx0fVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz04MjU9dm9pZCBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4MzE6XHRkcnYtXHUwMDNlbWFudWFsX2JpbmQgPSB0cnVlO1x0Lyogc28gc2VyaW9fZmluZF9kcml2ZXIgaWdub3JlcyBpdCAqL1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMi1cdHNlcmlvX3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhkcnYpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzctXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4Mzg6XHRcdFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzOS1cdFx0XHQvKiB3ZSBjb3VsZCYjMzk7dmUgZGVsZXRlZCBzb21lIHBvcnRzLCByZXN0YXJ0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyBhIERldmljZSBSZWdpc3RyYXRpb24gQnVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgYnVnIHdoZXJlIGBkZXZpY2VfYXR0YWNoYCB3YXMgYmVpbmcgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQgd2FzbiYjMzk7dCBwcm9wZXJseSByZWdpc3RlcmVkIGZpcnN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVucHJlZGljdGFibGUgYmVoYXZpb3Ig4oCTIGtlcm5lbCBwYW5pY3MsIGRhdGEgY29ycnVwdGlvbiwgdGhlIHdvcmtzLiBUaGUgZml4IGlzIGEgc2ltcGxlIGNoZWNrLCB2ZXJpZnlpbmcgYGRldmljZV9pc19yZWdpc3RlcmVkYCBiZWZvcmUgY2FsbGluZyB0aGUgYXR0YWNobWVudCBmdW5jdGlvbi4gQSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSwgYnV0IGNydWNpYWwgZm9yIHN0YWJpbGl0eS4gVGltZSB0byBkaWcgaW50byB0aGUgYHNlcmlvLmNgIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNlcmlhbCBpbnB1dCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZS03LVxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19TRVJJTylcdFx0JiM0Mzs9IHNlcmlvLm9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUtOS1vYmotJChDT05GSUdfU0VSSU9fSTgwNDIpXHQmIzQzOz0gaTgwNDIub1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1NFUklPX1JBVylcdFx0JiM0Mzs9IHNlcmlvX3Jhdy5vXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19TRVJJT19BTVNfREVMVEEpXHQmIzQzOz0gYW1zX2RlbHRhX3NlcmlvLm9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX1NFUklPX0FMVEVSQV9QUzIpXHQmIzQzOz0gYWx0ZXJhX3BzMi5vXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfU0VSSU9fR1BJT19QUzIpXHQmIzQzOz0gcHMyLWdwaW8ub1xuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfVVNFUklPKVx0XHQmIzQzOz0gdXNlcmlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VSSU8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfU0VSSU9gLiBSaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNlcmlhbCBJL08gc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc2VyaW9fZmluZF9kcml2ZXJgIC0gSSYjMzk7bGwgZmluZCB0aGF0IGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgLiBBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUsIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBieSBgc2VyaW9faGFuZGxlX2V2ZW50YCwgYGRydmN0bF9zdG9yZWAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcG9pbnRzIHRvIGNvbnNpZGVyLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2VyaW9faGFuZGxlX2V2ZW50YCBpbiBtb3JlIGRldGFpbDsgaXQgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2FsbGVyIGFzIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBJL08gZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX2hhbmRsZV9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTY2PXN0YXRpYyB2b2lkIHNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHZvaWQgKm9iamVjdCxcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTg4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjE4OTpzdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5MC17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjY6c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFdvcmtxdWV1ZSBDb250ZXh0KioKCk9rYXksIHNvIGBzZXJpb19ldmVudF93b3JrYCBpcyBhIHdvcmtxdWV1ZS4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFzeW5jaHJvbm91cyBhbmQgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGRlZmVycmVkIHByb2Nlc3Npbmcgb2YgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGBzZXJpb2Agc3Vic3lzdGVtLiBNeSBtZW50YWwgbW9kZWwga2lja3MgaW4g4oCTIHRoaXMgaW1wbGllcyBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBwb3NzaWJseSBldmVuIGEgcG9sbGluZyBtZWNoYW5pc20gdGhhdCBldmVudHVhbGx5IGZ1bm5lbHMgaW50byB0aGlzIHF1ZXVlLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBkcnZjdGxfc3RvcmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKml0KiBpbnRlcmFjdHMgd2l0aCB0aGlzIHdvcmtxdWV1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJ2Y3RsX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTE9c3RhdGljIHNzaXplX3QgZXh0cmFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1Ni1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNTc6c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBkcnZjdGxfc3RvcmVgIEF0dHJpYnV0ZSoqCgpPa2F5LCBzbyBgZHJ2Y3RsX3N0b3JlYCBpcyBwb3BwaW5nIHVwLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIGEgc3lzZnMgYXR0cmlidXRlLiYjMzQ7IFdlIGtub3cgaG93IHRoYXQgd29ya3PigJRpdCYjMzk7cyBhIGNvbnRyb2wgaW50ZXJmYWNlIGV4cG9zZWQgdGhyb3VnaCB0aGUgdmlydHVhbCBmaWxlc3lzdGVtLCBsaWtlbHkgdXNlZCBmb3IgZGV2aWNlIGRyaXZlciBtYW5hZ2VtZW50LiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgcmVsZXZhbnQgZHJpdmVyIHVzZXMgb3IgcmVhY3RzIHRvIHRoYXQgYXR0cmlidXRlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgaGFyZHdhcmUuIFJpZ2h0IG5vdyBJIGFtIHRoaW5raW5nIHRoYXQgdGhpcyBhdHRyaWJ1dGUgaXMgbGlrZWx5IHVzZWQgdG8gY29udHJvbCB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbiBvciBiZWhhdmlvci4KCkdpdmVuIHRoZSBjb21tb24gcGF0dGVybnMsIG15IG5leHQgc3RlcCBpcyBhbG1vc3QgcmVmbGV4OiAmIzM0O0xldCYjMzk7cyBjaGVjayBgc2VyaW9fcmVjb25uZWN0X3BvcnRgLiYjMzQ7IEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlLCBwb3RlbnRpYWxseSBpZiB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIFBTLzIgZHJpdmVyLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gc29tZSBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlbHkgYmVjYXVzZSB0aGlzIGF0dHJpYnV0ZSBpcyBjb250cm9sbGluZyBkcml2ZXIgYmVoYXZpb3IsIGl0IHdvdWxkIGxpa2VseSBiZSBuZWNlc3NhcnkgdG8gaGF2ZSBzb21lIGZ1bmN0aW9uIHRvIHJlY29ubmVjdCB0aGUgcG9ydC4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHRoZW4gdGhpcyBhdHRyaWJ1dGUmIzM5O3MgdXNlIHdpbGwgbm90IGJlIHRvIHJlLWNvbm5lY3QgdGhlIHBvcnQsIGFuZCB0aGlzIHdpbGwgYmUgYSBkZWFkIGVuZCBmb3IgbWUuIFdpdGggdGhlc2UgdGhvdWdodHMgaW4gbWluZCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VyaW9fcmVjb25uZWN0X3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM0PXN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzYtc3RhdGljIHZvaWQgc2VyaW9fZGlzY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjAzLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIwNDpcdFx0XHRzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NTI2PXN0YXRpYyB2b2lkIHNlcmlvX2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NTgtICovXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTU5OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjAte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NzU9c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpyb290KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01ODAtXHRkbyB7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTgxOlx0XHRlcnJvciA9IHNlcmlvX3JlY29ubmVjdF9wb3J0KHMpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4Mi1cdFx0aWYgKCFlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTZXJpbyBEcml2ZXIgRGlzY29ubmVjdCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGRpc2Nvbm5lY3QgZmxvdyBmb3IgdGhpcyBTZXJpbyBkcml2ZXIgYW5kIGl0IGxvb2tzIGxpa2UgYHNlcmlvX3JlY29ubmVjdF9wb3J0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHdhdGNoLiBJIHNlZSBpdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSBib3RoIGBzZXJpb19oYW5kbGVfZXZlbnRgIGFuZCBgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBtZSB0aGUgbGlrZWx5IHBvaW50cyBvZiBlbnRyeSBmb3IgcmVjb25uZWN0IGF0dGVtcHRzIGFuZCB0aG9zZSBldmVudHMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZW0uIE5vdyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5ICp1bnJlZ2lzdGVycyogdGhlIGRyaXZlciBhbmQgaWYgdGhhdCBmdW5jdGlvbiBpcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgZGlzY29ubmVjdHMgdG8gc2VlIHdoYXQgaXMgbGlrZWx5IGluZmx1ZW5jaW5nIHRoZSByZWNvbm5lY3QuIExldCYjMzk7cyBkaWcgaW50byBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZy4gSG9wZWZ1bGx5LCBpdCB3aWxsIHRlbGwgbWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyMz1FWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODI1OnZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgyNi17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODQ2OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCBzbyBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgbWVhbmluZyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBmb3IgaXNzdWVzLiBMZXQmIzM5O3MgdHJhY2UgYmFjay4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBzZXJpb19yZWNvbm5lY3RgIGZ1bmN0aW9uLCBzaW5jZSByZWNvbm5lY3RzIGFyZSBvZnRlbiBpbnZvbHZlZCB3aGVuIGRyaXZlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCBkdXJpbmcgaG90cGx1ZyBvciBzeXN0ZW0gcmVzdGFydCBzY2VuYXJpb3MuIEFuZCBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBTRVJJT19SRUNPTk5FQ1RfUE9SVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IGhvdyB0aGUgZHJpdmVyIG1pZ2h0IGludGVyYWN0IHdpdGggdW5yZWdpc3RyYXRpb24gb3Igb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjayBmcm9tIGBzZXJpb19yZWNvbm5lY3RgIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gVGhpcyBpcyB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQsIEkgdGhpbmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3JlY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzQ9c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNi1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Mzc6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzgtc3RhdGljIHZvaWQgc2VyaW9fYXR0YWNoX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MD1zdGF0aWMgaW50IHNlcmlvX2Nvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDYtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDc6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDgte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjAzLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIwNDpcdFx0XHRzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEyLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIxMzpcdFx0XHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIxNC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzU3PXN0YXRpYyBzc2l6ZV90IGRydmN0bF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzY2LVx0XHR9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgXCYjMzQ7cmVjb25uZWN0XCYjMzQ7LCBjb3VudCkpIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNjc6XHRcdFx0c2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OC1cdFx0fSBlbHNlIGlmICghc3RybmNtcChidWYsIFwmIzM0O3Jlc2NhblwmIzM0OywgY291bnQpKSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTUyNj1zdGF0aWMgdm9pZCBzZXJpb19kZXN0cm95X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTU4LSAqL1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU1OTpzdGF0aWMgaW50IHNlcmlvX3JlY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTYwLXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NjE6XHRpbnQgZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjItXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3NC0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NzU6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpyb290KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3Ni17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4MC1cdGRvIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1ODE6XHRcdGVycm9yID0gc2VyaW9fcmVjb25uZWN0X3BvcnQocyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgyLVx0XHRpZiAoIWVycm9yKSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY1Nj1FWFBPUlRfU1lNQk9MKHNlcmlvX3Jlc2Nhbik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1ODp2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1OS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjYyOkVYUE9SVF9TWU1CT0woc2VyaW9fcmVjb25uZWN0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIHRoZSBTRVJJTyBTdWJzeXN0ZW0qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIHRoZSBTRVJJTyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgc2VyaW9fZmluZF9kcml2ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgc2VyaW9fcmVjb25uZWN0YCBpcyBleHBvcnRlZC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazogYCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpYCB3aXRoaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBzZWVtcyB0byBiZSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhaW1pbmcgdG8gcHJldmVudCBgc2VyaW9fZmluZF9kcml2ZXJgIGZyb20gYmVpbmcgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQmIzM5O3MgYWxyZWFkeSBiZWVuIHVucmVnaXN0ZXJlZC4gTWFrZXMgc2Vuc2UuCgpUaGUgY29udGV4dCBpcyB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgZ2V0dGluZyBjYWxsZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBkZXZpY2UgbWlnaHQgbm90IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW55bW9yZSDigJMgc3lzZnMgKGBkcnZjdGxfc3RvcmVgKSwgYSB3b3JrcXVldWUgKGBzZXJpb19oYW5kbGVfZXZlbnRgKSwgYW5kIHBvdGVudGlhbGx5IGR1cmluZyBwb3J0IHJlY29ubmVjdGlvbiAoYHNlcmlvX3JlY29ubmVjdF9wb3J0YCksIG9yIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiAoYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCkuIElmIHRoZSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdpbGwgcmlnaHRseSByZXR1cm4gZmFsc2UuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gZnV6emluZyB3b3VsZCBiZSBhIGdvb2QgaWRlYS4gVGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wgaXMgYFNFUklPYCwgb2J2aW91c2x5LiBHaXZlbiB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgc3RhdGljLCBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgaXQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjYWxsZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgZHJ2Y3RsX3N0b3JlYCwgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgYW5kIGBzZXJpb19yZWNvbm5lY3RgLiBPaCwgcmlnaHQsIGBkcnZjdGxfc3RvcmVgIGlzIHN5c2ZzLCBhbmQgYHNlcmlvX2hhbmRsZV9ldmVudGAgaXMgYSB3b3JrcXVldWUuIE9rYXkuCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBIbW0sIGxldCYjMzk7cyBzZWUuIEkgaGF2ZSBgc2VyaW9fcmVzY2FuYCwgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX2ludGVycnVwdGAuCgpBbHJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgc2VyaW9fcmVzY2FuYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZXNjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTYxNz1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjUxLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1Mjp2b2lkIHNlcmlvX3Jlc2NhbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1My17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk2ND1pcnFyZXR1cm5fdCBzZXJpb19pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbyxcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTcyLVx0aWYgKCFkZmwgXHUwMDI2XHUwMDI2IGRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NzM6XHRcdHNlcmlvX3Jlc2NhbihzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTc0LVx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiBhIFBTLzIgcG9ydCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU2VyaWFsIEkvTyAoU0VSSU8pIHN1YnN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgYWxyZWFkeSBnb3R0ZW4gcGFzdCB0aGUgZHJpdmVyIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcGhhc2UuIE5vdywgdW5yZWdpc3RyYXRpb24uLi4gdGhhdCBtZWFucyB3ZSYjMzk7cmUgbGlrZWx5IGVpdGhlcjoKCiogICBTaHV0dGluZyBkb3duIGEgZGV2aWNlIGdyYWNlZnVsbHkuCiogICBIYW5kbGluZyBhIGhvdC11bnBsdWcgZXZlbnQgKGxlc3MgbGlrZWx5LCBidXQgaW1wb3J0YW50IHRvIGNvbnNpZGVyKS4KKiAgIENsZWFuaW5nIHVwIGFmdGVyIGFuIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKiAgIE9yIG1heWJlLCBpbiBhIG1vcmUgY29tcGxleCBzY2VuYXJpbywgcmUtYXNzaWduaW5nIHRoZSBwb3J0IHRvIGEgZGlmZmVyZW50IGRldmljZS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbG9ja3MsIG9idmlvdXNseS4gV2UmIzM5O3JlIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIFdoYXQgbXV0ZXhlcyBvciBzcGlubG9ja3MgYXJlIGludm9sdmVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgYWNxdWlzaXRpb24gb3JkZXI/IEkgbmVlZCB0byBiZSBzdXJlIHdlIGF2b2lkIGFueSBkZWFkbG9ja3MuIE1lbW9yeSBtYW5hZ2VtZW50IGlzIHRoZSBuZXh0IGZsYWcgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cuIEFyZSB3ZSBkZWFsbG9jYXRpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIHRoYXQgY291bGQgbGVhZCB0byBhIGNyYXNoIGxhdGVyPyBUaGUgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcml0aWNhbCBoZXJlLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgcGFydGljdWxhcmx5IGlmIHRoZSBwb3J0IGhhZCBhbiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBBcmUgd2UgZGlzYWJsaW5nIGludGVycnVwdHMgY29ycmVjdGx5IGJlZm9yZSBmcmVlaW5nIHJlc291cmNlcz8gVGhlIHRpbWluZyBvZiB0aGF0IGlzIGFsd2F5cyBjcnVjaWFsLiBBbmQgb2YgY291cnNlLCBJJiMzOTttIGFscmVhZHkgd29uZGVyaW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBwb3J0LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVucmVnaXN0cmF0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbj8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZT8gSG93IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZXhwZWN0ZWQgdG8gaGFuZGxlIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSByZXR1cm4gcGF0aCBpcyBlc3NlbnRpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgY2FsbHNpdGVzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY3Mz1FWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfcG9ydCk7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Ny0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Nzg6dm9pZCBzZXJpb191bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02Nzkte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODQtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY4NTpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfcG9ydCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgbG9va2luZyBhdCBgc2VyaW9fcmVnaXN0ZXJfcG9ydGAuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGRyaXZlci1sZXZlbCBmdW5jdGlvbj8gUGFydCBvZiBhIGJyb2FkZXIgZnJhbWV3b3JrPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgaXRzIHVzZT8mIzM0OyBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHB1bGxpbmcgdXAgYXNzb2NpYXRlZCBzdHJ1Y3RzOiBgc2VyaW9fcG9ydGAsIGBzZXJpb19kcml2ZXJgLCBhbnkgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgKGxpa2UgYG11dGV4ZXNgIG9yIGBzcGlubG9ja3NgKS4KCk15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCBoYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZC9yZWdpc3RlcmVkIHdpdGggdGhpcyBjYWxsPyBJcyB0aGlzIGEgc2ltcGxlIHJlZ2lzdHJhdGlvbiBvciBhcmUgd2UgbWFuYWdpbmcgcmVzb3VyY2VzIHRvbz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZD8gTWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgcmVzb3VyY2UgY2xhaW1pbmcsIGFsbCBjb21lIHRvIG1pbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmJlaW5nKiByZWdpc3RlcmVkIGFuZCB0aGUgb3ZlcmFsbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQsIGFuZCBjb25maXJtIHRoZSByZWxldmFudCBjYWxsYmFja3MgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgaW50ZXJmYWNlIGlzIGJsb2NraW5nIG9yIGFzeW5jaHJvbm91cyB0b28gLSBhbmQgaWYgYW55IHNwZWNpZmljIElSUS1oYW5kbGluZyBvciBETUEgc2V0dXAgaXMgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3JlZ2lzdGVyX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2Mj1FWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2Ny0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Njg6dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjY5LXtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgaG93IGEgbmV3IFNlcklPIGRyaXZlciBpbnRlZ3JhdGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNlcklPIGNvcmUuIFRoaW5ncyBsaWtlIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCwgZGV2aWNlIHByb2JpbmcsIGFuZCBvZiBjb3Vyc2UsIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGl0c2VsZiDigJMgYWxsIGNydWNpYWwgcGllY2VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb25lIGlzIGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgZHJpdmVyJiMzOTtzIHByZXNlbmNlLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGF0IGl0JiMzOTtzIGdyYWNlZnVsbHkgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc3Nj1zdGF0aWMgdm9pZCBzZXJpb19hdHRhY2hfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjc4NjppbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg3LXtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODIyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4MjM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNlcmlvIFN5bWJvbCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGtlZXBzIGNpcmNsaW5nIGFyb3VuZCB0aGVzZSBgc2VyaW9gIHN5bWJvbHM6IGBzZXJpb19yZWNvbm5lY3RgLCBgc2VyaW9fcmVzY2FuYCwgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLCBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZm9jdXMgcG9pbnRzIGhlcmUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIGludGVyYWN0aW9uLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHNvbGlkaWZ5LiBUaGF0IGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24sIEkganVzdCByZWFsaXplZCB0aGF0IGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCB0aGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgc2VyaW9fcXVldWVfZXZlbnRgLiBBaCwgbm93IHRoYXQgSSBoYXZlIHRoaXMgY29ubmVjdGlvbiwgdGhlIHBpY3R1cmUgYmVjb21lcyBhIGxvdCBjbGVhcmVyLiBUaGVzZSBldmVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXN5bmNocm9ub3VzbHksIGVmZmljaWVudGx5LiBUaGUgd29ya2Zsb3cgaXMgY3JpdGljYWwgdG8gdGhlIGZ1bmN0aW9uYWxpdHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3F1ZXVlX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0yMjY9c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjg6c3RhdGljIGludCBzZXJpb19xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyOS1cdFx0XHQgICAgIGVudW0gc2VyaW9fZXZlbnRfdHlwZSBldmVudF90eXBlKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTI9dm9pZCBzZXJpb19yZXNjYW4oc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTMte1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NDpcdHNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRVNDQU5fUE9SVCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU1LX1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjU4PXZvaWQgc2VyaW9fcmVjb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU5LXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjA6XHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVDT05ORUNUX1NVQlRSRUUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2OD12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcwLVx0c2VyaW9faW5pdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzE6XHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgb3duZXIsIFNFUklPX1JFR0lTVEVSX1BPUlQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Mi19XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgxMy1cdFx0ZHJ2LVx1MDAzZW1hbnVhbF9iaW5kID0gZmFsc2U7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODE0Olx0XHRlcnJvciA9IHNlcmlvX3F1ZXVlX2V2ZW50KGRydiwgTlVMTCwgU0VSSU9fQVRUQUNIX0RSSVZFUik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODE1LVx0XHRpZiAoZXJyb3IpIHtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTA4PXN0YXRpYyBpbnQgc2VyaW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI2LVx0XHQgKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5Mjc6XHRcdHNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1RfUE9SVCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlvIERyaXZlciBMb2FkaW5nIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkcml2ZXJzIGdldCBjb25uZWN0ZWQgdG8gc2VyaWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHNlcmlvYCBzdWJzeXN0ZW0uIEl0IHNlZW1zIGxpa2UgdGhlIGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24gaXMgdGhlIGtleSB0byB0aGlzIHByb2Nlc3MuIEkmIzM5O3ZlIG5vdGljZWQgdGhhdCBpdCYjMzk7cyBpbnZva2VkIGluIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MuIEZpcnN0LCBpdCBnZXRzIGNhbGxlZCB3aGVuIGhhbmRsaW5nIGV2ZW50cyByZWxhdGVkIHRvIGRldmljZSBjaGFuZ2VzIC0gYFNFUklPX1JFU0NBTl9QT1JUYCwgYFNFUklPX1JFQ09OTkVDVF9QT1JUYCwgb3IgYFNFUklPX0FUVEFDSF9EUklWRVJgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHNpdHVhdGlvbnMgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBmaW5kIGEgc3VpdGFibGUgZHJpdmVyLgoKQmV5b25kIHRoYXQsIHRoZSBjb2RlIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYCB3aGVuIGEgZHJpdmVyIGlzIHVucmVnaXN0ZXJlZCwgdmlhIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB1bnJlZ2lzdHJhdGlvbiBtYXkgaW52b2x2ZSBmaW5kaW5nIG5ldyBkcml2ZXJzIHRvIGhhbmRsZSB0aGUgZGV2aWNlLCBvciBlbnN1cmluZyBubyBkcml2ZXIgcmVtYWlucyBib3VuZC4KCkZpbmFsbHksIGFuZCBpbnRlcmVzdGluZ2x5LCBgZHJ2Y3RsX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggZHJpdmVyIGNvbnRyb2wgdmlhIGEgc3lzZnMgaW50ZXJmYWNlIG9yIHNpbWlsYXIsIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBjb25maXJtcyBpdHMgY29yZSByb2xlIGluIGRyaXZlciBzZWxlY3Rpb24uIE5vdywgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRydmN0bF9zdG9yZWAgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdG8gc2VlIGhvdyBpdCB1c2VzIGBzZXJpb19maW5kX2RyaXZlcmAgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVyIG1hbmFnZW1lbnQuIFRoaXMgd2lsbCBsaWtlbHkgaWxsdW1pbmF0ZSB0aGUgbWVjaGFuaXNtcyBkcml2aW5nIHRoZSBkcml2ZXIgbWF0Y2hpbmcgYW5kIGJpbmRpbmcgdGhhdCBzZWVtIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcnZjdGxfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1MT1zdGF0aWMgc3NpemVfdCBleHRyYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU2LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1NzpzdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIGBkcnZjdGxfc3RvcmVgIFN5c2ZzIEF0dHJpYnV0ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIGBkcnZjdGxfc3RvcmVgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYFNFUklPYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtIHRvIHVuZGVyc3RhbmQgaG93IGBTRVJJT2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBlbmFibGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBhdHRyaWJ1dGUgaXMgZGVjbGFyZWQgYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VSSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQtI1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU6Y29uZmlnIFNFUklPXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1NlcmlhbCBJL08gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNz1pZiBTRVJJT1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OmNvbmZpZyBTRVJJT19JODA0MlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7aTgwNDIgUEMgS2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0Mzpjb25maWcgU0VSSU9fU0VSUE9SVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7U2VyaWFsIHBvcnQgbGluZSBkaXNjaXBsaW5lXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU4OmNvbmZpZyBTRVJJT19RNDBLQkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy01OS1cdHRyaXN0YXRlIFwmIzM0O1E0MCBrZXlib2FyZCBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYxLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYyOmNvbmZpZyBTRVJJT19QQVJLQkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O1BhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03NS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo3Njpjb25maWcgU0VSSU9fUlBDS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04Ni1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo4Nzpjb25maWcgU0VSSU9fQU1CQUtNSVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7QU1CQSBLTUkga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5MTpjb25maWcgU0VSSU9fU0ExMTExXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBTQTExMTEga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05NC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NTpjb25maWcgU0VSSU9fR1NDUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEzMT1jb25maWcgSElMX01MQ1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM1OmNvbmZpZyBTRVJJT19QQ0lQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0NS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNDY6Y29uZmlnIFNFUklPX01BQ0VQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgTzIgTUFDRSBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTU1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE1Njpjb25maWcgU0VSSU9fU0dJX0lPQzNcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgSU9DMyBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2Njpjb25maWcgU0VSSU9fTElCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY3LVx0dHJpc3RhdGUgXCYjMzQ7UFMvMiBkcml2ZXIgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzUtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTc2OmNvbmZpZyBTRVJJT19SQVdcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzctXHR0cmlzdGF0ZSBcJiMzNDtSYXcgYWNjZXNzIHRvIHNlcmlvIHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE5MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxOTE6Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE5OS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyMDA6Y29uZmlnIFNFUklPX0FNU19ERUxUQVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIwMS1cdHRyaXN0YXRlIFwmIzM0O0Ftc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjE1OmNvbmZpZyBTRVJJT19QUzJNVUxUXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjE2LVx0dHJpc3RhdGUgXCYjMzQ7VFFDIFBTLzIgbXVsdGlwbGV4ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjIzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIyNDpjb25maWcgU0VSSU9fQVJDX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyNS1cdHRyaXN0YXRlIFwmIzM0O0FSQyBQUy8yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjMzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNDpjb25maWcgU0VSSU9fQVBCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7R1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjQ0OmNvbmZpZyBTRVJJT19PTFBDX0FQU1BcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgU0VSSU9fU1VONElfUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjY1LVx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIEExMCBQUy8yIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjc0OmNvbmZpZyBTRVJJT19HUElPX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlhbCBJbnB1dC9PdXRwdXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgU0VSSU9gLiBSaWdodCwgYFNFUklPYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4gVGhhdCYjMzk7cyBhIGtleSBmaXJzdCBwb2ludC4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBgVVNFUklPYCBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYFVTRVJJT2AgYXMgd2VsbC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFVTRVJJT2AgY29uZmlndXJhdGlvbiBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjg1OmNvbmZpZyBVU0VSSU9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODYtXHR0cmlzdGF0ZSBcJiMzNDtVc2VyIHNwYWNlIHNlcmlvIHBvcnQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFVTRVJJTyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYFVTRVJJT2AgaXMgYSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgbGV0cyB1c2Vyc3BhY2UgY29kZSBjcmVhdGUgaXRzIG93biBzZXJpbyBwb3J0cy4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcuIElmIEkgY2FuIGNyZWF0ZSBjdXN0b20gc2VyaW8gcG9ydHMgZnJvbSB1c2Vyc3BhY2UsIEkgY2FuIGNvbnRyb2wgdGhlIGlucHV0cyBtdWNoIG1vcmUgZGlyZWN0bHkgYW5kIHByZWRpY3RhYmx5IHRoYW4gSSBjb3VsZCBvdGhlcndpc2UuIFRoYXQgbGV2ZWwgb2YgY29udHJvbCBpcyAqZXhhY3RseSogd2hhdCBJIG5lZWQgdG8gY3JhZnQgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuCgpUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIGBVU0VSSU9gIGl0c2VsZiByZWxpZXMgb24gdGhlIGBTRVJJT2Agc3Vic3lzdGVtLiBJZiBpdCBkb2VzLCB0aGVuIGFueSBidWdzIGluIGBTRVJJT2Agd2lsbCBiZSBleHBvc2VkLiBJZiBgVVNFUklPYCBjcmVhdGVzIGl0JiMzOTtzIG93biBhYnN0cmFjdGlvbiBhbmQgaXQgaXNuJiMzOTt0IGRlcGVuZGVudCBvbiBgU0VSSU9gIGl0c2VsZiwgdGhhdCYjMzk7cyBhbHNvIHNvbWV0aGluZyBpbnRlcmVzdGluZywgdGhvdWdoIHBlcmhhcHMgbm90IGFzIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yOT1jb25maWcgU0VSSU9fSTgwNDJcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzEtXHRkZWZhdWx0IHlcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gQVJDSF9NSUdIVF9IQVZFX1BDX1NFUklPXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzMtXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTQzPWNvbmZpZyBTRVJJT19TRVJQT1JUXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ1LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz01OD1jb25maWcgU0VSSU9fUTQwS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNTktXHR0cmlzdGF0ZSBcJiMzNDtRNDAga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBRNDBcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02MS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz02Mj1jb25maWcgU0VSSU9fUEFSS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtQYXJhbGxlbCBwb3J0IGtleWJvYXJkIGFkYXB0ZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo2NDpcdGRlcGVuZHMgb24gUEFSUE9SVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTY1LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz03Nj1jb25maWcgU0VSSU9fUlBDS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBBUkNIX0FDT1JOXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9ODc9Y29uZmlnIFNFUklPX0FNQkFLTUlcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0FNQkEgS01JIGtleWJvYXJkIGNvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo4OTpcdGRlcGVuZHMgb24gQVJNX0FNQkFcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05MT1jb25maWcgU0VSSU9fU0ExMTExXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBTQTExMTEga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkzOlx0ZGVwZW5kcyBvbiBTQTExMTFcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05NC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05NT1jb25maWcgU0VSSU9fR1NDUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIEdTQ1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk4LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEwOT1jb25maWcgSFBfU0RDXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7SFAgU3lzdGVtIERldmljZSBDb250cm9sbGVyIGk4MDQyIFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMTE6XHRkZXBlbmRzIG9uIChHU0MgfHwgSFAzMDApIFx1MDAyNlx1MDAyNiBTRVJJT1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTExMi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xMzE9Y29uZmlnIEhJTF9NTENcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzItXHR0cmlzdGF0ZSBcJiMzNDtISUwgTUxDIFN1cHBvcnQgKG5lZWRlZCBmb3IgSElMIGlucHV0IGRldmljZXMpXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBIUF9TRENcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTM1PWNvbmZpZyBTRVJJT19QQ0lQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM3Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMzg6XHRkZXBlbmRzIG9uIEhBU19JT1BPUlRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzktXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE0Nj1jb25maWcgU0VSSU9fTUFDRVBTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1NHSSBPMiBNQUNFIFBTLzIgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE0ODpcdGRlcGVuZHMgb24gU0dJX0lQMzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDktXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE1Nj1jb25maWcgU0VSSU9fU0dJX0lPQzNcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgSU9DMyBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNTg6XHRkZXBlbmRzIG9uIFNHSV9NRkRfSU9DM1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1OS1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTY2PWNvbmZpZyBTRVJJT19MSUJQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjctXHR0cmlzdGF0ZSBcJiMzNDtQUy8yIGRyaXZlciBsaWJyYXJ5XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTY4Olx0ZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY5LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xOTE9Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTkzOlx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTQtXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIwMD1jb25maWcgU0VSSU9fQU1TX0RFTFRBXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjAxLVx0dHJpc3RhdGUgXCYjMzQ7QW1zdHJhZCBEZWx0YSAoRTMpIG1haWxib2FyZCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjAyOlx0ZGVwZW5kcyBvbiBNQUNIX0FNU19ERUxUQVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIwMy1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yMjQ9Y29uZmlnIFNFUklPX0FSQ19QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtBUkMgUFMvMiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjI2Olx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjctXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIzND1jb25maWcgU0VSSU9fQVBCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7R1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNjpcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19JT01FTVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNy1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjQ0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNDY6XHRkZXBlbmRzIG9uIEFSQ0hfTU1QIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNTUtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI1NjpcdGRlcGVuZHMgb24gSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjU3LVx0ZGVmYXVsdCBIWVBFUlZfVk1CVVNcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjY0PWNvbmZpZyBTRVJJT19TVU40SV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgQTEwIFBTLzIgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjY2Olx0ZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNzY6XHRkZXBlbmRzIG9uIEdQSU9MSUJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjIzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFVTRVJJT2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCwgbm90IHJlbGlhbnQgb24gYW55IG90aGVyIG9wdGlvbnMuIEhvd2V2ZXIsIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIHNvbWVob3cgbmVzdGVkIHdpdGhpbiB0aGUgYGlmIFNFUklPYCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGxpdHRsZSBjb25mdXNpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSByZWFkaW5nIHRoZSBLY29uZmlnIGZpbGUgY29ycmVjdGx5LgoKTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB3aGVyZSBgVVNFUklPYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWdgLiBBaCwgdGhlcmUgaXQgaXMsIHJpZ2h0IGF0IHRoZSB0YWlsIGVuZCBvZiB0aGF0IGZpbGUuIE9rYXksIG5vdyBsZXQmIzM5O3MgY29uZmlybSB0aGUgc3Vycm91bmRpbmcgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiwgaW5kZWVkLCBpdCYjMzk7cyBkZWZpbmVkIGluc2lkZSB0aGF0IGBpZiBTRVJJT2AgYmxvY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzaW50ZXJwcmV0aW5nIHRoZSBmaWxlIHN0cnVjdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBzcGVjaWZpYyByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBidWlsZHMgYW5kIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjg1PWNvbmZpZyBVU0VSSU9cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjk4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OTplbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0VSSU8gRHJpdmVyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbmF2aWdhdGluZyB0aGlzIGBzZXJpb2AgY29kZSBhbmQgSSBzZWUgd2UmIzM5O3JlIGRlZmluaXRlbHkgaW5zaWRlIGFuIGBpZiBTRVJJT2AgYmxvY2suIFRoYXQmIzM5O3MgZ29vZCwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy4gTm93LCB0aGUga2V5IGRlcGVuZGVuY3kgYXBwZWFycyB0byBiZSBvbiBib3RoIGBTRVJJT2AgYW5kIGBVU0VSSU9gIGJlaW5nIGRlZmluZWQuIEdvdCBpdC4KCk15IGZvY3VzIGlzIG5hcnJvd2luZyBkb3duIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgYW5kIHRoZXNlIHN5bWJvbCBuYW1lcyBhcmUganVtcGluZyBvdXQgYXQgbWU6IGBzZXJpb19yZWNvbm5lY3RgLCBgc2VyaW9fcmVzY2FuYCwgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLCBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyBhbmQgbWFuYWdlbWVudCBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZW0uCgpIYW5nIG9uLi4uIEkganVzdCBzcG90dGVkIGBzZXJpb19maW5kX2RyaXZlcmAgYmVpbmcgY2FsbGVkIGZyb20gYGRydmN0bF9zdG9yZWAuICBgZHJ2Y3RsX3N0b3JlYCwgYWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGEgc3lzZnMgYXR0cmlidXRlISBUaGF0IGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGlvbnNoaXAsIHNvIEkgaGF2ZSBhIGRpcmVjdCBwYXRoIGludG8gdGhlIGRyaXZlciYjMzk7cyBsb29rdXAgZnVuY3Rpb24uIEl0IG1lYW5zIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy4gCgpPa2F5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgb3RoZXIgc3VjaCBzeXNmcyBhdHRyaWJ1dGVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyPyAgVGltZSB0byBnbyBiYWNrIHRvIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgIGFuZCBodW50IGZvciBgREVWSUNFX0FUVFJgIGNhbGxzLiBUaGF0IHdpbGwgYmUgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBmb3Igc3lzZnMgaW50ZXJhY3Rpb24gcG9pbnRzIHRvIGV4cGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MDk9c3RhdGljIHNzaXplX3QgZmlybXdhcmVfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQxNS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MTY6c3RhdGljIERFVklDRV9BVFRSX1JPKHR5cGUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocHJvdG8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxODpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaWQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxOTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oZXh0cmEpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQyMC1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNlcmlvX2lkX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQzMy1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzQ6c3RhdGljIERFVklDRV9BVFRSX1JPKG1vZGFsaWFzKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzU6c3RhdGljIERFVklDRV9BVFRSX1dPKGRydmN0bCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM2OnN0YXRpYyBERVZJQ0VfQVRUUihkZXNjcmlwdGlvbiwgU19JUlVHTywgc2VyaW9fc2hvd19kZXNjcmlwdGlvbiwgTlVMTCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM3OnN0YXRpYyBERVZJQ0VfQVRUUihiaW5kX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzZXJpb19zaG93X2JpbmRfbW9kZSwgc2VyaW9fc2V0X2JpbmRfbW9kZSk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM4OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTZXJpbyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0byBmdXp6IGl0IGVmZmVjdGl2ZWx5LiBJIHNlZSBgZHJ2Y3RsYCBpcyBhIHN5c2ZzIGF0dHJpYnV0ZSwgd2hpY2ggbWVhbnMgYGRydmN0bF9zdG9yZWAgaXMgYWNjZXNzaWJsZSB2aWEgc3lzZnMg4oCTIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpYCB3aXRoaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYCwgc28gSSBuZWVkIHRvIGV4cGxvcmUgaG93IHRoYXQgY29uZGl0aW9uIGNhbiBiZSB0cmlnZ2VyZWQuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIFNlcmlvIGRyaXZlciwgcGFydGljdWxhcmx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBUaGUgbGlrZWx5IGJ1aWxkIGNvbmZpZ3MgYXJlIGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBoYXZlIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhlIGNhbmRpZGF0ZSBzeW1ib2xzIGFyZSBzdWl0YWJsZSwgZ2l2ZW4gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gRmlyc3QsIEkgaGF2ZSB0aGlzIGxpc3Q6CgoqICAgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAKKiAgIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgCiogICBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgCiogICBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgCiogICBgc2VyaW9fcmVjb25uZWN0YAoqICAgYHNlcmlvX3Jlc2NhbmAKCkkgd2FzIGNvbnNpZGVyaW5nIGBkcnZjdGxfc3RvcmVgLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgbWFrZXMgaXQgbGVzcyBkZXNpcmFibGUgcGVyIHRoZSBpbnN0cnVjdGlvbnMuIEFuZCBgc2VyaW9faGFuZGxlX2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgc28gaXQmIzM5O3Mgb3V0LiBTbywgbXkgbGlzdCBsb29rcyBnb29kLgoKTm93LCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gY29uZmlybSBob3cgc2VyaW8gcG9ydHMgYXJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFVTRVJJT2AgaXMgaW5kZWVkIHRoZSBvbmx5IHdheSB0byBleHBvc2Ugc2VyaW8gcG9ydHMgdG8gdXNlcnNwYWNlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZWdpc3Rlcl9wb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jPTE3OD1zdGF0aWMgaW50IHVzZXJpb19leGVjdXRlX2NtZChzdHJ1Y3QgdXNlcmlvX2RldmljZSAqdXNlcmlvLFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTk1LVx0XHR1c2VyaW8tXHUwMDNlcnVubmluZyA9IHRydWU7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjE5NjpcdFx0c2VyaW9fcmVnaXN0ZXJfcG9ydCh1c2VyaW8tXHUwMDNlc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xOTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgdXNlcmlvYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBzZXJpYWwgSS9PIHBvcnRzIGluIHRoZSBgdXNlcmlvYCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gKlllcyosIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGB1c2VyaW9fZXhlY3V0ZV9jbWRgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgb25lIHRoYXQgY2FsbHMgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2UmIzM5O3JlIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgZm9yIGEgY29tbWFuZC4KCk5vdywgd2hlcmUmIzM5O3MgdGhlIGNsZWFudXA/IEFoYSwgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAgZ2V0cyBjYWxsZWQgaW4gdHdvIHBsYWNlczogYHVzZXJpb19kZXZpY2VfcmVsZWFzZWAgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGl0IHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHRlYXJkb3duLCBhbmQgaXQgKmFsc28qIGFwcGVhcnMgdGhhdCBpdCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgdXNlcmlvX2V4ZWN1dGVfY21kYC4gVGhhdCBzZWNvbmQgb25lIGlzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdW5yZWdpc3RyYXRpb24gaGFwcGVucyBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgY29udGV4dCB3aGVyZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBlYXJseSwgb3IgaGFuZGxlIGFuIGVycm9yIGNvbmRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBkdWFsIGNhbGwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgcmFjZSBjb25kaXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHdoeSB1bnJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBjYWxsZWQgaW4gYHVzZXJpb19leGVjdXRlX2NtZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYz05Nj1zdGF0aWMgaW50IHVzZXJpb19jaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xMDEtXHRcdC8qXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjEwMjpcdFx0ICogRG9uJiMzOTt0IGZyZWUgdGhlIHNlcmlvIHBvcnQgaGVyZSwgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KClcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTAzLVx0XHQgKiBkb2VzIGl0IGZvciB1cy5cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTA0LVx0XHQgKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTA1Olx0XHRzZXJpb191bnJlZ2lzdGVyX3BvcnQodXNlcmlvLVx1MDAzZXNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTA2LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHNlcmlvYCBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIGBVU0VSSU9gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IHRvb2wgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBhcmVhLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHR3byBrZXkgY29uZmlndXJhdGlvbnM6IGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkga25vdyBJIG5lZWQgdG8gdGFyZ2V0IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gVGhvc2Ugd2lsbCBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBzZXJpby5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIFlvdSBuZXZlciBrbm93IHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBsdXJraW5nLiBBIHRob3JvdWdoIHJldmlldyB3aWxsIHJlYWxseSBoZWxwIG1lIGlkZW50aWZ5IGFueSBibGluZCBzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjU4PXZvaWQgc2VyaW9fcmVjb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjYyOkVYUE9SVF9TWU1CT0woc2VyaW9fcmVjb25uZWN0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2OD12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9Njc4PXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY4NC19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njg1OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODYtXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY5MD12b2lkIHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy03MDAtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjcwMTpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAyLVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz03ODY9aW50IF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjItfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyMzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODI1PXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjg0NjpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDctXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk0Mj1pbnQgc2VyaW9fb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk1MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6OTUyOkVYUE9SVF9TWU1CT0woc2VyaW9fb3Blbik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTUzLVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NTU9dm9pZCBzZXJpb19jbG9zZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjEtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk2MjpFWFBPUlRfU1lNQk9MKHNlcmlvX2Nsb3NlKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTY0PWlycXJldHVybl90IHNlcmlvX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NzgtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk3OTpFWFBPUlRfU1lNQk9MKHNlcmlvX2ludGVycnVwdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTgwLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk4MT1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgc2VyaW9fYnVzID0ge1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05OTItfTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5OTM6RVhQT1JUX1NZTUJPTChzZXJpb19idXMpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MDcKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTZXJpbyBTdWJzeXN0ZW0gQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgc2VyaW8gYnVnIGZpeC4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgX19zZXJpb19yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAsIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX3Jlc2NhbmAuIEkgaW5pdGlhbGx5IHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGBzZXJpb19pbnRlcnJ1cHRgLCBgc2VyaW9fb3BlbmAsIGBzZXJpb19jbG9zZWAgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2NoaWxkX3BvcnRgIGJ1dCBgc2VyaW9faW50ZXJydXB0YCBpcyB0cmlnZ2VyZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3QgZWZmZWN0aXZlIGZvciB0cmlnZ2VyaW5nIHRoaXMgc3BlY2lmaWMgcmFjZSBjb25kaXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIHJlY29ubmVjdCBwYXRod2F5cy4KCkkgcmVjb25maXJtZWQgdGhhdCB0aGUgYFVTRVJJT2AgZHJpdmVyIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gd29ycnkgYWJvdXQ7IHNpbXBsaWZ5aW5nIHRoaW5ncy4KClRoZSBrZXkgdG8gdGhpcyBmaXggbGllcyBpbiBgc2VyaW9fZmluZF9kcml2ZXJgLCBhbmQgdGhlIGJ1ZyBpcyB0aGF0IGBkZXZpY2VfYXR0YWNoYCBjYW4gYmUgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQgaXMgbm8gbG9uZ2VyIHJlZ2lzdGVyZWQuIEkgY29uZmlybWVkIGBzZXJpb19maW5kX2RyaXZlcmAgaXMgY2FsbGVkIGZyb20gYHNlcmlvX2hhbmRsZV9ldmVudGAgKHdvcmtxdWV1ZSksIGBkcnZjdGxfc3RvcmVgIChzeXNmcyksIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAgKHdvcmtxdWV1ZS9zeXNmcykgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgKHN5c2NhbGwpLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhlc2UgYXJlIHRoZSBtYWluIHdheXMgZGV2aWNlcyB3aWxsIGJlIGF0dGFjaGVkIGFuZCBkZXRhY2hlZC4gVGhlIHJvb3QgY2F1c2UgaXMgbGlrZWx5IGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBkdXJpbmcgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgb3IgcmVjb25uZWN0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9uLgoKVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgYFNFUklPYCBhbmQgYFVTRVJJT2AgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBtZW50aW9uZWQgZWFybGllciB0byB0cmlnZ2VyIHRoZSByYWNlIGNvbmRpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklPJiMzNDssCiAgICAmIzM0O1VTRVJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fcmVjb25uZWN0JiMzNDssCiAgICAmIzM0O3NlcmlvX3Jlc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRVJJTyYjMzQ7LAogICAgJiMzNDtVU0VSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NlcmlvX3JlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9wb3J0JiMzNDssCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgICAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgICAmIzM0O3NlcmlvX3JlY29ubmVjdCYjMzQ7LAogICAgJiMzNDtzZXJpb19yZXNjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKQEAgLTEwOSw2ICYjNDM7MTA5LDkgQEAgc3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKIAlpbnQgZXJyb3I7CiAKJiM0MzsJaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVycm9yID0gZGV2aWNlX2F0dGFjaCgmYW1wO3NlcmlvLSZndDtkZXYpOwogCWlmIChlcnJvciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJvciAhPSAtRVBST0JFX0RFRkVSKQogCQlkZXZfd2FybigmYW1wO3NlcmlvLSZndDtkZXYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgwCgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlvIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYC4gVGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayBpbiBgc2VyaW9fZmluZF9kcml2ZXJgOiBgaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKSByZXR1cm47YC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5Ki4gSXQmIzM5O3MgYSBwcm90ZWN0aW9uIGFnYWluc3QgY2FsbGluZyBgZGV2aWNlX2F0dGFjaGAgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZS4gUmlnaHQsIHRoaXMgbWFrZXMgc2Vuc2UgLSB0aGF0IHdvdWxkIGJlIGEgY2xhc3NpYyByZWNpcGUgZm9yIHByb2JsZW1zIOKAkyB1c2UtYWZ0ZXItZnJlZSwgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyBsaWtlIHRoYXQuIEl0IGNvdWxkIGV2ZW4gYmUgc29tZXRoaW5nIGxlc3Mgc2V2ZXJlLCBidXQgc3RpbGwgYmFkLCBsaWtlIGEgd2FybmluZyBpbiB0aGUga2VybmVsIGxvZy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzICppc24mIzM5O3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgbmV3IGNoZWNrIGlzIGFsbCBhYm91dCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXMgdGhlIGRldmljZSByZWFkeT8gSXMgaXQgcmVnaXN0ZXJlZD8gYGRldmljZV9pc19yZWdpc3RlcmVkYCBpcyBhIGdvb2Qgc2lnbiwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBjaGVja2luZyBgZGV2LSZndDtwYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGluIG15IGhlYWQgLSB0aGlzIGlzbiYjMzk7dCBhYm91dCBLTVNBTi10eXBlIGlzc3VlcyB0aGF0IHdvdWxkIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB3ZSBoYWQgYSBVQUYsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQsIEtBU0FOLCBMT0NLREVQLCBvciBzaW1pbGFyIHdvdWxkIGhhdmUgc29tZXRoaW5nIHRvIHNheSBhYm91dCB0aGlzLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcy4KClNvLCBJ4oCZbSBjb25maWRlbnQgaGVyZS4gVGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlLCBjaGVja2luZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdoaWNoIG1ha2VzIHN1cmUgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZzZXJpby1cdTAwM2VkZXYpYCBiZWZvcmUgY2FsbGluZyBgZGV2aWNlX2F0dGFjaCgpYCBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgaXMgYSBsaWZlY3ljbGUvc3RhdGUgbWFuYWdlbWVudCBmaXggdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZSwgd2hpY2ggdHlwaWNhbGx5IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHN0YXRlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjM2LjQ1OTczNzUyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjUzNzQ5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFUklPXCIsXG4gICAgXCJVU0VSSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX3BvcnRcIixcbiAgICBcInNlcmlvX3VucmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwiX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyXCIsXG4gICAgXCJzZXJpb19yZWNvbm5lY3RcIixcbiAgICBcInNlcmlvX3Jlc2NhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2c2VyaW8tXFx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNi40NTk3NDU0MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzgzMjM1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xcbmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXFxuKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXFxuQEAgLTEwOSw2ICsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuK1xcdGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnJvciA9IGRldmljZV9hdHRhY2goXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXFxuIFxcdFxcdGRldl93YXJuKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNy44OTg5MTk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODgxMTc4NTA3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSU9cIixcbiAgICBcIlVTRVJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3JlY29ubmVjdFwiLFxuICAgIFwic2VyaW9fcmVzY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG5pbmRleCA1NGRkMjYyNDliMDI3Li5jMjRlNDMxYWY2Nzg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG4rKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbkBAIC0xMDksNiArMTA5LDkgQEAgc3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbylcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXG4rXHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpXG4rXHRcdHJldHVybjtcbitcbiBcdGVycm9yID0gZGV2aWNlX2F0dGFjaChcdTAwMjZzZXJpby1cdTAwM2VkZXYpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJvciAhPSAtRVBST0JFX0RFRkVSKVxuIFx0XHRkZXZfd2FybihcdTAwMjZzZXJpby1cdTAwM2VkZXYsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNy44OTg5MjExNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjExNzIyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNFUklPIERyaXZlciBSZWdpc3RyYXRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdGhhdCdzIGFkZGVkIGEgY2hlY2sgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYC4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgZ3VhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIHdpdGggYGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIdWgsIHRoYXQncyBpbnRlcmVzdGluZy4gV2h5IGFyZSB3ZSBiYWlsaW5nIG91dCBpZiB0aGUgZGV2aWNlIGlzbid0IHJlZ2lzdGVyZWQ/XCIgSXQncyBkZWZpbml0ZWx5IGFuIGF0dGVtcHQgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gb3IgaW1wcm9wZXIgc3RhdGUgaGFuZGxpbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgc2VyaW9fZmluZF9kcml2ZXJgICphY3R1YWxseSogZG9lcy4gV2hhdCdzIGl0cyBwdXJwb3NlPyBJcyBpdCByZXNwb25zaWJsZSBmb3IgcHJvYmluZyBvciBiaW5kaW5nIGRyaXZlcnMgdG8gU0VSSU8gZGV2aWNlcz8gQW5kIGp1c3QgYXMgaW1wb3J0YW50bHksIHdoZXJlIGlzIGl0IGJlaW5nICpjYWxsZWQqIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhpcyBjaGVjayBpcyBiZWluZyBoaXQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS4gSXMgdGhpcyBhIGNvbW1vbiBpc3N1ZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIGVkZ2UgY2FzZSB0aGF0IHNvbWVvbmUgaGFzIHNlZW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBmb3IgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiB0byBvY2N1ciBhc3luY2hyb25vdXNseS4gTGV0J3MgZ2V0IGNyYWNraW5nLCBsZXQncyBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDA6NDEuNjIwMDk1OTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njk0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX2ZpbmRfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODI9c3RhdGljIGludCBzZXJpb19iaW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoxMDg6c3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbylcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA5LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDgtXFx0XFx0XFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMDk6XFx0XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIxMC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTc9c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OS1cXHRcXHRcXHRzZXJpb19kaXNjb25uZWN0X3BvcnQoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNzA6XFx0XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNzEtXFx0XFx0XFx0c2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc2VyaW8sIFNFUklPX1JFU0NBTl9QT1JUKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NTk9c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU2NC1cXHRcXHRzZXJpb19kaXNjb25uZWN0X3BvcnQoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NjU6XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjYtXFx0fVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyNT12b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgzMTpcXHRkcnYtXFx1MDAzZW1hbnVhbF9iaW5kID0gdHJ1ZTtcXHQvKiBzbyBzZXJpb19maW5kX2RyaXZlciBpZ25vcmVzIGl0ICovXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMi1cXHRzZXJpb19yZW1vdmVfcGVuZGluZ19ldmVudHMoZHJ2KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzctXFx0XFx0XFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODM4OlxcdFxcdFxcdHNlcmlvX2ZpbmRfZHJpdmVyKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODM5LVxcdFxcdFxcdC8qIHdlIGNvdWxkJ3ZlIGRlbGV0ZWQgc29tZSBwb3J0cywgcmVzdGFydCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0MS42NjY3OTc3OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA4MTEzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIERldmljZSBSZWdpc3RyYXRpb24gQnVnKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaGAgd2FzIGJlaW5nIGNhbGxlZCBvbiBhIGRldmljZSB0aGF0IHdhc24ndCBwcm9wZXJseSByZWdpc3RlcmVkIGZpcnN0LiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGFuZCBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvciDigJMga2VybmVsIHBhbmljcywgZGF0YSBjb3JydXB0aW9uLCB0aGUgd29ya3MuIFRoZSBmaXggaXMgYSBzaW1wbGUgY2hlY2ssIHZlcmlmeWluZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIGJlZm9yZSBjYWxsaW5nIHRoZSBhdHRhY2htZW50IGZ1bmN0aW9uLiBBIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5LCBidXQgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgc2VyaW8uY2AgY29uZmlndXJhdGlvbiBhbmQgc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsIGlucHV0IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0NC44NzQ5MTUyODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0MTI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlLTctXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19TRVJJTylcXHRcXHQrPSBzZXJpby5vXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZS05LW9iai0kKENPTkZJR19TRVJJT19JODA0MilcXHQrPSBpODA0Mi5vXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19TRVJJT19SQVcpXFx0XFx0Kz0gc2VyaW9fcmF3Lm9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19TRVJJT19BTVNfREVMVEEpXFx0Kz0gYW1zX2RlbHRhX3NlcmlvLm9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19TRVJJT19BTFRFUkFfUFMyKVxcdCs9IGFsdGVyYV9wczIub1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfU0VSSU9fR1BJT19QUzIpXFx0Kz0gcHMyLWdwaW8ub1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1VTRVJJTylcXHRcXHQrPSB1c2VyaW8ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0NC45NDczMzQyMzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMTEzODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VSSU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgYENPTkZJR19TRVJJT2AuIFJpZ2h0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgaW50byB0aGUgU2VyaWFsIEkvTyBzdWJzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYHNlcmlvX2ZpbmRfZHJpdmVyYCAtIEknbGwgZmluZCB0aGF0IGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgLiBBaCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBuYXJyb3dzIGRvd24gd2hlcmUgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgdGVsbHMgbWUgaXQncyBjYWxsZWQgYnkgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBkcnZjdGxfc3RvcmVgLCBgc2VyaW9fcmVjb25uZWN0X3BvcnRgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IHBvaW50cyB0byBjb25zaWRlci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2VyaW9faGFuZGxlX2V2ZW50YCBpbiBtb3JlIGRldGFpbDsgaXQgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2FsbGVyIGFzIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBJL08gZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjQ4LjcwNzQ1MTM5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19oYW5kbGVfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xNjY9c3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHModm9pZCAqb2JqZWN0LFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE4OC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MTg5OnN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5MC17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjI1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjY6c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjQ4Ljc1NTIyMDMzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzM3MDExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXb3JrcXVldWUgQ29udGV4dCoqXG5cbk9rYXksIHNvIGBzZXJpb19ldmVudF93b3JrYCBpcyBhIHdvcmtxdWV1ZS4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFzeW5jaHJvbm91cyBhbmQgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGRlZmVycmVkIHByb2Nlc3Npbmcgb2YgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGBzZXJpb2Agc3Vic3lzdGVtLiBNeSBtZW50YWwgbW9kZWwga2lja3MgaW4g4oCTIHRoaXMgaW1wbGllcyBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBwb3NzaWJseSBldmVuIGEgcG9sbGluZyBtZWNoYW5pc20gdGhhdCBldmVudHVhbGx5IGZ1bm5lbHMgaW50byB0aGlzIHF1ZXVlLiBOb3csIGxldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgZHJ2Y3RsX3N0b3JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICppdCogaW50ZXJhY3RzIHdpdGggdGhpcyB3b3JrcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo1MS40Mjg5MjQyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTM3MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRydmN0bF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1MT1zdGF0aWMgc3NpemVfdCBleHRyYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNTYtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1NzpzdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjUxLjQ3ODA2ODUwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc1Mzc4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkcnZjdGxfc3RvcmVgIEF0dHJpYnV0ZSoqXG5cbk9rYXksIHNvIGBkcnZjdGxfc3RvcmVgIGlzIHBvcHBpbmcgdXAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoYXQncyBhIHN5c2ZzIGF0dHJpYnV0ZS5cIiBXZSBrbm93IGhvdyB0aGF0IHdvcmtz4oCUaXQncyBhIGNvbnRyb2wgaW50ZXJmYWNlIGV4cG9zZWQgdGhyb3VnaCB0aGUgdmlydHVhbCBmaWxlc3lzdGVtLCBsaWtlbHkgdXNlZCBmb3IgZGV2aWNlIGRyaXZlciBtYW5hZ2VtZW50LiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoZSByZWxldmFudCBkcml2ZXIgdXNlcyBvciByZWFjdHMgdG8gdGhhdCBhdHRyaWJ1dGUgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBoYXJkd2FyZS4gUmlnaHQgbm93IEkgYW0gdGhpbmtpbmcgdGhhdCB0aGlzIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdXNlZCB0byBjb250cm9sIHRoZSBkcml2ZXIncyBvcGVyYXRpb24gb3IgYmVoYXZpb3IuXG5cbkdpdmVuIHRoZSBjb21tb24gcGF0dGVybnMsIG15IG5leHQgc3RlcCBpcyBhbG1vc3QgcmVmbGV4OiBcIkxldCdzIGNoZWNrIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAuXCIgSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlLCBwb3RlbnRpYWxseSBpZiB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIFBTLzIgZHJpdmVyLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0J3MgYSBwb2ludGVyIHRvIHNvbWUgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZWx5IGJlY2F1c2UgdGhpcyBhdHRyaWJ1dGUgaXMgY29udHJvbGxpbmcgZHJpdmVyIGJlaGF2aW9yLCBpdCB3b3VsZCBsaWtlbHkgYmUgbmVjZXNzYXJ5IHRvIGhhdmUgc29tZSBmdW5jdGlvbiB0byByZWNvbm5lY3QgdGhlIHBvcnQuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB0aGVuIHRoaXMgYXR0cmlidXRlJ3MgdXNlIHdpbGwgbm90IGJlIHRvIHJlLWNvbm5lY3QgdGhlIHBvcnQsIGFuZCB0aGlzIHdpbGwgYmUgYSBkZWFkIGVuZCBmb3IgbWUuIFdpdGggdGhlc2UgdGhvdWdodHMgaW4gbWluZCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjU1LjY1MzQ0OTUyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDY2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVjb25uZWN0X3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zND1zdGF0aWMgdm9pZCBzZXJpb19hZGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzYtc3RhdGljIHZvaWQgc2VyaW9fZGlzY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTE4OT1zdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwMy1cXHRcXHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMDQ6XFx0XFx0XFx0c2VyaW9fcmVjb25uZWN0X3BvcnQoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01MjY9c3RhdGljIHZvaWQgc2VyaW9fZGVzdHJveV9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTU4LSAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NTk6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjAte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTU3NT1zdGF0aWMgdm9pZCBzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShzdHJ1Y3Qgc2VyaW8gKnJvb3QpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgwLVxcdGRvIHtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTgxOlxcdFxcdGVycm9yID0gc2VyaW9fcmVjb25uZWN0X3BvcnQocyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4Mi1cXHRcXHRpZiAoIWVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjU1LjcwMjM2MTcyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUxNTk4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU2VyaW8gRHJpdmVyIERpc2Nvbm5lY3QgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZGlzY29ubmVjdCBmbG93IGZvciB0aGlzIFNlcmlvIGRyaXZlciBhbmQgaXQgbG9va3MgbGlrZSBgc2VyaW9fcmVjb25uZWN0X3BvcnRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gd2F0Y2guIEkgc2VlIGl0J3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgc2VyaW9faGFuZGxlX2V2ZW50YCBhbmQgYHNlcmlvX3JlY29ubmVjdF9zdWJ0cmVlYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNob3dpbmcgbWUgdGhlIGxpa2VseSBwb2ludHMgb2YgZW50cnkgZm9yIHJlY29ubmVjdCBhdHRlbXB0cyBhbmQgdGhvc2UgZXZlbnRzIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGVtLiBOb3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseSAqdW5yZWdpc3RlcnMqIHRoZSBkcml2ZXIgYW5kIGlmIHRoYXQgZnVuY3Rpb24gaXMgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3RzIHRvIHNlZSB3aGF0IGlzIGxpa2VseSBpbmZsdWVuY2luZyB0aGUgcmVjb25uZWN0LiBMZXQncyBkaWcgaW50byBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nLiBIb3BlZnVsbHksIGl0IHdpbGwgdGVsbCBtZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo1OC44NTM5NjI2MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQ4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODIzPUVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyNTp2b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4NDY6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDA6NTguOTAxMDE2OTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDcxMTM0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIGlzc3Vlcy4gTGV0J3MgdHJhY2UgYmFjay4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBzZXJpb19yZWNvbm5lY3RgIGZ1bmN0aW9uLCBzaW5jZSByZWNvbm5lY3RzIGFyZSBvZnRlbiBpbnZvbHZlZCB3aGVuIGRyaXZlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCBkdXJpbmcgaG90cGx1ZyBvciBzeXN0ZW0gcmVzdGFydCBzY2VuYXJpb3MuIEFuZCBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBTRVJJT19SRUNPTk5FQ1RfUE9SVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IGhvdyB0aGUgZHJpdmVyIG1pZ2h0IGludGVyYWN0IHdpdGggdW5yZWdpc3RyYXRpb24gb3Igb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIGZyb20gYHNlcmlvX3JlY29ubmVjdGAgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBUaGlzIGlzIHRoZSByaWdodCBzdGFydGluZyBwb2ludCwgSSB0aGluay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjAyLjE0ODEzMjgxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzOTE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVjb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzQ9c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2LXN0YXRpYyB2b2lkIHNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Mzc6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM4LXN0YXRpYyB2b2lkIHNlcmlvX2F0dGFjaF9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MD1zdGF0aWMgaW50IHNlcmlvX2Nvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDc6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDMtXFx0XFx0Y2FzZSBTRVJJT19SRUNPTk5FQ1RfUE9SVDpcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjA0OlxcdFxcdFxcdHNlcmlvX3JlY29ubmVjdF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEyLVxcdFxcdGNhc2UgU0VSSU9fUkVDT05ORUNUX1NVQlRSRUU6XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIxMzpcXHRcXHRcXHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShldmVudC1cXHUwMDNlb2JqZWN0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1Nz1zdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzY2LVxcdFxcdH0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBcXFwicmVjb25uZWN0XFxcIiwgY291bnQpKSB7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM2NzpcXHRcXHRcXHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OC1cXHRcXHR9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgXFxcInJlc2NhblxcXCIsIGNvdW50KSkge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTUyNj1zdGF0aWMgdm9pZCBzZXJpb19kZXN0cm95X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NTgtICovXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU1OTpzdGF0aWMgaW50IHNlcmlvX3JlY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU2MC17XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU2MTpcXHRpbnQgZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTYyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3NC0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTc1OnN0YXRpYyB2b2lkIHNlcmlvX3JlY29ubmVjdF9zdWJ0cmVlKHN0cnVjdCBzZXJpbyAqcm9vdClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTc2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01ODAtXFx0ZG8ge1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1ODE6XFx0XFx0ZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfcG9ydChzKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgyLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTY9RVhQT1JUX1NZTUJPTChzZXJpb19yZXNjYW4pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1ODp2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTkte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY2MjpFWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDIuMTk3NTI5MTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mjk0Mzk3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIHRoZSBTRVJJTyBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gaXNzdWUgaW4gdGhlIFNFUklPIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBzZXJpb19yZWNvbm5lY3RgIGlzIGV4cG9ydGVkLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrOiBgIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldilgIHdpdGhpbiBgc2VyaW9fZmluZF9kcml2ZXJgLiBUaGlzIHNlZW1zIHRvIGJlIGEgZGVmZW5zaXZlIG1lYXN1cmUsIGFpbWluZyB0byBwcmV2ZW50IGBzZXJpb19maW5kX2RyaXZlcmAgZnJvbSBiZWluZyBjYWxsZWQgb24gYSBkZXZpY2UgdGhhdCdzIGFscmVhZHkgYmVlbiB1bnJlZ2lzdGVyZWQuIE1ha2VzIHNlbnNlLlxuXG5UaGUgY29udGV4dCBpcyB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgZ2V0dGluZyBjYWxsZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBkZXZpY2UgbWlnaHQgbm90IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW55bW9yZSDigJMgc3lzZnMgKGBkcnZjdGxfc3RvcmVgKSwgYSB3b3JrcXVldWUgKGBzZXJpb19oYW5kbGVfZXZlbnRgKSwgYW5kIHBvdGVudGlhbGx5IGR1cmluZyBwb3J0IHJlY29ubmVjdGlvbiAoYHNlcmlvX3JlY29ubmVjdF9wb3J0YCksIG9yIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiAoYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCkuIElmIHRoZSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdpbGwgcmlnaHRseSByZXR1cm4gZmFsc2UuXG5cblRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBmdXp6aW5nIHdvdWxkIGJlIGEgZ29vZCBpZGVhLiBUaGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCBpcyBgU0VSSU9gLCBvYnZpb3VzbHkuIEdpdmVuIHRoYXQgYHNlcmlvX2ZpbmRfZHJpdmVyYCBpcyBzdGF0aWMsIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBTbywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY2FsbGVycy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgZHJ2Y3RsX3N0b3JlYCwgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgYW5kIGBzZXJpb19yZWNvbm5lY3RgLiBPaCwgcmlnaHQsIGBkcnZjdGxfc3RvcmVgIGlzIHN5c2ZzLCBhbmQgYHNlcmlvX2hhbmRsZV9ldmVudGAgaXMgYSB3b3JrcXVldWUuIE9rYXkuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSG1tLCBsZXQncyBzZWUuIEkgaGF2ZSBgc2VyaW9fcmVzY2FuYCwgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX2ludGVycnVwdGAuXG5cbkFscmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBzZXJpb19yZXNjYW5gIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDguNjI2OTcxODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX3Jlc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTYxNz1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTEtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1Mjp2b2lkIHNlcmlvX3Jlc2NhbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NjpFWFBPUlRfU1lNQk9MKHNlcmlvX3Jlc2Nhbik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1Ny1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NjQ9aXJxcmV0dXJuX3Qgc2VyaW9faW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTcyLVxcdGlmICghZGZsIFxcdTAwMjZcXHUwMDI2IGRldmljZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2KSkge1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NzM6XFx0XFx0c2VyaW9fcmVzY2FuKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTc0LVxcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDguNjc2NzQ0OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MjE0MDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVucmVnaXN0cmF0aW9uIG9mIGEgUFMvMiBwb3J0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTZXJpYWwgSS9PIChTRVJJTykgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgd2UndmUgYWxyZWFkeSBnb3R0ZW4gcGFzdCB0aGUgZHJpdmVyIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcGhhc2UuIE5vdywgdW5yZWdpc3RyYXRpb24uLi4gdGhhdCBtZWFucyB3ZSdyZSBsaWtlbHkgZWl0aGVyOlxuXG4qICAgU2h1dHRpbmcgZG93biBhIGRldmljZSBncmFjZWZ1bGx5LlxuKiAgIEhhbmRsaW5nIGEgaG90LXVucGx1ZyBldmVudCAobGVzcyBsaWtlbHksIGJ1dCBpbXBvcnRhbnQgdG8gY29uc2lkZXIpLlxuKiAgIENsZWFuaW5nIHVwIGFmdGVyIGFuIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiogICBPciBtYXliZSwgaW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8sIHJlLWFzc2lnbmluZyB0aGUgcG9ydCB0byBhIGRpZmZlcmVudCBkZXZpY2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbG9ja3MsIG9idmlvdXNseS4gV2UncmUgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gV2hhdCBtdXRleGVzIG9yIHNwaW5sb2NrcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0J3MgdGhlIGFjcXVpc2l0aW9uIG9yZGVyPyBJIG5lZWQgdG8gYmUgc3VyZSB3ZSBhdm9pZCBhbnkgZGVhZGxvY2tzLiBNZW1vcnkgbWFuYWdlbWVudCBpcyB0aGUgbmV4dCBmbGFnIEknbSBnb2luZyB0byBmb2xsb3cuIEFyZSB3ZSBkZWFsbG9jYXRpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIHRoYXQgY291bGQgbGVhZCB0byBhIGNyYXNoIGxhdGVyPyBUaGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGhlcmUuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHBhcnRpY3VsYXJseSBpZiB0aGUgcG9ydCBoYWQgYW4gaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBpdC4gQXJlIHdlIGRpc2FibGluZyBpbnRlcnJ1cHRzIGNvcnJlY3RseSBiZWZvcmUgZnJlZWluZyByZXNvdXJjZXM/IFRoZSB0aW1pbmcgb2YgdGhhdCBpcyBhbHdheXMgY3J1Y2lhbC4gQW5kIG9mIGNvdXJzZSwgSSdtIGFscmVhZHkgd29uZGVyaW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBwb3J0LlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB1bnJlZ2lzdHJhdGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IEhvdyBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGV4cGVjdGVkIHRvIGhhbmRsZSBpdD8gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHBhdGggaXMgZXNzZW50aWFsIGZvciBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgY2FsbHNpdGVzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MTIuOTQ4ODg4MDc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb191bnJlZ2lzdGVyX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NzM9RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Ny0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njc4OnZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3OS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg0LX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njg1OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToxMi45OTc2NjMyNzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMTA1MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0aGlua2luZywgXCJPa2F5LCB3ZSdyZSBsb29raW5nIGF0IGBzZXJpb19yZWdpc3Rlcl9wb3J0YC4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkcml2ZXItbGV2ZWwgZnVuY3Rpb24/IFBhcnQgb2YgYSBicm9hZGVyIGZyYW1ld29yaz8gV2hhdCdzIHRoZSAqd2h5KiBiZWhpbmQgaXRzIHVzZT9cIiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHB1bGxpbmcgdXAgYXNzb2NpYXRlZCBzdHJ1Y3RzOiBgc2VyaW9fcG9ydGAsIGBzZXJpb19kcml2ZXJgLCBhbnkgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgKGxpa2UgYG11dGV4ZXNgIG9yIGBzcGlubG9ja3NgKS5cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkL3JlZ2lzdGVyZWQgd2l0aCB0aGlzIGNhbGw/IElzIHRoaXMgYSBzaW1wbGUgcmVnaXN0cmF0aW9uIG9yIGFyZSB3ZSBtYW5hZ2luZyByZXNvdXJjZXMgdG9vPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBNZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCByZXNvdXJjZSBjbGFpbWluZywgYWxsIGNvbWUgdG8gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpiZWluZyogcmVnaXN0ZXJlZCBhbmQgdGhlIG92ZXJhbGwgc2V0dXAuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQsIGFuZCBjb25maXJtIHRoZSByZWxldmFudCBjYWxsYmFja3MgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGlmIHRoZSBpbnRlcmZhY2UgaXMgYmxvY2tpbmcgb3IgYXN5bmNocm9ub3VzIHRvbyAtIGFuZCBpZiBhbnkgc3BlY2lmaWMgSVJRLWhhbmRsaW5nIG9yIERNQSBzZXR1cCBpcyByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjE2LjM5ODcxNzY4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2Mj1FWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjY3LSAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Njg6dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2OS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjczOkVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToxNi40NDcwMTI2OTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTkxODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzZXJpb19yZWdpc3Rlcl9kcml2ZXJgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24uIFRoYXQncyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgaG93IGEgbmV3IFNlcklPIGRyaXZlciBpbnRlZ3JhdGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VySU8gY29yZS4gVGhpbmdzIGxpa2UgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBkZXZpY2UgcHJvYmluZywgYW5kIG9mIGNvdXJzZSwgdGhlIGRldmljZSBzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBhbGwgY3J1Y2lhbCBwaWVjZXMuIExldCdzIHNlZSBpZiB0aGlzIG9uZSBpcyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIGRyaXZlcidzIHByZXNlbmNlLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGF0IGl0J3MgZ3JhY2VmdWxseSBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjAuMDI2OTMyOTQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4MjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz03NzY9c3RhdGljIHZvaWQgc2VyaW9fYXR0YWNoX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo3ODY6aW50IF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy03ODcte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgyMi19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyMzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToyMC4wNzQyMTg4MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NjUwODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTZXJpbyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQga2VlcHMgY2lyY2xpbmcgYXJvdW5kIHRoZXNlIGBzZXJpb2Agc3ltYm9sczogYHNlcmlvX3JlY29ubmVjdGAsIGBzZXJpb19yZXNjYW5gLCBgX19zZXJpb19yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAsIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY29yZSBmb2N1cyBwb2ludHMgaGVyZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBkcml2ZSB0aGUgaW50ZXJhY3Rpb24uXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHNvbGlkaWZ5LiBUaGF0IGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24sIEkganVzdCByZWFsaXplZCB0aGF0IGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCB0aGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgc2VyaW9fcXVldWVfZXZlbnRgLiBBaCwgbm93IHRoYXQgSSBoYXZlIHRoaXMgY29ubmVjdGlvbiwgdGhlIHBpY3R1cmUgYmVjb21lcyBhIGxvdCBjbGVhcmVyLiBUaGVzZSBldmVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXN5bmNocm9ub3VzbHksIGVmZmljaWVudGx5LiBUaGUgd29ya2Zsb3cgaXMgY3JpdGljYWwgdG8gdGhlIGZ1bmN0aW9uYWxpdHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjQuNDcwNzMwMTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19xdWV1ZV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTIyNj1zdGF0aWMgREVDTEFSRV9XT1JLKHNlcmlvX2V2ZW50X3dvcmssIHNlcmlvX2hhbmRsZV9ldmVudCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjI4OnN0YXRpYyBpbnQgc2VyaW9fcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lcixcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjI5LVxcdFxcdFxcdCAgICAgZW51bSBzZXJpb19ldmVudF90eXBlIGV2ZW50X3R5cGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1My17XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NDpcXHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVTQ0FOX1BPUlQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTUtfVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY1OD12b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTkte1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjA6XFx0c2VyaW9fcXVldWVfZXZlbnQoc2VyaW8sIE5VTEwsIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjYxLX1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02Njg9dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcwLVxcdHNlcmlvX2luaXRfcG9ydChzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY3MTpcXHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgb3duZXIsIFNFUklPX1JFR0lTVEVSX1BPUlQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NzItfVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODEzLVxcdFxcdGRydi1cXHUwMDNlbWFudWFsX2JpbmQgPSBmYWxzZTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODE0OlxcdFxcdGVycm9yID0gc2VyaW9fcXVldWVfZXZlbnQoZHJ2LCBOVUxMLCBTRVJJT19BVFRBQ0hfRFJJVkVSKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODE1LVxcdFxcdGlmIChlcnJvcikge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTkwOD1zdGF0aWMgaW50IHNlcmlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI2LVxcdFxcdCAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5Mjc6XFx0XFx0c2VyaW9fcXVldWVfZXZlbnQoc2VyaW8sIE5VTEwsIFNFUklPX1JFQ09OTkVDVF9QT1JUKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjQuNTE4NTQ1OTE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAyMTUzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJpbyBEcml2ZXIgTG9hZGluZyBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGRyaXZlcnMgZ2V0IGNvbm5lY3RlZCB0byBzZXJpYWwgZGV2aWNlcyBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc2VyaW9gIHN1YnN5c3RlbS4gSXQgc2VlbXMgbGlrZSB0aGUgYHNlcmlvX2ZpbmRfZHJpdmVyYCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHRoaXMgcHJvY2Vzcy4gSSd2ZSBub3RpY2VkIHRoYXQgaXQncyBpbnZva2VkIGluIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MuIEZpcnN0LCBpdCBnZXRzIGNhbGxlZCB3aGVuIGhhbmRsaW5nIGV2ZW50cyByZWxhdGVkIHRvIGRldmljZSBjaGFuZ2VzIC0gYFNFUklPX1JFU0NBTl9QT1JUYCwgYFNFUklPX1JFQ09OTkVDVF9QT1JUYCwgb3IgYFNFUklPX0FUVEFDSF9EUklWRVJgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHNpdHVhdGlvbnMgd2hlcmUgd2UnZCBuZWVkIHRvIGZpbmQgYSBzdWl0YWJsZSBkcml2ZXIuXG5cbkJleW9uZCB0aGF0LCB0aGUgY29kZSBhbHNvIGNhbGxzIGBzZXJpb19maW5kX2RyaXZlcmAgd2hlbiBhIGRyaXZlciBpcyB1bnJlZ2lzdGVyZWQsIHZpYSBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdW5yZWdpc3RyYXRpb24gbWF5IGludm9sdmUgZmluZGluZyBuZXcgZHJpdmVycyB0byBoYW5kbGUgdGhlIGRldmljZSwgb3IgZW5zdXJpbmcgbm8gZHJpdmVyIHJlbWFpbnMgYm91bmQuXG5cbkZpbmFsbHksIGFuZCBpbnRlcmVzdGluZ2x5LCBgZHJ2Y3RsX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggZHJpdmVyIGNvbnRyb2wgdmlhIGEgc3lzZnMgaW50ZXJmYWNlIG9yIHNpbWlsYXIsIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBjb25maXJtcyBpdHMgY29yZSByb2xlIGluIGRyaXZlciBzZWxlY3Rpb24uIE5vdywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZHJ2Y3RsX3N0b3JlYCBpbXBsZW1lbnRhdGlvbiBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYCB0byBzZWUgaG93IGl0IHVzZXMgYHNlcmlvX2ZpbmRfZHJpdmVyYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgaW1wbGljYXRpb25zIGZvciBkcml2ZXIgbWFuYWdlbWVudC4gVGhpcyB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSBtZWNoYW5pc21zIGRyaXZpbmcgdGhlIGRyaXZlciBtYXRjaGluZyBhbmQgYmluZGluZyB0aGF0IHNlZW0gdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjI4LjY0ODc2NDA3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjA5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJ2Y3RsX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzUxPXN0YXRpYyBzc2l6ZV90IGV4dHJhX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU3OnN0YXRpYyBzc2l6ZV90IGRydmN0bF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjguNjk1NDMwMjc0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTc4NDUwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgYGRydmN0bF9zdG9yZWAgU3lzZnMgQXR0cmlidXRlKipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIGBkcnZjdGxfc3RvcmVgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYFNFUklPYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0gdG8gdW5kZXJzdGFuZCBob3cgYFNFUklPYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGVuYWJsZXMuIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGF0dHJpYnV0ZSBpcyBkZWNsYXJlZCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjMxLjU1MzI3ODI2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NzMxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNC0jXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU6Y29uZmlnIFNFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlNlcmlhbCBJL08gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNz1pZiBTRVJJT1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjk6Y29uZmlnIFNFUklPX0k4MDQyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJpODA0MiBQQyBLZXlib2FyZCBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0Mzpjb25maWcgU0VSSU9fU0VSUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiU2VyaWFsIHBvcnQgbGluZSBkaXNjaXBsaW5lXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo1ODpjb25maWcgU0VSSU9fUTQwS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJRNDAga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02MS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6NjI6Y29uZmlnIFNFUklPX1BBUktCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiUGFyYWxsZWwgcG9ydCBrZXlib2FyZCBhZGFwdGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTc1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo3Njpjb25maWcgU0VSSU9fUlBDS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTc3LVxcdHRyaXN0YXRlIFxcXCJBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6ODc6Y29uZmlnIFNFUklPX0FNQkFLTUlcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkFNQkEgS01JIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkxOmNvbmZpZyBTRVJJT19TQTExMTFcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXFx0dHJpc3RhdGUgXFxcIkludGVsIFNBMTExMSBrZXlib2FyZCBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk0LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NTpjb25maWcgU0VSSU9fR1NDUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEzMT1jb25maWcgSElMX01MQ1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM1OmNvbmZpZyBTRVJJT19QQ0lQUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTQ2OmNvbmZpZyBTRVJJT19NQUNFUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiU0dJIE8yIE1BQ0UgUFMvMiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTU2OmNvbmZpZyBTRVJJT19TR0lfSU9DM1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIlNHSSBJT0MzIFBTLzIgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2Njpjb25maWcgU0VSSU9fTElCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiUFMvMiBkcml2ZXIgbGlicmFyeVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE3Njpjb25maWcgU0VSSU9fUkFXXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE3Ny1cXHR0cmlzdGF0ZSBcXFwiUmF3IGFjY2VzcyB0byBzZXJpbyBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE5MTpjb25maWcgU0VSSU9fQUxURVJBX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIkFsdGVyYSBVUCBQUy8yIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTk5LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyMDA6Y29uZmlnIFNFUklPX0FNU19ERUxUQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMDEtXFx0dHJpc3RhdGUgXFxcIkFtc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIxNTpjb25maWcgU0VSSU9fUFMyTVVMVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTYtXFx0dHJpc3RhdGUgXFxcIlRRQyBQUy8yIG11bHRpcGxleGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyMy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjI0OmNvbmZpZyBTRVJJT19BUkNfUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyNS1cXHR0cmlzdGF0ZSBcXFwiQVJDIFBTLzIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMzMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNDpjb25maWcgU0VSSU9fQVBCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiR1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI0NDpjb25maWcgU0VSSU9fT0xQQ19BUFNQXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiT0xQQyBBUC1TUCBpbnB1dCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI1ND1jb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNjQ6Y29uZmlnIFNFUklPX1NVTjRJX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBBMTAgUFMvMiBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjczLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNzQ6Y29uZmlnIFNFUklPX0dQSU9fUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZSBcXFwiR1BJTyBQUy8yIGJpdCBiYW5naW5nIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzEuNjAwMTU2ODk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTc2MTc3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJpYWwgSW5wdXQvT3V0cHV0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBTRVJJT2AuIFJpZ2h0LCBgU0VSSU9gIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGF0J3MgYSBrZXkgZmlyc3QgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlcj8gTGV0J3Mgc2VlLi4uIEFoLCBgVVNFUklPYCBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlYC4gVGhhdCdzIGltcG9ydGFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgVVNFUklPYCBhcyB3ZWxsLiBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBgVVNFUklPYCBjb25maWd1cmF0aW9uIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjM0LjM5Nzc3NzUwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI3ND1jb25maWcgU0VSSU9fR1BJT19QUzJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI4NTpjb25maWcgVVNFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4Ni1cXHR0cmlzdGF0ZSBcXFwiVXNlciBzcGFjZSBzZXJpbyBwb3J0IGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTozNC40NTMxOTcwODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNjM5MjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBVU0VSSU8gZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYFVTRVJJT2AgaXMgYSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgbGV0cyB1c2Vyc3BhY2UgY29kZSBjcmVhdGUgaXRzIG93biBzZXJpbyBwb3J0cy4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcuIElmIEkgY2FuIGNyZWF0ZSBjdXN0b20gc2VyaW8gcG9ydHMgZnJvbSB1c2Vyc3BhY2UsIEkgY2FuIGNvbnRyb2wgdGhlIGlucHV0cyBtdWNoIG1vcmUgZGlyZWN0bHkgYW5kIHByZWRpY3RhYmx5IHRoYW4gSSBjb3VsZCBvdGhlcndpc2UuIFRoYXQgbGV2ZWwgb2YgY29udHJvbCBpcyAqZXhhY3RseSogd2hhdCBJIG5lZWQgdG8gY3JhZnQgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoZXRoZXIgYFVTRVJJT2AgaXRzZWxmIHJlbGllcyBvbiB0aGUgYFNFUklPYCBzdWJzeXN0ZW0uIElmIGl0IGRvZXMsIHRoZW4gYW55IGJ1Z3MgaW4gYFNFUklPYCB3aWxsIGJlIGV4cG9zZWQuIElmIGBVU0VSSU9gIGNyZWF0ZXMgaXQncyBvd24gYWJzdHJhY3Rpb24gYW5kIGl0IGlzbid0IGRlcGVuZGVudCBvbiBgU0VSSU9gIGl0c2VsZiwgdGhhdCdzIGFsc28gc29tZXRoaW5nIGludGVyZXN0aW5nLCB0aG91Z2ggcGVyaGFwcyBub3QgYXMgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzcuMzU5NTkyMjQ5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAxMzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjk9Y29uZmlnIFNFUklPX0k4MDQyXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjMyOlxcdGRlcGVuZHMgb24gQVJDSF9NSUdIVF9IQVZFX1BDX1NFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz00Mz1jb25maWcgU0VSSU9fU0VSUE9SVFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0NjpcXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9NTg9Y29uZmlnIFNFUklPX1E0MEtCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy01OS1cXHR0cmlzdGF0ZSBcXFwiUTQwIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gUTQwXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYxLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz02Mj1jb25maWcgU0VSSU9fUEFSS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJQYXJhbGxlbCBwb3J0IGtleWJvYXJkIGFkYXB0ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gUEFSUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9NzY9Y29uZmlnIFNFUklPX1JQQ0tCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03Ny1cXHR0cmlzdGF0ZSBcXFwiQWNvcm4gUmlzY1BDIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gQVJDSF9BQ09STlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz04Nz1jb25maWcgU0VSSU9fQU1CQUtNSVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiQU1CQSBLTUkga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6ODk6XFx0ZGVwZW5kcyBvbiBBUk1fQU1CQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9OTE9Y29uZmlnIFNFUklPX1NBMTExMVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05Mi1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgU0ExMTExIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkzOlxcdGRlcGVuZHMgb24gU0ExMTExXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk0LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05NT1jb25maWcgU0VSSU9fR1NDUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIEdTQ1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05OC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xMDk9Y29uZmlnIEhQX1NEQ1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMTAtXFx0dHJpc3RhdGUgXFxcIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMTE6XFx0ZGVwZW5kcyBvbiAoR1NDIHx8IEhQMzAwKSBcXHUwMDI2XFx1MDAyNiBTRVJJT1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMTItXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTMxPWNvbmZpZyBISUxfTUxDXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzMi1cXHR0cmlzdGF0ZSBcXFwiSElMIE1MQyBTdXBwb3J0IChuZWVkZWQgZm9yIEhJTCBpbnB1dCBkZXZpY2VzKVxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTMzOlxcdGRlcGVuZHMgb24gSFBfU0RDXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTM1PWNvbmZpZyBTRVJJT19QQ0lQUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMzc6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM4OlxcdGRlcGVuZHMgb24gSEFTX0lPUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE0Nj1jb25maWcgU0VSSU9fTUFDRVBTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlNHSSBPMiBNQUNFIFBTLzIgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTQ4OlxcdGRlcGVuZHMgb24gU0dJX0lQMzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xNTY9Y29uZmlnIFNFUklPX1NHSV9JT0MzXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1Ny1cXHR0cmlzdGF0ZSBcXFwiU0dJIElPQzMgUFMvMiBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNTg6XFx0ZGVwZW5kcyBvbiBTR0lfTUZEX0lPQzNcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTU5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xNjY9Y29uZmlnIFNFUklPX0xJQlBTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjctXFx0dHJpc3RhdGUgXFxcIlBTLzIgZHJpdmVyIGxpYnJhcnlcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2ODpcXHRkZXBlbmRzIG9uIFNFUklPX0k4MDQyIHx8IFNFUklPX0k4MDQyPW5cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xOTE9Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTkyLVxcdHRyaXN0YXRlIFxcXCJBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxOTM6XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTk0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yMDA9Y29uZmlnIFNFUklPX0FNU19ERUxUQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMDEtXFx0dHJpc3RhdGUgXFxcIkFtc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjAyOlxcdGRlcGVuZHMgb24gTUFDSF9BTVNfREVMVEFcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjAzLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIyND1jb25maWcgU0VSSU9fQVJDX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjUtXFx0dHJpc3RhdGUgXFxcIkFSQyBQUy8yIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIyNjpcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIzND1jb25maWcgU0VSSU9fQVBCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiR1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjM2OlxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjQ0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjQ1LVxcdHRyaXN0YXRlIFxcXCJPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIEFSQ0hfTU1QIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI1ND1jb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1NS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI1NjpcXHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVU1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNTctXFx0ZGVmYXVsdCBIWVBFUlZfVk1CVVNcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNjQ9Y29uZmlnIFNFUklPX1NVTjRJX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBBMTAgUFMvMiBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGUgXFxcIkdQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI3NjpcXHRkZXBlbmRzIG9uIEdQSU9MSUJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjc3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzcuNDA3NjExOTE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDIxMjc4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgVVNFUklPYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3Mgc2VsZi1jb250YWluZWQsIG5vdCByZWxpYW50IG9uIGFueSBvdGhlciBvcHRpb25zLiBIb3dldmVyLCBJJ20gc2VlaW5nIGl0J3Mgc29tZWhvdyBuZXN0ZWQgd2l0aGluIHRoZSBgaWYgU0VSSU9gIGNvbmRpdGlvbmFsIGJsb2NrLiBUaGF0J3MgYSBsaXR0bGUgY29uZnVzaW5nLiBMZXQncyBtYWtlIHN1cmUgSSdtIHJlYWRpbmcgdGhlIEtjb25maWcgZmlsZSBjb3JyZWN0bHkuXG5cbkxldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgd2hlcmUgYFVTRVJJT2AgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnYC4gQWgsIHRoZXJlIGl0IGlzLCByaWdodCBhdCB0aGUgdGFpbCBlbmQgb2YgdGhhdCBmaWxlLiBPa2F5LCBub3cgbGV0J3MgY29uZmlybSB0aGUgc3Vycm91bmRpbmcgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiwgaW5kZWVkLCBpdCdzIGRlZmluZWQgaW5zaWRlIHRoYXQgYGlmIFNFUklPYCBibG9jay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc2ludGVycHJldGluZyB0aGUgZmlsZSBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgc3BlY2lmaWMgcmVsYXRpb25zaGlwIGJldHdlZW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYnVpbGRzIGFuZCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTo0MC42MDk3NDM1MDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDY3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjg1PWNvbmZpZyBVU0VSSU9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yOTgtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OTplbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTo0MC42NTc4MTc0ODdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjQ0NDcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU0VSSU8gRHJpdmVyIExvZ2ljKipcblxuT2theSwgc28gSSdtIG5hdmlnYXRpbmcgdGhpcyBgc2VyaW9gIGNvZGUgYW5kIEkgc2VlIHdlJ3JlIGRlZmluaXRlbHkgaW5zaWRlIGFuIGBpZiBTRVJJT2AgYmxvY2suIFRoYXQncyBnb29kLCBjb25maXJtcyBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBOb3csIHRoZSBrZXkgZGVwZW5kZW5jeSBhcHBlYXJzIHRvIGJlIG9uIGJvdGggYFNFUklPYCBhbmQgYFVTRVJJT2AgYmVpbmcgZGVmaW5lZC4gR290IGl0LlxuXG5NeSBmb2N1cyBpcyBuYXJyb3dpbmcgZG93biB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGFuZCB0aGVzZSBzeW1ib2wgbmFtZXMgYXJlIGp1bXBpbmcgb3V0IGF0IG1lOiBgc2VyaW9fcmVjb25uZWN0YCwgYHNlcmlvX3Jlc2NhbmAsIGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgYW5kIG1hbmFnZW1lbnQgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGVtLlxuXG5IYW5nIG9uLi4uIEkganVzdCBzcG90dGVkIGBzZXJpb19maW5kX2RyaXZlcmAgYmVpbmcgY2FsbGVkIGZyb20gYGRydmN0bF9zdG9yZWAuICBgZHJ2Y3RsX3N0b3JlYCwgYWgsIHJpZ2h0LCB0aGF0J3MgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQgY29ubmVjdGlvbiBpcyBpbXBvcnRhbnQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCwgc28gSSBoYXZlIGEgZGlyZWN0IHBhdGggaW50byB0aGUgZHJpdmVyJ3MgbG9va3VwIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy4gXG5cbk9rYXksIG5vdyB0aGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBzdWNoIHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXI/ICBUaW1lIHRvIGdvIGJhY2sgdG8gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgYW5kIGh1bnQgZm9yIGBERVZJQ0VfQVRUUmAgY2FsbHMuIFRoYXQgd2lsbCBiZSB0aGUgbmV4dCBwbGFjZSB0byBsb29rIGZvciBzeXNmcyBpbnRlcmFjdGlvbiBwb2ludHMgdG8gZXhwYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NDQuOTgwMjY0Nzg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg4Mzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZJQ0VfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTQwOT1zdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00MTUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNjpzdGF0aWMgREVWSUNFX0FUVFJfUk8odHlwZSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocHJvdG8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MTg6c3RhdGljIERFVklDRV9BVFRSX1JPKGlkKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDE5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhleHRyYSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQyMC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc2VyaW9faWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00MzMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQzNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW9kYWxpYXMpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzU6c3RhdGljIERFVklDRV9BVFRSX1dPKGRydmN0bCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQzNjpzdGF0aWMgREVWSUNFX0FUVFIoZGVzY3JpcHRpb24sIFNfSVJVR08sIHNlcmlvX3Nob3dfZGVzY3JpcHRpb24sIE5VTEwpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0Mzc6c3RhdGljIERFVklDRV9BVFRSKGJpbmRfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sIHNlcmlvX3Nob3dfYmluZF9tb2RlLCBzZXJpb19zZXRfYmluZF9tb2RlKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM4OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NDUuMDUxMTUzNjI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTE4MzM4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgU2VyaW8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIEkgc2VlIGBkcnZjdGxgIGlzIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBgZHJ2Y3RsX3N0b3JlYCBpcyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyDigJMgdGhhdCdzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgd2l0aGluIGBzZXJpb19maW5kX2RyaXZlcmAsIHNvIEkgbmVlZCB0byBleHBsb3JlIGhvdyB0aGF0IGNvbmRpdGlvbiBjYW4gYmUgdHJpZ2dlcmVkLlxuXG5NeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIFNlcmlvIGRyaXZlciwgcGFydGljdWxhcmx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBUaGUgbGlrZWx5IGJ1aWxkIGNvbmZpZ3MgYXJlIGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uXG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGlmIHRoZSBjYW5kaWRhdGUgc3ltYm9scyBhcmUgc3VpdGFibGUsIGdpdmVuIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIEZpcnN0LCBJIGhhdmUgdGhpcyBsaXN0OlxuXG4qICAgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGBcbiogICBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YFxuKiAgIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmBcbiogICBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgXG4qICAgYHNlcmlvX3JlY29ubmVjdGBcbiogICBgc2VyaW9fcmVzY2FuYFxuXG5JIHdhcyBjb25zaWRlcmluZyBgZHJ2Y3RsX3N0b3JlYCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgbWFrZXMgaXQgbGVzcyBkZXNpcmFibGUgcGVyIHRoZSBpbnN0cnVjdGlvbnMuIEFuZCBgc2VyaW9faGFuZGxlX2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgc28gaXQncyBvdXQuIFNvLCBteSBsaXN0IGxvb2tzIGdvb2QuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGNvbmZpcm0gaG93IHNlcmlvIHBvcnRzIGFyZSBjcmVhdGVkIGZyb20gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFVTRVJJT2AgaXMgaW5kZWVkIHRoZSBvbmx5IHdheSB0byBleHBvc2Ugc2VyaW8gcG9ydHMgdG8gdXNlcnNwYWNlLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjUxLjIwMjk5MDY4M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTgyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM9MTc4PXN0YXRpYyBpbnQgdXNlcmlvX2V4ZWN1dGVfY21kKHN0cnVjdCB1c2VyaW9fZGV2aWNlICp1c2VyaW8sXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTE5NS1cXHRcXHR1c2VyaW8tXFx1MDAzZXJ1bm5pbmcgPSB0cnVlO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTk2OlxcdFxcdHNlcmlvX3JlZ2lzdGVyX3BvcnQodXNlcmlvLVxcdTAwM2VzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xOTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjUxLjI0OTk5NDc2M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyNjMzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHVzZXJpb2AgRHJpdmVyKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gb2YgdGhlIHNlcmlhbCBJL08gcG9ydHMgaW4gdGhlIGB1c2VyaW9gIGRyaXZlci4gTGV0J3Mgc2VlLi4uICpZZXMqLCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGB1c2VyaW9fZXhlY3V0ZV9jbWRgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgb25lIHRoYXQgY2FsbHMgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBsaWtlbHkgc2V0dGluZyB1cCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGZvciBhIGNvbW1hbmQuXG5cbk5vdywgd2hlcmUncyB0aGUgY2xlYW51cD8gQWhhLCBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCBnZXRzIGNhbGxlZCBpbiB0d28gcGxhY2VzOiBgdXNlcmlvX2RldmljZV9yZWxlYXNlYCB3aGljaCBpcyB0aGUgbG9naWNhbCBwbGFjZSBmb3IgaXQgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgdGVhcmRvd24sIGFuZCBpdCAqYWxzbyogYXBwZWFycyB0aGF0IGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGB1c2VyaW9fZXhlY3V0ZV9jbWRgLiBUaGF0IHNlY29uZCBvbmUgaXMgYSBiaXQgbW9yZSBpbnRlcmVzdGluZywgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGxvZ2ljIHRoZXJlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHVucmVnaXN0cmF0aW9uIGhhcHBlbnMgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLiBUaGVyZSdzIHByb2JhYmx5IGEgY29udGV4dCB3aGVyZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBlYXJseSwgb3IgaGFuZGxlIGFuIGVycm9yIGNvbmRpdGlvbi4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGR1YWwgY2FsbCBkb2Vzbid0IGludHJvZHVjZSBhIHJhY2UgY29uZGl0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aHkgdW5yZWdpc3RyYXRpb24gY291bGQgYmUgY2FsbGVkIGluIGB1c2VyaW9fZXhlY3V0ZV9jbWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjU1LjI0MjYzMDg4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwODAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYz05Nj1zdGF0aWMgaW50IHVzZXJpb19jaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwMS1cXHRcXHQvKlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTAyOlxcdFxcdCAqIERvbid0IGZyZWUgdGhlIHNlcmlvIHBvcnQgaGVyZSwgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwMy1cXHRcXHQgKiBkb2VzIGl0IGZvciB1cy5cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwNC1cXHRcXHQgKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjEwNTpcXHRcXHRzZXJpb191bnJlZ2lzdGVyX3BvcnQodXNlcmlvLVxcdTAwM2VzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xMDYtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTUuMjkzNzE3MjIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTg0MjQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYHNlcmlvYCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gYFVTRVJJT2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgdG9vbCBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGFyZWEuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0d28ga2V5IGNvbmZpZ3VyYXRpb25zOiBgU0VSSU9gIGFuZCBgVVNFUklPYC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkga25vdyBJIG5lZWQgdG8gdGFyZ2V0IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gVGhvc2Ugd2lsbCBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBzZXJpby5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIFlvdSBuZXZlciBrbm93IHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBsdXJraW5nLiBBIHRob3JvdWdoIHJldmlldyB3aWxsIHJlYWxseSBoZWxwIG1lIGlkZW50aWZ5IGFueSBibGluZCBzcG90cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTguOTEyMTQ0NjM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU1LX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTg9dm9pZCBzZXJpb19yZWNvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjEtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjI6RVhQT1JUX1NZTUJPTChzZXJpb19yZWNvbm5lY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjY4PXZvaWQgX19zZXJpb19yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Mi19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY3MzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfcG9ydCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02Nzg9dm9pZCBzZXJpb191bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODQtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2ODU6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX3BvcnQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjkwPXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9jaGlsZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAwLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NzAxOkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9jaGlsZF9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODIyLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODIzOkVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyNT12b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4NDY6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NDI9aW50IHNlcmlvX29wZW4oc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk1MS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk1MjpFWFBPUlRfU1lNQk9MKHNlcmlvX29wZW4pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NTMtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTU1PXZvaWQgc2VyaW9fY2xvc2Uoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjEtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NjI6RVhQT1JUX1NZTUJPTChzZXJpb19jbG9zZSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk2My1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTY0PWlycXJldHVybl90IHNlcmlvX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk3OC19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk3OTpFWFBPUlRfU1lNQk9MKHNlcmlvX2ludGVycnVwdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk4MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTgxPWNvbnN0IHN0cnVjdCBidXNfdHlwZSBzZXJpb19idXMgPSB7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTkyLX07XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk5MzpFWFBPUlRfU1lNQk9MKHNlcmlvX2J1cyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTguOTU5MjY1NDU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NzE1ODMwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNlcmlvIFN1YnN5c3RlbSBCdWcgRml4KipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgc2VyaW8gYnVnIGZpeC4gSSd2ZSBpZGVudGlmaWVkIHRoZSBjcml0aWNhbCBmdW5jdGlvbnM6IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYHNlcmlvX2ludGVycnVwdGAsIGBzZXJpb19vcGVuYCwgYHNlcmlvX2Nsb3NlYCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydGAgYnV0IGBzZXJpb19pbnRlcnJ1cHRgIGlzIHRyaWdnZXJlZCBieSB0aGUgaGFyZHdhcmUsIHNvIGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgZm9yIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyByYWNlIGNvbmRpdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCByZWNvbm5lY3QgcGF0aHdheXMuXG5cbkkgcmVjb25maXJtZWQgdGhhdCB0aGUgYFVTRVJJT2AgZHJpdmVyIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byB3b3JyeSBhYm91dDsgc2ltcGxpZnlpbmcgdGhpbmdzLlxuXG5UaGUga2V5IHRvIHRoaXMgZml4IGxpZXMgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYCwgYW5kIHRoZSBidWcgaXMgdGhhdCBgZGV2aWNlX2F0dGFjaGAgY2FuIGJlIGNhbGxlZCBvbiBhIGRldmljZSB0aGF0IGlzIG5vIGxvbmdlciByZWdpc3RlcmVkLiBJIGNvbmZpcm1lZCBgc2VyaW9fZmluZF9kcml2ZXJgIGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgICh3b3JrcXVldWUpLCBgZHJ2Y3RsX3N0b3JlYCAoc3lzZnMpLCBgc2VyaW9fcmVjb25uZWN0X3BvcnRgICh3b3JrcXVldWUvc3lzZnMpIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIChzeXNjYWxsKSwgd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIHRoZXNlIGFyZSB0aGUgbWFpbiB3YXlzIGRldmljZXMgd2lsbCBiZSBhdHRhY2hlZCBhbmQgZGV0YWNoZWQuIFRoZSByb290IGNhdXNlIGlzIGxpa2VseSBjb25jdXJyZW50IG9wZXJhdGlvbnMgZHVyaW5nIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIG9yIHJlY29ubmVjdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgY29uY3VycmVudCByYWNlIGNvbmRpdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgU0VSSU9gIGFuZCBgVVNFUklPYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGVhcmxpZXIgdG8gdHJpZ2dlciB0aGUgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODA3LCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNS45MzA4NTE4ODlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkxNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSU9cIixcbiAgICBcIlVTRVJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3JlY29ubmVjdFwiLFxuICAgIFwic2VyaW9fcmVzY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJT1wiLFxuICAgIFwiVVNFUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zZXJpb19yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJzZXJpb191bnJlZ2lzdGVyX3BvcnRcIixcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyXCIsXG4gICAgXCJzZXJpb191bnJlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fcmVjb25uZWN0XCIsXG4gICAgXCJzZXJpb19yZXNjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNi4wMTY3NzUwNjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTY3MDA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNi4wMTczODg3NjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjA5NjA4MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2c2VyaW8tXFx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTA6NDA6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuQEAgLTEwOSw2ICsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcbitcdGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyb3IgPSBkZXZpY2VfYXR0YWNoKFx1MDAyNnNlcmlvLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXG4gXHRcdGRldl93YXJuKFx1MDAyNnNlcmlvLVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQyOjA2LjAxNzM4OTkzOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDk2MDQ5NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VyaW8gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYC4gVGhleSd2ZSBhZGRlZCBhIGNoZWNrIGluIGBzZXJpb19maW5kX2RyaXZlcmA6IGBpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpIHJldHVybjtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJdCdzIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IGNhbGxpbmcgYGRldmljZV9hdHRhY2hgIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UuIFJpZ2h0LCB0aGlzIG1ha2VzIHNlbnNlIC0gdGhhdCB3b3VsZCBiZSBhIGNsYXNzaWMgcmVjaXBlIGZvciBwcm9ibGVtcyDigJMgdXNlLWFmdGVyLWZyZWUsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzb21ldGhpbmcgbGlrZSB0aGF0LiBJdCBjb3VsZCBldmVuIGJlIHNvbWV0aGluZyBsZXNzIHNldmVyZSwgYnV0IHN0aWxsIGJhZCwgbGlrZSBhIHdhcm5pbmcgaW4gdGhlIGtlcm5lbCBsb2cuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzICppc24ndCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBuZXcgY2hlY2sgaXMgYWxsIGFib3V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJcyB0aGUgZGV2aWNlIHJlYWR5PyBJcyBpdCByZWdpc3RlcmVkPyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0J3MgY2hlY2tpbmcgYGRldi1cdTAwM2VwYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgaW4gbXkgaGVhZCAtIHRoaXMgaXNuJ3QgYWJvdXQgS01TQU4tdHlwZSBpc3N1ZXMgdGhhdCB3b3VsZCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgd2UgaGFkIGEgVUFGLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LCBLQVNBTiwgTE9DS0RFUCwgb3Igc2ltaWxhciB3b3VsZCBoYXZlIHNvbWV0aGluZyB0byBzYXkgYWJvdXQgdGhpcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cblNvLCBJ4oCZbSBjb25maWRlbnQgaGVyZS4gVGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlLCBjaGVja2luZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdoaWNoIG1ha2VzIHN1cmUgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5OZWVkc0tNU0FOID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDI6MTIuMTEzNDQzMDA5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGRldmljZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpYCBiZWZvcmUgY2FsbGluZyBgZGV2aWNlX2F0dGFjaCgpYCBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgaXMgYSBsaWZlY3ljbGUvc3RhdGUgbWFuYWdlbWVudCBmaXggdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZSwgd2hpY2ggdHlwaWNhbGx5IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHN0YXRlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwsbzj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 10:37:35 +0000 UTC FinishedAt: 2026-08-14 10:42:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIO", "USERIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SERIO", "USERIO" ], "series_id": "7576e22d-20f9-4b27-bb1f-99dbf3aebfd8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__serio_register_port", "serio_unregister_port", "__serio_register_driver", "serio_unregister_driver", "serio_reconnect", "serio_rescan" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklPJiMzNDssCiAgICAmIzM0O1VTRVJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fcmVjb25uZWN0JiMzNDssCiAgICAmIzM0O3NlcmlvX3Jlc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuaW5kZXggNTRkZDI2MjQ5YjAyNy4uYzI0ZTQzMWFmNjc4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG5AQCAtMTA5LDYgJiM0MzsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcbiYjNDM7XHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0ZXJyb3IgPSBkZXZpY2VfYXR0YWNoKFx1MDAyNnNlcmlvLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXG4gXHRcdGRldl93YXJuKFx1MDAyNnNlcmlvLVx1MDAzZWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VSSU8mIzM0OywKICAgICYjMzQ7VVNFUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9wb3J0JiMzNDssCiAgICAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICAgJiMzNDtzZXJpb19yZWNvbm5lY3QmIzM0OywKICAgICYjMzQ7c2VyaW9fcmVzY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBkZXZpY2VfYXR0YWNoKClgIGlzIGNhbGxlZCBvbiBhbiB1bnJlZ2lzdGVyZWQgc2VyaW8gZGV2aWNlIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBzZXJpbyBwb3J0IGlzIGJlaW5nIHVucmVnaXN0ZXJlZCBvciByZWNvbm5lY3RlZCBjb25jdXJyZW50bHkgd2l0aCBkcml2ZXIgYmluZGluZyBvciBzeXNmcyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgc2VyaW8gc3Vic3lzdGVtIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYHVzZXJpb2AgZHJpdmVyIGFuZCBzeXNmcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gc2VyaW8gcG9ydCByZWdpc3RyYXRpb24sIHVucmVnaXN0cmF0aW9uLCBhbmQgZHJpdmVyIGJpbmRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTA6NDA6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggNTRkZDI2MjQ5YjAyNy4uYzI0ZTQzMWFmNjc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMTA5LDYgJiM0MzsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCWludCBlcnJvcjsKIAomIzQzOwlpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKCZhbXA7c2VyaW8tJmd0O2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZXJyb3IgPSBkZXZpY2VfYXR0YWNoKCZhbXA7c2VyaW8tJmd0O2Rldik7CiAJaWYgKGVycm9yICZsdDsgMCAmYW1wOyZhbXA7IGVycm9yICE9IC1FUFJPQkVfREVGRVIpCiAJCWRldl93YXJuKCZhbXA7c2VyaW8tJmd0O2RldiwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhcyBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBTRVJJTyBEcml2ZXIgUmVnaXN0cmF0aW9uIElzc3VlKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdGhhdCYjMzk7cyBhZGRlZCBhIGNoZWNrIGluIGBzZXJpb19maW5kX2RyaXZlcmAuIFNwZWNpZmljYWxseSwgaXTigJlzIGd1YXJkaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gd2l0aCBgaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKSByZXR1cm47YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0h1aCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gV2h5IGFyZSB3ZSBiYWlsaW5nIG91dCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmVkPyYjMzQ7IEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gYXR0ZW1wdCB0byBwcmV2ZW50IHNvbWUga2luZCBvZiByYWNlIGNvbmRpdGlvbiBvciBpbXByb3BlciBzdGF0ZSBoYW5kbGluZy4KCk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgc2VyaW9fZmluZF9kcml2ZXJgICphY3R1YWxseSogZG9lcy4gV2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gSXMgaXQgcmVzcG9uc2libGUgZm9yIHByb2Jpbmcgb3IgYmluZGluZyBkcml2ZXJzIHRvIFNFUklPIGRldmljZXM/IEFuZCBqdXN0IGFzIGltcG9ydGFudGx5LCB3aGVyZSBpcyBpdCBiZWluZyAqY2FsbGVkKiBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoaXMgY2hlY2sgaXMgYmVpbmcgaGl0LCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMsIGFuZCB3aGF0IHByb2JsZW0gaXQmIzM5O3MgdHJ5aW5nIHRvIHNvbHZlLiBJcyB0aGlzIGEgY29tbW9uIGlzc3VlLCBvciBhIHZlcnkgc3BlY2lmaWMgZWRnZSBjYXNlIHRoYXQgc29tZW9uZSBoYXMgc2Vlbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBtb3ZlLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBmb3IgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiB0byBvY2N1ciBhc3luY2hyb25vdXNseS4gTGV0JiMzOTtzIGdldCBjcmFja2luZywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX2ZpbmRfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz04Mj1zdGF0aWMgaW50IHNlcmlvX2JpbmRfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjEwODpzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTEwOS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTE4OT1zdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDgtXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LVx1MDAzZW9iamVjdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjA5Olx0XHRcdHNlcmlvX2ZpbmRfZHJpdmVyKGV2ZW50LVx1MDAzZW9iamVjdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEwLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTc9c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNjktXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNzA6XHRcdFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM3MS1cdFx0XHRzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NTk9c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjQtXHRcdHNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTY1Olx0XHRzZXJpb19maW5kX2RyaXZlcihzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTY2LVx0fVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz04MjU9dm9pZCBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4MzE6XHRkcnYtXHUwMDNlbWFudWFsX2JpbmQgPSB0cnVlO1x0Lyogc28gc2VyaW9fZmluZF9kcml2ZXIgaWdub3JlcyBpdCAqL1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMi1cdHNlcmlvX3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhkcnYpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzctXHRcdFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4Mzg6XHRcdFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzOS1cdFx0XHQvKiB3ZSBjb3VsZCYjMzk7dmUgZGVsZXRlZCBzb21lIHBvcnRzLCByZXN0YXJ0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyBhIERldmljZSBSZWdpc3RyYXRpb24gQnVnKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgYnVnIHdoZXJlIGBkZXZpY2VfYXR0YWNoYCB3YXMgYmVpbmcgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQgd2FzbiYjMzk7dCBwcm9wZXJseSByZWdpc3RlcmVkIGZpcnN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVucHJlZGljdGFibGUgYmVoYXZpb3Ig4oCTIGtlcm5lbCBwYW5pY3MsIGRhdGEgY29ycnVwdGlvbiwgdGhlIHdvcmtzLiBUaGUgZml4IGlzIGEgc2ltcGxlIGNoZWNrLCB2ZXJpZnlpbmcgYGRldmljZV9pc19yZWdpc3RlcmVkYCBiZWZvcmUgY2FsbGluZyB0aGUgYXR0YWNobWVudCBmdW5jdGlvbi4gQSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSwgYnV0IGNydWNpYWwgZm9yIHN0YWJpbGl0eS4gVGltZSB0byBkaWcgaW50byB0aGUgYHNlcmlvLmNgIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBob3cgdGhpcyBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNlcmlhbCBpbnB1dCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZS03LVxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19TRVJJTylcdFx0JiM0Mzs9IHNlcmlvLm9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUtOS1vYmotJChDT05GSUdfU0VSSU9fSTgwNDIpXHQmIzQzOz0gaTgwNDIub1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX1NFUklPX1JBVylcdFx0JiM0Mzs9IHNlcmlvX3Jhdy5vXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19TRVJJT19BTVNfREVMVEEpXHQmIzQzOz0gYW1zX2RlbHRhX3NlcmlvLm9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX1NFUklPX0FMVEVSQV9QUzIpXHQmIzQzOz0gYWx0ZXJhX3BzMi5vXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfU0VSSU9fR1BJT19QUzIpXHQmIzQzOz0gcHMyLWdwaW8ub1xuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfVVNFUklPKVx0XHQmIzQzOz0gdXNlcmlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0VSSU8gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGBDT05GSUdfU0VSSU9gLiBSaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNlcmlhbCBJL08gc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc2VyaW9fZmluZF9kcml2ZXJgIC0gSSYjMzk7bGwgZmluZCB0aGF0IGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgLiBBaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbmFycm93cyBkb3duIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUsIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBieSBgc2VyaW9faGFuZGxlX2V2ZW50YCwgYGRydmN0bF9zdG9yZWAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcG9pbnRzIHRvIGNvbnNpZGVyLgoKTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2VyaW9faGFuZGxlX2V2ZW50YCBpbiBtb3JlIGRldGFpbDsgaXQgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2FsbGVyIGFzIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBJL08gZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX2hhbmRsZV9ldmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MTY2PXN0YXRpYyB2b2lkIHNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHZvaWQgKm9iamVjdCxcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTg4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjE4OTpzdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5MC17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjY6c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFdvcmtxdWV1ZSBDb250ZXh0KioKCk9rYXksIHNvIGBzZXJpb19ldmVudF93b3JrYCBpcyBhIHdvcmtxdWV1ZS4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFzeW5jaHJvbm91cyBhbmQgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGRlZmVycmVkIHByb2Nlc3Npbmcgb2YgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGBzZXJpb2Agc3Vic3lzdGVtLiBNeSBtZW50YWwgbW9kZWwga2lja3MgaW4g4oCTIHRoaXMgaW1wbGllcyBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBwb3NzaWJseSBldmVuIGEgcG9sbGluZyBtZWNoYW5pc20gdGhhdCBldmVudHVhbGx5IGZ1bm5lbHMgaW50byB0aGlzIHF1ZXVlLiBOb3csIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBkcnZjdGxfc3RvcmVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKml0KiBpbnRlcmFjdHMgd2l0aCB0aGlzIHdvcmtxdWV1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJ2Y3RsX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTE9c3RhdGljIHNzaXplX3QgZXh0cmFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1Ni1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNTc6c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBkcnZjdGxfc3RvcmVgIEF0dHJpYnV0ZSoqCgpPa2F5LCBzbyBgZHJ2Y3RsX3N0b3JlYCBpcyBwb3BwaW5nIHVwLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIGEgc3lzZnMgYXR0cmlidXRlLiYjMzQ7IFdlIGtub3cgaG93IHRoYXQgd29ya3PigJRpdCYjMzk7cyBhIGNvbnRyb2wgaW50ZXJmYWNlIGV4cG9zZWQgdGhyb3VnaCB0aGUgdmlydHVhbCBmaWxlc3lzdGVtLCBsaWtlbHkgdXNlZCBmb3IgZGV2aWNlIGRyaXZlciBtYW5hZ2VtZW50LiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgcmVsZXZhbnQgZHJpdmVyIHVzZXMgb3IgcmVhY3RzIHRvIHRoYXQgYXR0cmlidXRlIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgaGFyZHdhcmUuIFJpZ2h0IG5vdyBJIGFtIHRoaW5raW5nIHRoYXQgdGhpcyBhdHRyaWJ1dGUgaXMgbGlrZWx5IHVzZWQgdG8gY29udHJvbCB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbiBvciBiZWhhdmlvci4KCkdpdmVuIHRoZSBjb21tb24gcGF0dGVybnMsIG15IG5leHQgc3RlcCBpcyBhbG1vc3QgcmVmbGV4OiAmIzM0O0xldCYjMzk7cyBjaGVjayBgc2VyaW9fcmVjb25uZWN0X3BvcnRgLiYjMzQ7IEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlLCBwb3RlbnRpYWxseSBpZiB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIFBTLzIgZHJpdmVyLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiBpdCYjMzk7cyBhIHBvaW50ZXIgdG8gc29tZSBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlbHkgYmVjYXVzZSB0aGlzIGF0dHJpYnV0ZSBpcyBjb250cm9sbGluZyBkcml2ZXIgYmVoYXZpb3IsIGl0IHdvdWxkIGxpa2VseSBiZSBuZWNlc3NhcnkgdG8gaGF2ZSBzb21lIGZ1bmN0aW9uIHRvIHJlY29ubmVjdCB0aGUgcG9ydC4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHRoZW4gdGhpcyBhdHRyaWJ1dGUmIzM5O3MgdXNlIHdpbGwgbm90IGJlIHRvIHJlLWNvbm5lY3QgdGhlIHBvcnQsIGFuZCB0aGlzIHdpbGwgYmUgYSBkZWFkIGVuZCBmb3IgbWUuIFdpdGggdGhlc2UgdGhvdWdodHMgaW4gbWluZCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VyaW9fcmVjb25uZWN0X3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM0PXN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzYtc3RhdGljIHZvaWQgc2VyaW9fZGlzY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjAzLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIwNDpcdFx0XHRzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NTI2PXN0YXRpYyB2b2lkIHNlcmlvX2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NTgtICovXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTU5OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjAte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NzU9c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpyb290KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01ODAtXHRkbyB7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTgxOlx0XHRlcnJvciA9IHNlcmlvX3JlY29ubmVjdF9wb3J0KHMpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4Mi1cdFx0aWYgKCFlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTcwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBTZXJpbyBEcml2ZXIgRGlzY29ubmVjdCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGRpc2Nvbm5lY3QgZmxvdyBmb3IgdGhpcyBTZXJpbyBkcml2ZXIgYW5kIGl0IGxvb2tzIGxpa2UgYHNlcmlvX3JlY29ubmVjdF9wb3J0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHdhdGNoLiBJIHNlZSBpdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSBib3RoIGBzZXJpb19oYW5kbGVfZXZlbnRgIGFuZCBgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWVgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCwgc2hvd2luZyBtZSB0aGUgbGlrZWx5IHBvaW50cyBvZiBlbnRyeSBmb3IgcmVjb25uZWN0IGF0dGVtcHRzIGFuZCB0aG9zZSBldmVudHMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZW0uIE5vdyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGFjdHVhbGx5ICp1bnJlZ2lzdGVycyogdGhlIGRyaXZlciBhbmQgaWYgdGhhdCBmdW5jdGlvbiBpcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgZGlzY29ubmVjdHMgdG8gc2VlIHdoYXQgaXMgbGlrZWx5IGluZmx1ZW5jaW5nIHRoZSByZWNvbm5lY3QuIExldCYjMzk7cyBkaWcgaW50byBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZy4gSG9wZWZ1bGx5LCBpdCB3aWxsIHRlbGwgbWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyMz1FWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODI1OnZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgyNi17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODQ2OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBJc3N1ZSoqCgpBbHJpZ2h0LCBzbyBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbCwgbWVhbmluZyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHBvdGVudGlhbCBmb3IgaXNzdWVzLiBMZXQmIzM5O3MgdHJhY2UgYmFjay4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBzZXJpb19yZWNvbm5lY3RgIGZ1bmN0aW9uLCBzaW5jZSByZWNvbm5lY3RzIGFyZSBvZnRlbiBpbnZvbHZlZCB3aGVuIGRyaXZlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCBkdXJpbmcgaG90cGx1ZyBvciBzeXN0ZW0gcmVzdGFydCBzY2VuYXJpb3MuIEFuZCBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBTRVJJT19SRUNPTk5FQ1RfUE9SVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IGhvdyB0aGUgZHJpdmVyIG1pZ2h0IGludGVyYWN0IHdpdGggdW5yZWdpc3RyYXRpb24gb3Igb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzdGFjayBmcm9tIGBzZXJpb19yZWNvbm5lY3RgIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gVGhpcyBpcyB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQsIEkgdGhpbmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3JlY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzQ9c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNi1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Mzc6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzgtc3RhdGljIHZvaWQgc2VyaW9fYXR0YWNoX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpO1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MD1zdGF0aWMgaW50IHNlcmlvX2Nvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDYtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDc6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDgte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjAzLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIwNDpcdFx0XHRzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEyLVx0XHRjYXNlIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFOlxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIxMzpcdFx0XHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShldmVudC1cdTAwM2VvYmplY3QpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIxNC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzU3PXN0YXRpYyBzc2l6ZV90IGRydmN0bF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzY2LVx0XHR9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgXCYjMzQ7cmVjb25uZWN0XCYjMzQ7LCBjb3VudCkpIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNjc6XHRcdFx0c2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OC1cdFx0fSBlbHNlIGlmICghc3RybmNtcChidWYsIFwmIzM0O3Jlc2NhblwmIzM0OywgY291bnQpKSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTUyNj1zdGF0aWMgdm9pZCBzZXJpb19kZXN0cm95X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTU4LSAqL1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU1OTpzdGF0aWMgaW50IHNlcmlvX3JlY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTYwLXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NjE6XHRpbnQgZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjItXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3NC0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NzU6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpyb290KVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3Ni17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4MC1cdGRvIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1ODE6XHRcdGVycm9yID0gc2VyaW9fcmVjb25uZWN0X3BvcnQocyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgyLVx0XHRpZiAoIWVycm9yKSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY1Nj1FWFBPUlRfU1lNQk9MKHNlcmlvX3Jlc2Nhbik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1ODp2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1OS17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjYyOkVYUE9SVF9TWU1CT0woc2VyaW9fcmVjb25uZWN0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIHRoZSBTRVJJTyBTdWJzeXN0ZW0qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIGluIHRoZSBTRVJJTyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBgc2VyaW9fZmluZF9kcml2ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgc2VyaW9fcmVjb25uZWN0YCBpcyBleHBvcnRlZC4gVGhlIHBhdGNoIGFkZHMgYSBjaGVjazogYCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpYCB3aXRoaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBzZWVtcyB0byBiZSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhaW1pbmcgdG8gcHJldmVudCBgc2VyaW9fZmluZF9kcml2ZXJgIGZyb20gYmVpbmcgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQmIzM5O3MgYWxyZWFkeSBiZWVuIHVucmVnaXN0ZXJlZC4gTWFrZXMgc2Vuc2UuCgpUaGUgY29udGV4dCBpcyB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgZ2V0dGluZyBjYWxsZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBkZXZpY2UgbWlnaHQgbm90IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW55bW9yZSDigJMgc3lzZnMgKGBkcnZjdGxfc3RvcmVgKSwgYSB3b3JrcXVldWUgKGBzZXJpb19oYW5kbGVfZXZlbnRgKSwgYW5kIHBvdGVudGlhbGx5IGR1cmluZyBwb3J0IHJlY29ubmVjdGlvbiAoYHNlcmlvX3JlY29ubmVjdF9wb3J0YCksIG9yIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiAoYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCkuIElmIHRoZSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdpbGwgcmlnaHRseSByZXR1cm4gZmFsc2UuCgpUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gZnV6emluZyB3b3VsZCBiZSBhIGdvb2QgaWRlYS4gVGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wgaXMgYFNFUklPYCwgb2J2aW91c2x5LiBHaXZlbiB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgc3RhdGljLCBJIGNhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgaXQuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjYWxsZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgZHJ2Y3RsX3N0b3JlYCwgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgYW5kIGBzZXJpb19yZWNvbm5lY3RgLiBPaCwgcmlnaHQsIGBkcnZjdGxfc3RvcmVgIGlzIHN5c2ZzLCBhbmQgYHNlcmlvX2hhbmRsZV9ldmVudGAgaXMgYSB3b3JrcXVldWUuIE9rYXkuCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBIbW0sIGxldCYjMzk7cyBzZWUuIEkgaGF2ZSBgc2VyaW9fcmVzY2FuYCwgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX2ludGVycnVwdGAuCgpBbHJpZ2h0LCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgc2VyaW9fcmVzY2FuYCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZXNjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTYxNz1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjUxLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1Mjp2b2lkIHNlcmlvX3Jlc2NhbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1My17XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk2ND1pcnFyZXR1cm5fdCBzZXJpb19pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbyxcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTcyLVx0aWYgKCFkZmwgXHUwMDI2XHUwMDI2IGRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpIHtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NzM6XHRcdHNlcmlvX3Jlc2NhbihzZXJpbyk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTc0LVx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiBhIFBTLzIgcG9ydCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU2VyaWFsIEkvTyAoU0VSSU8pIHN1YnN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7dmUgYWxyZWFkeSBnb3R0ZW4gcGFzdCB0aGUgZHJpdmVyIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcGhhc2UuIE5vdywgdW5yZWdpc3RyYXRpb24uLi4gdGhhdCBtZWFucyB3ZSYjMzk7cmUgbGlrZWx5IGVpdGhlcjoKCiogICBTaHV0dGluZyBkb3duIGEgZGV2aWNlIGdyYWNlZnVsbHkuCiogICBIYW5kbGluZyBhIGhvdC11bnBsdWcgZXZlbnQgKGxlc3MgbGlrZWx5LCBidXQgaW1wb3J0YW50IHRvIGNvbnNpZGVyKS4KKiAgIENsZWFuaW5nIHVwIGFmdGVyIGFuIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKiAgIE9yIG1heWJlLCBpbiBhIG1vcmUgY29tcGxleCBzY2VuYXJpbywgcmUtYXNzaWduaW5nIHRoZSBwb3J0IHRvIGEgZGlmZmVyZW50IGRldmljZS4KCk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbG9ja3MsIG9idmlvdXNseS4gV2UmIzM5O3JlIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuIFdoYXQgbXV0ZXhlcyBvciBzcGlubG9ja3MgYXJlIGludm9sdmVkLCBhbmQgd2hhdCYjMzk7cyB0aGUgYWNxdWlzaXRpb24gb3JkZXI/IEkgbmVlZCB0byBiZSBzdXJlIHdlIGF2b2lkIGFueSBkZWFkbG9ja3MuIE1lbW9yeSBtYW5hZ2VtZW50IGlzIHRoZSBuZXh0IGZsYWcgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cuIEFyZSB3ZSBkZWFsbG9jYXRpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIHRoYXQgY291bGQgbGVhZCB0byBhIGNyYXNoIGxhdGVyPyBUaGUgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBjcml0aWNhbCBoZXJlLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgcGFydGljdWxhcmx5IGlmIHRoZSBwb3J0IGhhZCBhbiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBBcmUgd2UgZGlzYWJsaW5nIGludGVycnVwdHMgY29ycmVjdGx5IGJlZm9yZSBmcmVlaW5nIHJlc291cmNlcz8gVGhlIHRpbWluZyBvZiB0aGF0IGlzIGFsd2F5cyBjcnVjaWFsLiBBbmQgb2YgY291cnNlLCBJJiMzOTttIGFscmVhZHkgd29uZGVyaW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBwb3J0LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHVucmVnaXN0cmF0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbj8gRG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZT8gSG93IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZXhwZWN0ZWQgdG8gaGFuZGxlIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSByZXR1cm4gcGF0aCBpcyBlc3NlbnRpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgY2FsbHNpdGVzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY3Mz1FWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfcG9ydCk7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Ny0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Nzg6dm9pZCBzZXJpb191bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02Nzkte1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODQtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY4NTpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfcG9ydCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCB3ZSYjMzk7cmUgbG9va2luZyBhdCBgc2VyaW9fcmVnaXN0ZXJfcG9ydGAuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGRyaXZlci1sZXZlbCBmdW5jdGlvbj8gUGFydCBvZiBhIGJyb2FkZXIgZnJhbWV3b3JrPyBXaGF0JiMzOTtzIHRoZSAqd2h5KiBiZWhpbmQgaXRzIHVzZT8mIzM0OyBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHB1bGxpbmcgdXAgYXNzb2NpYXRlZCBzdHJ1Y3RzOiBgc2VyaW9fcG9ydGAsIGBzZXJpb19kcml2ZXJgLCBhbnkgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgKGxpa2UgYG11dGV4ZXNgIG9yIGBzcGlubG9ja3NgKS4KCk15IGluaXRpYWwgcXVlc3Rpb25zIGFyZTogd2hhdCBoYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZC9yZWdpc3RlcmVkIHdpdGggdGhpcyBjYWxsPyBJcyB0aGlzIGEgc2ltcGxlIHJlZ2lzdHJhdGlvbiBvciBhcmUgd2UgbWFuYWdpbmcgcmVzb3VyY2VzIHRvbz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZD8gTWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgcmVzb3VyY2UgY2xhaW1pbmcsIGFsbCBjb21lIHRvIG1pbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmJlaW5nKiByZWdpc3RlcmVkIGFuZCB0aGUgb3ZlcmFsbCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQsIGFuZCBjb25maXJtIHRoZSByZWxldmFudCBjYWxsYmFja3MgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGRyaXZlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgaW50ZXJmYWNlIGlzIGJsb2NraW5nIG9yIGFzeW5jaHJvbm91cyB0b28gLSBhbmQgaWYgYW55IHNwZWNpZmljIElSUS1oYW5kbGluZyBvciBETUEgc2V0dXAgaXMgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3JlZ2lzdGVyX3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2Mj1FWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2Ny0gKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Njg6dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjY5LXtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIwNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgaG93IGEgbmV3IFNlcklPIGRyaXZlciBpbnRlZ3JhdGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzIGl0IHRha2VzIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFNlcklPIGNvcmUuIFRoaW5ncyBsaWtlIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCwgZGV2aWNlIHByb2JpbmcsIGFuZCBvZiBjb3Vyc2UsIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGl0c2VsZiDigJMgYWxsIGNydWNpYWwgcGllY2VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb25lIGlzIGNvcnJlY3RseSBtYW5hZ2luZyB0aGUgZHJpdmVyJiMzOTtzIHByZXNlbmNlLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGF0IGl0JiMzOTtzIGdyYWNlZnVsbHkgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc3Nj1zdGF0aWMgdm9pZCBzZXJpb19hdHRhY2hfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjc4NjppbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg3LXtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODIyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4MjM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNlcmlvIFN5bWJvbCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtaW5kIGtlZXBzIGNpcmNsaW5nIGFyb3VuZCB0aGVzZSBgc2VyaW9gIHN5bWJvbHM6IGBzZXJpb19yZWNvbm5lY3RgLCBgc2VyaW9fcmVzY2FuYCwgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLCBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhvc2UgYXJlIGNsZWFybHkgdGhlIGNvcmUgZm9jdXMgcG9pbnRzIGhlcmUsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgZHJpdmUgdGhlIGludGVyYWN0aW9uLgoKV2FpdCBhIHNlY29uZCwgdGhlcmUmIzM5O3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHNvbGlkaWZ5LiBUaGF0IGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24sIEkganVzdCByZWFsaXplZCB0aGF0IGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCB0aGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgc2VyaW9fcXVldWVfZXZlbnRgLiBBaCwgbm93IHRoYXQgSSBoYXZlIHRoaXMgY29ubmVjdGlvbiwgdGhlIHBpY3R1cmUgYmVjb21lcyBhIGxvdCBjbGVhcmVyLiBUaGVzZSBldmVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXN5bmNocm9ub3VzbHksIGVmZmljaWVudGx5LiBUaGUgd29ya2Zsb3cgaXMgY3JpdGljYWwgdG8gdGhlIGZ1bmN0aW9uYWxpdHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3F1ZXVlX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0yMjY9c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjg6c3RhdGljIGludCBzZXJpb19xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyOS1cdFx0XHQgICAgIGVudW0gc2VyaW9fZXZlbnRfdHlwZSBldmVudF90eXBlKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTI9dm9pZCBzZXJpb19yZXNjYW4oc3RydWN0IHNlcmlvICpzZXJpbylcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTMte1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NDpcdHNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRVNDQU5fUE9SVCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU1LX1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjU4PXZvaWQgc2VyaW9fcmVjb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU5LXtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjA6XHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVDT05ORUNUX1NVQlRSRUUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2OD12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcwLVx0c2VyaW9faW5pdF9wb3J0KHNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzE6XHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgb3duZXIsIFNFUklPX1JFR0lTVEVSX1BPUlQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Mi19XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgxMy1cdFx0ZHJ2LVx1MDAzZW1hbnVhbF9iaW5kID0gZmFsc2U7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODE0Olx0XHRlcnJvciA9IHNlcmlvX3F1ZXVlX2V2ZW50KGRydiwgTlVMTCwgU0VSSU9fQVRUQUNIX0RSSVZFUik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODE1LVx0XHRpZiAoZXJyb3IpIHtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTA4PXN0YXRpYyBpbnQgc2VyaW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI2LVx0XHQgKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5Mjc6XHRcdHNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1RfUE9SVCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlvIERyaXZlciBMb2FkaW5nIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkcml2ZXJzIGdldCBjb25uZWN0ZWQgdG8gc2VyaWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHNlcmlvYCBzdWJzeXN0ZW0uIEl0IHNlZW1zIGxpa2UgdGhlIGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24gaXMgdGhlIGtleSB0byB0aGlzIHByb2Nlc3MuIEkmIzM5O3ZlIG5vdGljZWQgdGhhdCBpdCYjMzk7cyBpbnZva2VkIGluIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MuIEZpcnN0LCBpdCBnZXRzIGNhbGxlZCB3aGVuIGhhbmRsaW5nIGV2ZW50cyByZWxhdGVkIHRvIGRldmljZSBjaGFuZ2VzIC0gYFNFUklPX1JFU0NBTl9QT1JUYCwgYFNFUklPX1JFQ09OTkVDVF9QT1JUYCwgb3IgYFNFUklPX0FUVEFDSF9EUklWRVJgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHNpdHVhdGlvbnMgd2hlcmUgd2UmIzM5O2QgbmVlZCB0byBmaW5kIGEgc3VpdGFibGUgZHJpdmVyLgoKQmV5b25kIHRoYXQsIHRoZSBjb2RlIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYCB3aGVuIGEgZHJpdmVyIGlzIHVucmVnaXN0ZXJlZCwgdmlhIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB1bnJlZ2lzdHJhdGlvbiBtYXkgaW52b2x2ZSBmaW5kaW5nIG5ldyBkcml2ZXJzIHRvIGhhbmRsZSB0aGUgZGV2aWNlLCBvciBlbnN1cmluZyBubyBkcml2ZXIgcmVtYWlucyBib3VuZC4KCkZpbmFsbHksIGFuZCBpbnRlcmVzdGluZ2x5LCBgZHJ2Y3RsX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggZHJpdmVyIGNvbnRyb2wgdmlhIGEgc3lzZnMgaW50ZXJmYWNlIG9yIHNpbWlsYXIsIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBjb25maXJtcyBpdHMgY29yZSByb2xlIGluIGRyaXZlciBzZWxlY3Rpb24uIE5vdywgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRydmN0bF9zdG9yZWAgaW1wbGVtZW50YXRpb24gaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdG8gc2VlIGhvdyBpdCB1c2VzIGBzZXJpb19maW5kX2RyaXZlcmAgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGltcGxpY2F0aW9ucyBmb3IgZHJpdmVyIG1hbmFnZW1lbnQuIFRoaXMgd2lsbCBsaWtlbHkgaWxsdW1pbmF0ZSB0aGUgbWVjaGFuaXNtcyBkcml2aW5nIHRoZSBkcml2ZXIgbWF0Y2hpbmcgYW5kIGJpbmRpbmcgdGhhdCBzZWVtIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcnZjdGxfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1MT1zdGF0aWMgc3NpemVfdCBleHRyYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU2LVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1NzpzdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIGBkcnZjdGxfc3RvcmVgIFN5c2ZzIEF0dHJpYnV0ZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIGBkcnZjdGxfc3RvcmVgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYFNFUklPYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtIHRvIHVuZGVyc3RhbmQgaG93IGBTRVJJT2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBlbmFibGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBhdHRyaWJ1dGUgaXMgZGVjbGFyZWQgYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBhdCBgZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VSSU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQtI1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU6Y29uZmlnIFNFUklPXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1NlcmlhbCBJL08gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNz1pZiBTRVJJT1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OmNvbmZpZyBTRVJJT19JODA0MlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7aTgwNDIgUEMgS2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00Mi1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0Mzpjb25maWcgU0VSSU9fU0VSUE9SVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7U2VyaWFsIHBvcnQgbGluZSBkaXNjaXBsaW5lXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU3LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU4OmNvbmZpZyBTRVJJT19RNDBLQkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy01OS1cdHRyaXN0YXRlIFwmIzM0O1E0MCBrZXlib2FyZCBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYxLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYyOmNvbmZpZyBTRVJJT19QQVJLQkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O1BhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03NS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo3Njpjb25maWcgU0VSSU9fUlBDS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04Ni1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo4Nzpjb25maWcgU0VSSU9fQU1CQUtNSVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7QU1CQSBLTUkga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5MTpjb25maWcgU0VSSU9fU0ExMTExXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBTQTExMTEga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05NC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NTpjb25maWcgU0VSSU9fR1NDUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEzMT1jb25maWcgSElMX01MQ1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM1OmNvbmZpZyBTRVJJT19QQ0lQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0NS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNDY6Y29uZmlnIFNFUklPX01BQ0VQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgTzIgTUFDRSBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTU1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE1Njpjb25maWcgU0VSSU9fU0dJX0lPQzNcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgSU9DMyBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY1LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2Njpjb25maWcgU0VSSU9fTElCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY3LVx0dHJpc3RhdGUgXCYjMzQ7UFMvMiBkcml2ZXIgbGlicmFyeVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzUtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTc2OmNvbmZpZyBTRVJJT19SQVdcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzctXHR0cmlzdGF0ZSBcJiMzNDtSYXcgYWNjZXNzIHRvIHNlcmlvIHBvcnRzXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE5MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxOTE6Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE5OS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyMDA6Y29uZmlnIFNFUklPX0FNU19ERUxUQVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIwMS1cdHRyaXN0YXRlIFwmIzM0O0Ftc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjE1OmNvbmZpZyBTRVJJT19QUzJNVUxUXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjE2LVx0dHJpc3RhdGUgXCYjMzQ7VFFDIFBTLzIgbXVsdGlwbGV4ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjIzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIyNDpjb25maWcgU0VSSU9fQVJDX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyNS1cdHRyaXN0YXRlIFwmIzM0O0FSQyBQUy8yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjMzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNDpjb25maWcgU0VSSU9fQVBCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7R1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjQ0OmNvbmZpZyBTRVJJT19PTFBDX0FQU1BcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgU0VSSU9fU1VONElfUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjY1LVx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIEExMCBQUy8yIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjc0OmNvbmZpZyBTRVJJT19HUElPX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlhbCBJbnB1dC9PdXRwdXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBgU0VSSU9gLiBSaWdodCwgYFNFUklPYCBpcyBhIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZS4gVGhhdCYjMzk7cyBhIGtleSBmaXJzdCBwb2ludC4gTm93LCBhcmUgdGhlcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQmIzM5O3Mgc2VlLi4uIEFoLCBgVVNFUklPYCBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYFVTRVJJT2AgYXMgd2VsbC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgYFVTRVJJT2AgY29uZmlndXJhdGlvbiBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTRVJJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjg1OmNvbmZpZyBVU0VSSU9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODYtXHR0cmlzdGF0ZSBcJiMzNDtVc2VyIHNwYWNlIHNlcmlvIHBvcnQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZzoKCioqRXhhbWluaW5nIFVTRVJJTyBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYFVTRVJJT2AgaXMgYSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgbGV0cyB1c2Vyc3BhY2UgY29kZSBjcmVhdGUgaXRzIG93biBzZXJpbyBwb3J0cy4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcuIElmIEkgY2FuIGNyZWF0ZSBjdXN0b20gc2VyaW8gcG9ydHMgZnJvbSB1c2Vyc3BhY2UsIEkgY2FuIGNvbnRyb2wgdGhlIGlucHV0cyBtdWNoIG1vcmUgZGlyZWN0bHkgYW5kIHByZWRpY3RhYmx5IHRoYW4gSSBjb3VsZCBvdGhlcndpc2UuIFRoYXQgbGV2ZWwgb2YgY29udHJvbCBpcyAqZXhhY3RseSogd2hhdCBJIG5lZWQgdG8gY3JhZnQgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuCgpUaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIGBVU0VSSU9gIGl0c2VsZiByZWxpZXMgb24gdGhlIGBTRVJJT2Agc3Vic3lzdGVtLiBJZiBpdCBkb2VzLCB0aGVuIGFueSBidWdzIGluIGBTRVJJT2Agd2lsbCBiZSBleHBvc2VkLiBJZiBgVVNFUklPYCBjcmVhdGVzIGl0JiMzOTtzIG93biBhYnN0cmFjdGlvbiBhbmQgaXQgaXNuJiMzOTt0IGRlcGVuZGVudCBvbiBgU0VSSU9gIGl0c2VsZiwgdGhhdCYjMzk7cyBhbHNvIHNvbWV0aGluZyBpbnRlcmVzdGluZywgdGhvdWdoIHBlcmhhcHMgbm90IGFzIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yOT1jb25maWcgU0VSSU9fSTgwNDJcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzEtXHRkZWZhdWx0IHlcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzozMjpcdGRlcGVuZHMgb24gQVJDSF9NSUdIVF9IQVZFX1BDX1NFUklPXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzMtXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTQzPWNvbmZpZyBTRVJJT19TRVJQT1JUXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ1LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIFRUWVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ3LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz01OD1jb25maWcgU0VSSU9fUTQwS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNTktXHR0cmlzdGF0ZSBcJiMzNDtRNDAga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYwOlx0ZGVwZW5kcyBvbiBRNDBcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02MS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz02Mj1jb25maWcgU0VSSU9fUEFSS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtQYXJhbGxlbCBwb3J0IGtleWJvYXJkIGFkYXB0ZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo2NDpcdGRlcGVuZHMgb24gUEFSUE9SVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTY1LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz03Nj1jb25maWcgU0VSSU9fUlBDS0JEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzctXHR0cmlzdGF0ZSBcJiMzNDtBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjc4Olx0ZGVwZW5kcyBvbiBBUkNIX0FDT1JOXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNzktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9ODc9Y29uZmlnIFNFUklPX0FNQkFLTUlcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0FNQkEgS01JIGtleWJvYXJkIGNvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo4OTpcdGRlcGVuZHMgb24gQVJNX0FNQkFcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05MT1jb25maWcgU0VSSU9fU0ExMTExXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBTQTExMTEga2V5Ym9hcmQgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkzOlx0ZGVwZW5kcyBvbiBTQTExMTFcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05NC1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05NT1jb25maWcgU0VSSU9fR1NDUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6OTc6XHRkZXBlbmRzIG9uIEdTQ1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk4LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEwOT1jb25maWcgSFBfU0RDXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTEwLVx0dHJpc3RhdGUgXCYjMzQ7SFAgU3lzdGVtIERldmljZSBDb250cm9sbGVyIGk4MDQyIFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMTE6XHRkZXBlbmRzIG9uIChHU0MgfHwgSFAzMDApIFx1MDAyNlx1MDAyNiBTRVJJT1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTExMi1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xMzE9Y29uZmlnIEhJTF9NTENcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzItXHR0cmlzdGF0ZSBcJiMzNDtISUwgTUxDIFN1cHBvcnQgKG5lZWRlZCBmb3IgSElMIGlucHV0IGRldmljZXMpXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBIUF9TRENcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTM1PWNvbmZpZyBTRVJJT19QQ0lQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzYtXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM3Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMzg6XHRkZXBlbmRzIG9uIEhBU19JT1BPUlRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzktXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE0Nj1jb25maWcgU0VSSU9fTUFDRVBTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1NHSSBPMiBNQUNFIFBTLzIgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE0ODpcdGRlcGVuZHMgb24gU0dJX0lQMzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDktXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE1Nj1jb25maWcgU0VSSU9fU0dJX0lPQzNcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXHR0cmlzdGF0ZSBcJiMzNDtTR0kgSU9DMyBQUy8yIGNvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNTg6XHRkZXBlbmRzIG9uIFNHSV9NRkRfSU9DM1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1OS1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTY2PWNvbmZpZyBTRVJJT19MSUJQUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjctXHR0cmlzdGF0ZSBcJiMzNDtQUy8yIGRyaXZlciBsaWJyYXJ5XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTY4Olx0ZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY5LVx0aGVscFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xOTE9Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXHR0cmlzdGF0ZSBcJiMzNDtBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTkzOlx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTQtXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIwMD1jb25maWcgU0VSSU9fQU1TX0RFTFRBXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjAxLVx0dHJpc3RhdGUgXCYjMzQ7QW1zdHJhZCBEZWx0YSAoRTMpIG1haWxib2FyZCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjAyOlx0ZGVwZW5kcyBvbiBNQUNIX0FNU19ERUxUQVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIwMy1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yMjQ9Y29uZmlnIFNFUklPX0FSQ19QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtBUkMgUFMvMiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjI2Olx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjctXHRoZWxwXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIzND1jb25maWcgU0VSSU9fQVBCUFMyXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7R1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNjpcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19JT01FTVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNy1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjQ0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDUtXHR0cmlzdGF0ZSBcJiMzNDtPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNDY6XHRkZXBlbmRzIG9uIEFSQ0hfTU1QIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBIWVBFUlZfS0VZQk9BUkRcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNTUtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgU3ludGhldGljIEtleWJvYXJkIGRyaXZlclwmIzM0O1xuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI1NjpcdGRlcGVuZHMgb24gSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjU3LVx0ZGVmYXVsdCBIWVBFUlZfVk1CVVNcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjY0PWNvbmZpZyBTRVJJT19TVU40SV9QUzJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgQTEwIFBTLzIgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjY2Olx0ZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNzY6XHRkZXBlbmRzIG9uIEdQSU9MSUJcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzctXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjIzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFVTRVJJT2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCwgbm90IHJlbGlhbnQgb24gYW55IG90aGVyIG9wdGlvbnMuIEhvd2V2ZXIsIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIHNvbWVob3cgbmVzdGVkIHdpdGhpbiB0aGUgYGlmIFNFUklPYCBjb25kaXRpb25hbCBibG9jay4gVGhhdCYjMzk7cyBhIGxpdHRsZSBjb25mdXNpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSByZWFkaW5nIHRoZSBLY29uZmlnIGZpbGUgY29ycmVjdGx5LgoKTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB3aGVyZSBgVVNFUklPYCBpcyBkZWZpbmVkIGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWdgLiBBaCwgdGhlcmUgaXQgaXMsIHJpZ2h0IGF0IHRoZSB0YWlsIGVuZCBvZiB0aGF0IGZpbGUuIE9rYXksIG5vdyBsZXQmIzM5O3MgY29uZmlybSB0aGUgc3Vycm91bmRpbmcgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiwgaW5kZWVkLCBpdCYjMzk7cyBkZWZpbmVkIGluc2lkZSB0aGF0IGBpZiBTRVJJT2AgYmxvY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzaW50ZXJwcmV0aW5nIHRoZSBmaWxlIHN0cnVjdHVyZSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBzcGVjaWZpYyByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBidWlsZHMgYW5kIG9wZXJhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjg1PWNvbmZpZyBVU0VSSU9cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjk4LVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OTplbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0VSSU8gRHJpdmVyIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbmF2aWdhdGluZyB0aGlzIGBzZXJpb2AgY29kZSBhbmQgSSBzZWUgd2UmIzM5O3JlIGRlZmluaXRlbHkgaW5zaWRlIGFuIGBpZiBTRVJJT2AgYmxvY2suIFRoYXQmIzM5O3MgZ29vZCwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy4gTm93LCB0aGUga2V5IGRlcGVuZGVuY3kgYXBwZWFycyB0byBiZSBvbiBib3RoIGBTRVJJT2AgYW5kIGBVU0VSSU9gIGJlaW5nIGRlZmluZWQuIEdvdCBpdC4KCk15IGZvY3VzIGlzIG5hcnJvd2luZyBkb3duIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcywgYW5kIHRoZXNlIHN5bWJvbCBuYW1lcyBhcmUganVtcGluZyBvdXQgYXQgbWU6IGBzZXJpb19yZWNvbm5lY3RgLCBgc2VyaW9fcmVzY2FuYCwgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLCBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyBhbmQgbWFuYWdlbWVudCBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBjYWxsZWQgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZW0uCgpIYW5nIG9uLi4uIEkganVzdCBzcG90dGVkIGBzZXJpb19maW5kX2RyaXZlcmAgYmVpbmcgY2FsbGVkIGZyb20gYGRydmN0bF9zdG9yZWAuICBgZHJ2Y3RsX3N0b3JlYCwgYWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGEgc3lzZnMgYXR0cmlidXRlISBUaGF0IGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCByZWxhdGlvbnNoaXAsIHNvIEkgaGF2ZSBhIGRpcmVjdCBwYXRoIGludG8gdGhlIGRyaXZlciYjMzk7cyBsb29rdXAgZnVuY3Rpb24uIEl0IG1lYW5zIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy4gCgpPa2F5LCBub3cgdGhlIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgb3RoZXIgc3VjaCBzeXNmcyBhdHRyaWJ1dGVzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyPyAgVGltZSB0byBnbyBiYWNrIHRvIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgIGFuZCBodW50IGZvciBgREVWSUNFX0FUVFJgIGNhbGxzLiBUaGF0IHdpbGwgYmUgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBmb3Igc3lzZnMgaW50ZXJhY3Rpb24gcG9pbnRzIHRvIGV4cGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9BVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MDk9c3RhdGljIHNzaXplX3QgZmlybXdhcmVfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQxNS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MTY6c3RhdGljIERFVklDRV9BVFRSX1JPKHR5cGUpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocHJvdG8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxODpzdGF0aWMgREVWSUNFX0FUVFJfUk8oaWQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxOTpzdGF0aWMgREVWSUNFX0FUVFJfUk8oZXh0cmEpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQyMC1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNlcmlvX2lkX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQzMy1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzQ6c3RhdGljIERFVklDRV9BVFRSX1JPKG1vZGFsaWFzKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzU6c3RhdGljIERFVklDRV9BVFRSX1dPKGRydmN0bCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM2OnN0YXRpYyBERVZJQ0VfQVRUUihkZXNjcmlwdGlvbiwgU19JUlVHTywgc2VyaW9fc2hvd19kZXNjcmlwdGlvbiwgTlVMTCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM3OnN0YXRpYyBERVZJQ0VfQVRUUihiaW5kX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzZXJpb19zaG93X2JpbmRfbW9kZSwgc2VyaW9fc2V0X2JpbmRfbW9kZSk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM4OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNDM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBTZXJpbyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGhvdyB0byBmdXp6IGl0IGVmZmVjdGl2ZWx5LiBJIHNlZSBgZHJ2Y3RsYCBpcyBhIHN5c2ZzIGF0dHJpYnV0ZSwgd2hpY2ggbWVhbnMgYGRydmN0bF9zdG9yZWAgaXMgYWNjZXNzaWJsZSB2aWEgc3lzZnMg4oCTIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjaGVjazogYCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpYCB3aXRoaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYCwgc28gSSBuZWVkIHRvIGV4cGxvcmUgaG93IHRoYXQgY29uZGl0aW9uIGNhbiBiZSB0cmlnZ2VyZWQuCgpNeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIFNlcmlvIGRyaXZlciwgcGFydGljdWxhcmx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBUaGUgbGlrZWx5IGJ1aWxkIGNvbmZpZ3MgYXJlIGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBoYXZlIHRvIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhlIGNhbmRpZGF0ZSBzeW1ib2xzIGFyZSBzdWl0YWJsZSwgZ2l2ZW4gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gRmlyc3QsIEkgaGF2ZSB0aGlzIGxpc3Q6CgoqICAgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGAKKiAgIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgCiogICBgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJgCiogICBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgCiogICBgc2VyaW9fcmVjb25uZWN0YAoqICAgYHNlcmlvX3Jlc2NhbmAKCkkgd2FzIGNvbnNpZGVyaW5nIGBkcnZjdGxfc3RvcmVgLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgbWFrZXMgaXQgbGVzcyBkZXNpcmFibGUgcGVyIHRoZSBpbnN0cnVjdGlvbnMuIEFuZCBgc2VyaW9faGFuZGxlX2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgc28gaXQmIzM5O3Mgb3V0LiBTbywgbXkgbGlzdCBsb29rcyBnb29kLgoKTm93LCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIG5lZWQgdG8gY29uZmlybSBob3cgc2VyaW8gcG9ydHMgYXJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFVTRVJJT2AgaXMgaW5kZWVkIHRoZSBvbmx5IHdheSB0byBleHBvc2Ugc2VyaW8gcG9ydHMgdG8gdXNlcnNwYWNlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uY2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXJpb19yZWdpc3Rlcl9wb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jPTE3OD1zdGF0aWMgaW50IHVzZXJpb19leGVjdXRlX2NtZChzdHJ1Y3QgdXNlcmlvX2RldmljZSAqdXNlcmlvLFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTk1LVx0XHR1c2VyaW8tXHUwMDNlcnVubmluZyA9IHRydWU7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjE5NjpcdFx0c2VyaW9fcmVnaXN0ZXJfcG9ydCh1c2VyaW8tXHUwMDNlc2VyaW8pO1xuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xOTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgdXNlcmlvYCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBzZXJpYWwgSS9PIHBvcnRzIGluIHRoZSBgdXNlcmlvYCBkcml2ZXIuIExldCYjMzk7cyBzZWUuLi4gKlllcyosIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGB1c2VyaW9fZXhlY3V0ZV9jbWRgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgb25lIHRoYXQgY2FsbHMgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2UmIzM5O3JlIGxpa2VseSBzZXR0aW5nIHVwIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgZm9yIGEgY29tbWFuZC4KCk5vdywgd2hlcmUmIzM5O3MgdGhlIGNsZWFudXA/IEFoYSwgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAgZ2V0cyBjYWxsZWQgaW4gdHdvIHBsYWNlczogYHVzZXJpb19kZXZpY2VfcmVsZWFzZWAgd2hpY2ggaXMgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGl0IHRvIGJlIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHRlYXJkb3duLCBhbmQgaXQgKmFsc28qIGFwcGVhcnMgdGhhdCBpdCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBgdXNlcmlvX2V4ZWN1dGVfY21kYC4gVGhhdCBzZWNvbmQgb25lIGlzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdW5yZWdpc3RyYXRpb24gaGFwcGVucyBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uIFRoZXJlJiMzOTtzIHByb2JhYmx5IGEgY29udGV4dCB3aGVyZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBlYXJseSwgb3IgaGFuZGxlIGFuIGVycm9yIGNvbmRpdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBkdWFsIGNhbGwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgcmFjZSBjb25kaXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHdoeSB1bnJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBjYWxsZWQgaW4gYHVzZXJpb19leGVjdXRlX2NtZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYz05Nj1zdGF0aWMgaW50IHVzZXJpb19jaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xMDEtXHRcdC8qXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjEwMjpcdFx0ICogRG9uJiMzOTt0IGZyZWUgdGhlIHNlcmlvIHBvcnQgaGVyZSwgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KClcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTAzLVx0XHQgKiBkb2VzIGl0IGZvciB1cy5cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTA0LVx0XHQgKi9cbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTA1Olx0XHRzZXJpb191bnJlZ2lzdGVyX3BvcnQodXNlcmlvLVx1MDAzZXNlcmlvKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmMtMTA2LVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYHNlcmlvYCBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIGBVU0VSSU9gIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IHRvb2wgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBhcmVhLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHR3byBrZXkgY29uZmlndXJhdGlvbnM6IGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkga25vdyBJIG5lZWQgdG8gdGFyZ2V0IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gVGhvc2Ugd2lsbCBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBzZXJpby5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIFlvdSBuZXZlciBrbm93IHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBsdXJraW5nLiBBIHRob3JvdWdoIHJldmlldyB3aWxsIHJlYWxseSBoZWxwIG1lIGlkZW50aWZ5IGFueSBibGluZCBzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjU4PXZvaWQgc2VyaW9fcmVjb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjYyOkVYUE9SVF9TWU1CT0woc2VyaW9fcmVjb25uZWN0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2OD12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NzM6RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9Njc4PXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY4NC19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njg1OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODYtXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY5MD12b2lkIHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy03MDAtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjcwMTpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAyLVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz03ODY9aW50IF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjItfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyMzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODI1PXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjg0NjpFWFBPUlRfU1lNQk9MKHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDctXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk0Mj1pbnQgc2VyaW9fb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXG4tLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk1MS19XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6OTUyOkVYUE9SVF9TWU1CT0woc2VyaW9fb3Blbik7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTUzLVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NTU9dm9pZCBzZXJpb19jbG9zZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjEtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk2MjpFWFBPUlRfU1lNQk9MKHNlcmlvX2Nsb3NlKTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjMtXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTY0PWlycXJldHVybl90IHNlcmlvX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLFxuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NzgtfVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk3OTpFWFBPUlRfU1lNQk9MKHNlcmlvX2ludGVycnVwdCk7XG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTgwLVxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTk4MT1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgc2VyaW9fYnVzID0ge1xuLS1cbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05OTItfTtcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5OTM6RVhQT1JUX1NZTUJPTChzZXJpb19idXMpO1xuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MDcKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTZXJpbyBTdWJzeXN0ZW0gQnVnIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgc2VyaW8gYnVnIGZpeC4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zOiBgX19zZXJpb19yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAsIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX3Jlc2NhbmAuIEkgaW5pdGlhbGx5IHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGBzZXJpb19pbnRlcnJ1cHRgLCBgc2VyaW9fb3BlbmAsIGBzZXJpb19jbG9zZWAgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2NoaWxkX3BvcnRgIGJ1dCBgc2VyaW9faW50ZXJydXB0YCBpcyB0cmlnZ2VyZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyBpdCBtaWdodCBub3QgYmUgdGhlIG1vc3QgZWZmZWN0aXZlIGZvciB0cmlnZ2VyaW5nIHRoaXMgc3BlY2lmaWMgcmFjZSBjb25kaXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIHJlY29ubmVjdCBwYXRod2F5cy4KCkkgcmVjb25maXJtZWQgdGhhdCB0aGUgYFVTRVJJT2AgZHJpdmVyIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gd29ycnkgYWJvdXQ7IHNpbXBsaWZ5aW5nIHRoaW5ncy4KClRoZSBrZXkgdG8gdGhpcyBmaXggbGllcyBpbiBgc2VyaW9fZmluZF9kcml2ZXJgLCBhbmQgdGhlIGJ1ZyBpcyB0aGF0IGBkZXZpY2VfYXR0YWNoYCBjYW4gYmUgY2FsbGVkIG9uIGEgZGV2aWNlIHRoYXQgaXMgbm8gbG9uZ2VyIHJlZ2lzdGVyZWQuIEkgY29uZmlybWVkIGBzZXJpb19maW5kX2RyaXZlcmAgaXMgY2FsbGVkIGZyb20gYHNlcmlvX2hhbmRsZV9ldmVudGAgKHdvcmtxdWV1ZSksIGBkcnZjdGxfc3RvcmVgIChzeXNmcyksIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAgKHdvcmtxdWV1ZS9zeXNmcykgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgKHN5c2NhbGwpLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhlc2UgYXJlIHRoZSBtYWluIHdheXMgZGV2aWNlcyB3aWxsIGJlIGF0dGFjaGVkIGFuZCBkZXRhY2hlZC4gVGhlIHJvb3QgY2F1c2UgaXMgbGlrZWx5IGNvbmN1cnJlbnQgb3BlcmF0aW9ucyBkdXJpbmcgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgb3IgcmVjb25uZWN0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBjb25jdXJyZW50IHJhY2UgY29uZGl0aW9uLgoKVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgYFNFUklPYCBhbmQgYFVTRVJJT2AgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBtZW50aW9uZWQgZWFybGllciB0byB0cmlnZ2VyIHRoZSByYWNlIGNvbmRpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFUklPJiMzNDssCiAgICAmIzM0O1VTRVJJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfcG9ydCYjMzQ7LAogICAgJiMzNDtzZXJpb191bnJlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7X19zZXJpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAgICYjMzQ7c2VyaW9fcmVjb25uZWN0JiMzNDssCiAgICAmIzM0O3NlcmlvX3Jlc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRVJJTyYjMzQ7LAogICAgJiMzNDtVU0VSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NlcmlvX3JlZ2lzdGVyX3BvcnQmIzM0OywKICAgICYjMzQ7c2VyaW9fdW5yZWdpc3Rlcl9wb3J0JiMzNDssCiAgICAmIzM0O19fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgICAmIzM0O3NlcmlvX3VucmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgICAmIzM0O3NlcmlvX3JlY29ubmVjdCYjMzQ7LAogICAgJiMzNDtzZXJpb19yZXNjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKQEAgLTEwOSw2ICYjNDM7MTA5LDkgQEAgc3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKIAlpbnQgZXJyb3I7CiAKJiM0MzsJaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWVycm9yID0gZGV2aWNlX2F0dGFjaCgmYW1wO3NlcmlvLSZndDtkZXYpOwogCWlmIChlcnJvciAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJvciAhPSAtRVBST0JFX0RFRkVSKQogCQlkZXZfd2FybigmYW1wO3NlcmlvLSZndDtkZXYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgwCgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlcmlvIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYC4gVGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayBpbiBgc2VyaW9fZmluZF9kcml2ZXJgOiBgaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZCgmYW1wO3NlcmlvLSZndDtkZXYpKSByZXR1cm47YC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5Ki4gSXQmIzM5O3MgYSBwcm90ZWN0aW9uIGFnYWluc3QgY2FsbGluZyBgZGV2aWNlX2F0dGFjaGAgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZS4gUmlnaHQsIHRoaXMgbWFrZXMgc2Vuc2UgLSB0aGF0IHdvdWxkIGJlIGEgY2xhc3NpYyByZWNpcGUgZm9yIHByb2JsZW1zIOKAkyB1c2UtYWZ0ZXItZnJlZSwgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNvbWV0aGluZyBsaWtlIHRoYXQuIEl0IGNvdWxkIGV2ZW4gYmUgc29tZXRoaW5nIGxlc3Mgc2V2ZXJlLCBidXQgc3RpbGwgYmFkLCBsaWtlIGEgd2FybmluZyBpbiB0aGUga2VybmVsIGxvZy4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzICppc24mIzM5O3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgbmV3IGNoZWNrIGlzIGFsbCBhYm91dCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSXMgdGhlIGRldmljZSByZWFkeT8gSXMgaXQgcmVnaXN0ZXJlZD8gYGRldmljZV9pc19yZWdpc3RlcmVkYCBpcyBhIGdvb2Qgc2lnbiwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBjaGVja2luZyBgZGV2LSZndDtwYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGluIG15IGhlYWQgLSB0aGlzIGlzbiYjMzk7dCBhYm91dCBLTVNBTi10eXBlIGlzc3VlcyB0aGF0IHdvdWxkIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB3ZSBoYWQgYSBVQUYsIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQsIEtBU0FOLCBMT0NLREVQLCBvciBzaW1pbGFyIHdvdWxkIGhhdmUgc29tZXRoaW5nIHRvIHNheSBhYm91dCB0aGlzLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcy4KClNvLCBJ4oCZbSBjb25maWRlbnQgaGVyZS4gVGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlLCBjaGVja2luZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdoaWNoIG1ha2VzIHN1cmUgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZzZXJpby1cdTAwM2VkZXYpYCBiZWZvcmUgY2FsbGluZyBgZGV2aWNlX2F0dGFjaCgpYCBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgaXMgYSBsaWZlY3ljbGUvc3RhdGUgbWFuYWdlbWVudCBmaXggdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZSwgd2hpY2ggdHlwaWNhbGx5IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHN0YXRlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjM2LjQ1OTczNzUyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjUzNzQ5ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFUklPXCIsXG4gICAgXCJVU0VSSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX3BvcnRcIixcbiAgICBcInNlcmlvX3VucmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwiX19zZXJpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyXCIsXG4gICAgXCJzZXJpb19yZWNvbm5lY3RcIixcbiAgICBcInNlcmlvX3Jlc2NhblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2c2VyaW8tXFx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNi40NTk3NDU0MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzgzMjM1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xcbmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXFxuKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXFxuQEAgLTEwOSw2ICsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbiB7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuK1xcdGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRlcnJvciA9IGRldmljZV9hdHRhY2goXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXFxuIFxcdFxcdGRldl93YXJuKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNy44OTg5MTk5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODgxMTc4NTA3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSU9cIixcbiAgICBcIlVTRVJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3JlY29ubmVjdFwiLFxuICAgIFwic2VyaW9fcmVzY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjEzY2NmZDQ1MDRkNjgyYTlmM2IzNjE1YTQyMjU1MGVjYjZmNDZlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDEwOjQwOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG5pbmRleCA1NGRkMjYyNDliMDI3Li5jMjRlNDMxYWY2Nzg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXG4rKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbkBAIC0xMDksNiArMTA5LDkgQEAgc3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbylcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXG4rXHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpXG4rXHRcdHJldHVybjtcbitcbiBcdGVycm9yID0gZGV2aWNlX2F0dGFjaChcdTAwMjZzZXJpby1cdTAwM2VkZXYpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJvciAhPSAtRVBST0JFX0RFRkVSKVxuIFx0XHRkZXZfd2FybihcdTAwMjZzZXJpby1cdTAwM2VkZXYsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDozNy44OTg5MjExNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjExNzIyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBhcyBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNFUklPIERyaXZlciBSZWdpc3RyYXRpb24gSXNzdWUqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgcGF0Y2ggaW4gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgdGhhdCdzIGFkZGVkIGEgY2hlY2sgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYC4gU3BlY2lmaWNhbGx5LCBpdOKAmXMgZ3VhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIHdpdGggYGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJIdWgsIHRoYXQncyBpbnRlcmVzdGluZy4gV2h5IGFyZSB3ZSBiYWlsaW5nIG91dCBpZiB0aGUgZGV2aWNlIGlzbid0IHJlZ2lzdGVyZWQ/XCIgSXQncyBkZWZpbml0ZWx5IGFuIGF0dGVtcHQgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gb3IgaW1wcm9wZXIgc3RhdGUgaGFuZGxpbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZGlnIGludG8gd2hhdCBgc2VyaW9fZmluZF9kcml2ZXJgICphY3R1YWxseSogZG9lcy4gV2hhdCdzIGl0cyBwdXJwb3NlPyBJcyBpdCByZXNwb25zaWJsZSBmb3IgcHJvYmluZyBvciBiaW5kaW5nIGRyaXZlcnMgdG8gU0VSSU8gZGV2aWNlcz8gQW5kIGp1c3QgYXMgaW1wb3J0YW50bHksIHdoZXJlIGlzIGl0IGJlaW5nICpjYWxsZWQqIGZyb20/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhpcyBjaGVjayBpcyBiZWluZyBoaXQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHdoYXQgcHJvYmxlbSBpdCdzIHRyeWluZyB0byBzb2x2ZS4gSXMgdGhpcyBhIGNvbW1vbiBpc3N1ZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIGVkZ2UgY2FzZSB0aGF0IHNvbWVvbmUgaGFzIHNlZW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbW92ZS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBmb3IgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiB0byBvY2N1ciBhc3luY2hyb25vdXNseS4gTGV0J3MgZ2V0IGNyYWNraW5nLCBsZXQncyBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDA6NDEuNjIwMDk1OTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njk0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX2ZpbmRfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODI9c3RhdGljIGludCBzZXJpb19iaW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoxMDg6c3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbylcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMTA5LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDgtXFx0XFx0XFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMDk6XFx0XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIxMC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zNTc9c3RhdGljIHNzaXplX3QgZHJ2Y3RsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OS1cXHRcXHRcXHRzZXJpb19kaXNjb25uZWN0X3BvcnQoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzozNzA6XFx0XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNzEtXFx0XFx0XFx0c2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc2VyaW8sIFNFUklPX1JFU0NBTl9QT1JUKTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01NTk9c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU2NC1cXHRcXHRzZXJpb19kaXNjb25uZWN0X3BvcnQoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NjU6XFx0XFx0c2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjYtXFx0fVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyNT12b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgzMTpcXHRkcnYtXFx1MDAzZW1hbnVhbF9iaW5kID0gdHJ1ZTtcXHQvKiBzbyBzZXJpb19maW5kX2RyaXZlciBpZ25vcmVzIGl0ICovXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgzMi1cXHRzZXJpb19yZW1vdmVfcGVuZGluZ19ldmVudHMoZHJ2KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MzctXFx0XFx0XFx0c2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODM4OlxcdFxcdFxcdHNlcmlvX2ZpbmRfZHJpdmVyKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODM5LVxcdFxcdFxcdC8qIHdlIGNvdWxkJ3ZlIGRlbGV0ZWQgc29tZSBwb3J0cywgcmVzdGFydCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0MS42NjY3OTc3OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA4MTEzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpeGluZyBhIERldmljZSBSZWdpc3RyYXRpb24gQnVnKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaGAgd2FzIGJlaW5nIGNhbGxlZCBvbiBhIGRldmljZSB0aGF0IHdhc24ndCBwcm9wZXJseSByZWdpc3RlcmVkIGZpcnN0LiBUaGF0J3MgYSBjbGFzc2ljIHJhY2UgY29uZGl0aW9uIGFuZCBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgdW5wcmVkaWN0YWJsZSBiZWhhdmlvciDigJMga2VybmVsIHBhbmljcywgZGF0YSBjb3JydXB0aW9uLCB0aGUgd29ya3MuIFRoZSBmaXggaXMgYSBzaW1wbGUgY2hlY2ssIHZlcmlmeWluZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIGJlZm9yZSBjYWxsaW5nIHRoZSBhdHRhY2htZW50IGZ1bmN0aW9uLiBBIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5LCBidXQgY3J1Y2lhbCBmb3Igc3RhYmlsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgc2VyaW8uY2AgY29uZmlndXJhdGlvbiBhbmQgc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc2VyaWFsIGlucHV0IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0NC44NzQ5MTUyODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0MTI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlLTctXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19TRVJJTylcXHRcXHQrPSBzZXJpby5vXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZS05LW9iai0kKENPTkZJR19TRVJJT19JODA0MilcXHQrPSBpODA0Mi5vXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19TRVJJT19SQVcpXFx0XFx0Kz0gc2VyaW9fcmF3Lm9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19TRVJJT19BTVNfREVMVEEpXFx0Kz0gYW1zX2RlbHRhX3NlcmlvLm9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19TRVJJT19BTFRFUkFfUFMyKVxcdCs9IGFsdGVyYV9wczIub1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZT0zMj1vYmotJChDT05GSUdfU0VSSU9fR1BJT19QUzIpXFx0Kz0gcHMyLWdwaW8ub1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1VTRVJJTylcXHRcXHQrPSB1c2VyaW8ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo0NC45NDczMzQyMzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYwMTEzODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VSSU8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgYENPTkZJR19TRVJJT2AuIFJpZ2h0LCB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgaW50byB0aGUgU2VyaWFsIEkvTyBzdWJzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYHNlcmlvX2ZpbmRfZHJpdmVyYCAtIEknbGwgZmluZCB0aGF0IGluIGBkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNgLiBBaCwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBuYXJyb3dzIGRvd24gd2hlcmUgaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgdGVsbHMgbWUgaXQncyBjYWxsZWQgYnkgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBkcnZjdGxfc3RvcmVgLCBgc2VyaW9fcmVjb25uZWN0X3BvcnRgLCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IHBvaW50cyB0byBjb25zaWRlci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgc2VyaW9faGFuZGxlX2V2ZW50YCBpbiBtb3JlIGRldGFpbDsgaXQgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2FsbGVyIGFzIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBJL08gZXZlbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjQ4LjcwNzQ1MTM5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19oYW5kbGVfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xNjY9c3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHModm9pZCAqb2JqZWN0LFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE4OC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MTg5OnN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTE5MC17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjI1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMjY6c3RhdGljIERFQ0xBUkVfV09SSyhzZXJpb19ldmVudF93b3JrLCBzZXJpb19oYW5kbGVfZXZlbnQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjQ4Ljc1NTIyMDMzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzM3MDExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXb3JrcXVldWUgQ29udGV4dCoqXG5cbk9rYXksIHNvIGBzZXJpb19ldmVudF93b3JrYCBpcyBhIHdvcmtxdWV1ZS4gR290IGl0LiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFzeW5jaHJvbm91cyBhbmQgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGRlZmVycmVkIHByb2Nlc3Npbmcgb2YgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIGBzZXJpb2Agc3Vic3lzdGVtLiBNeSBtZW50YWwgbW9kZWwga2lja3MgaW4g4oCTIHRoaXMgaW1wbGllcyBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBwb3NzaWJseSBldmVuIGEgcG9sbGluZyBtZWNoYW5pc20gdGhhdCBldmVudHVhbGx5IGZ1bm5lbHMgaW50byB0aGlzIHF1ZXVlLiBOb3csIGxldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgZHJ2Y3RsX3N0b3JlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICppdCogaW50ZXJhY3RzIHdpdGggdGhpcyB3b3JrcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo1MS40Mjg5MjQyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTM3MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRydmN0bF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1MT1zdGF0aWMgc3NpemVfdCBleHRyYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0zNTYtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1NzpzdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjUxLjQ3ODA2ODUwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc1Mzc4MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBkcnZjdGxfc3RvcmVgIEF0dHJpYnV0ZSoqXG5cbk9rYXksIHNvIGBkcnZjdGxfc3RvcmVgIGlzIHBvcHBpbmcgdXAsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoYXQncyBhIHN5c2ZzIGF0dHJpYnV0ZS5cIiBXZSBrbm93IGhvdyB0aGF0IHdvcmtz4oCUaXQncyBhIGNvbnRyb2wgaW50ZXJmYWNlIGV4cG9zZWQgdGhyb3VnaCB0aGUgdmlydHVhbCBmaWxlc3lzdGVtLCBsaWtlbHkgdXNlZCBmb3IgZGV2aWNlIGRyaXZlciBtYW5hZ2VtZW50LiBOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoZSByZWxldmFudCBkcml2ZXIgdXNlcyBvciByZWFjdHMgdG8gdGhhdCBhdHRyaWJ1dGUgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBoYXJkd2FyZS4gUmlnaHQgbm93IEkgYW0gdGhpbmtpbmcgdGhhdCB0aGlzIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdXNlZCB0byBjb250cm9sIHRoZSBkcml2ZXIncyBvcGVyYXRpb24gb3IgYmVoYXZpb3IuXG5cbkdpdmVuIHRoZSBjb21tb24gcGF0dGVybnMsIG15IG5leHQgc3RlcCBpcyBhbG1vc3QgcmVmbGV4OiBcIkxldCdzIGNoZWNrIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAuXCIgSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBjb25uZWN0aW9uIHRoZXJlLCBwb3RlbnRpYWxseSBpZiB0aGlzIGlzIGRlYWxpbmcgd2l0aCBhIFBTLzIgZHJpdmVyLiBJdCdzIGFsbW9zdCBjZXJ0YWluIGl0J3MgYSBwb2ludGVyIHRvIHNvbWUgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZWx5IGJlY2F1c2UgdGhpcyBhdHRyaWJ1dGUgaXMgY29udHJvbGxpbmcgZHJpdmVyIGJlaGF2aW9yLCBpdCB3b3VsZCBsaWtlbHkgYmUgbmVjZXNzYXJ5IHRvIGhhdmUgc29tZSBmdW5jdGlvbiB0byByZWNvbm5lY3QgdGhlIHBvcnQuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB0aGVuIHRoaXMgYXR0cmlidXRlJ3MgdXNlIHdpbGwgbm90IGJlIHRvIHJlLWNvbm5lY3QgdGhlIHBvcnQsIGFuZCB0aGlzIHdpbGwgYmUgYSBkZWFkIGVuZCBmb3IgbWUuIFdpdGggdGhlc2UgdGhvdWdodHMgaW4gbWluZCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjU1LjY1MzQ0OTUyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDY2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVjb25uZWN0X3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0zND1zdGF0aWMgdm9pZCBzZXJpb19hZGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzYtc3RhdGljIHZvaWQgc2VyaW9fZGlzY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTE4OT1zdGF0aWMgdm9pZCBzZXJpb19oYW5kbGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwMy1cXHRcXHRjYXNlIFNFUklPX1JFQ09OTkVDVF9QT1JUOlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzoyMDQ6XFx0XFx0XFx0c2VyaW9fcmVjb25uZWN0X3BvcnQoZXZlbnQtXFx1MDAzZW9iamVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIwNS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz01MjY9c3RhdGljIHZvaWQgc2VyaW9fZGVzdHJveV9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTU4LSAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1NTk6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NjAte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTU3NT1zdGF0aWMgdm9pZCBzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShzdHJ1Y3Qgc2VyaW8gKnJvb3QpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgwLVxcdGRvIHtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTgxOlxcdFxcdGVycm9yID0gc2VyaW9fcmVjb25uZWN0X3BvcnQocyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU4Mi1cXHRcXHRpZiAoIWVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQwOjU1LjcwMjM2MTcyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTUxNTk4MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgU2VyaW8gRHJpdmVyIERpc2Nvbm5lY3QgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZGlzY29ubmVjdCBmbG93IGZvciB0aGlzIFNlcmlvIGRyaXZlciBhbmQgaXQgbG9va3MgbGlrZSBgc2VyaW9fcmVjb25uZWN0X3BvcnRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gd2F0Y2guIEkgc2VlIGl0J3MgdHJpZ2dlcmVkIGZyb20gYm90aCBgc2VyaW9faGFuZGxlX2V2ZW50YCBhbmQgYHNlcmlvX3JlY29ubmVjdF9zdWJ0cmVlYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHNob3dpbmcgbWUgdGhlIGxpa2VseSBwb2ludHMgb2YgZW50cnkgZm9yIHJlY29ubmVjdCBhdHRlbXB0cyBhbmQgdGhvc2UgZXZlbnRzIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGVtLiBOb3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseSAqdW5yZWdpc3RlcnMqIHRoZSBkcml2ZXIgYW5kIGlmIHRoYXQgZnVuY3Rpb24gaXMgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3RzIHRvIHNlZSB3aGF0IGlzIGxpa2VseSBpbmZsdWVuY2luZyB0aGUgcmVjb25uZWN0LiBMZXQncyBkaWcgaW50byBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBzZWUgd2hhdCBpdCdzIGRvaW5nLiBIb3BlZnVsbHksIGl0IHdpbGwgdGVsbCBtZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MDo1OC44NTM5NjI2MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDQ4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9ODIzPUVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyNTp2b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4NDY6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDA6NTguOTAxMDE2OTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDcxMTM0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLCBtZWFuaW5nIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBpZiB0aGVyZSdzIGFueSBwb3RlbnRpYWwgZm9yIGlzc3Vlcy4gTGV0J3MgdHJhY2UgYmFjay4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBzZXJpb19yZWNvbm5lY3RgIGZ1bmN0aW9uLCBzaW5jZSByZWNvbm5lY3RzIGFyZSBvZnRlbiBpbnZvbHZlZCB3aGVuIGRyaXZlcnMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCBkdXJpbmcgaG90cGx1ZyBvciBzeXN0ZW0gcmVzdGFydCBzY2VuYXJpb3MuIEFuZCBJIHNlZSB0aGF0IGl0IHRyaWdnZXJzIGBTRVJJT19SRUNPTk5FQ1RfUE9SVGAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIGFib3V0IGhvdyB0aGUgZHJpdmVyIG1pZ2h0IGludGVyYWN0IHdpdGggdW5yZWdpc3RyYXRpb24gb3Igb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHN0YWNrIGZyb20gYHNlcmlvX3JlY29ubmVjdGAgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBUaGlzIGlzIHRoZSByaWdodCBzdGFydGluZyBwb2ludCwgSSB0aGluay5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjAyLjE0ODEzMjgxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzOTE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVjb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzQ9c3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM1OnN0YXRpYyBpbnQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2LXN0YXRpYyB2b2lkIHNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Mzc6c3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3N1YnRyZWUoc3RydWN0IHNlcmlvICpzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM4LXN0YXRpYyB2b2lkIHNlcmlvX2F0dGFjaF9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00MD1zdGF0aWMgaW50IHNlcmlvX2Nvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDc6c3RhdGljIGludCBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz0xODk9c3RhdGljIHZvaWQgc2VyaW9faGFuZGxlX2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDMtXFx0XFx0Y2FzZSBTRVJJT19SRUNPTk5FQ1RfUE9SVDpcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjA0OlxcdFxcdFxcdHNlcmlvX3JlY29ubmVjdF9wb3J0KGV2ZW50LVxcdTAwM2VvYmplY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy0yMDUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjEyLVxcdFxcdGNhc2UgU0VSSU9fUkVDT05ORUNUX1NVQlRSRUU6XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjIxMzpcXHRcXHRcXHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShldmVudC1cXHUwMDNlb2JqZWN0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTM1Nz1zdGF0aWMgc3NpemVfdCBkcnZjdGxfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzY2LVxcdFxcdH0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBcXFwicmVjb25uZWN0XFxcIiwgY291bnQpKSB7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjM2NzpcXHRcXHRcXHRzZXJpb19yZWNvbm5lY3Rfc3VidHJlZShzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM2OC1cXHRcXHR9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgXFxcInJlc2NhblxcXCIsIGNvdW50KSkge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTUyNj1zdGF0aWMgdm9pZCBzZXJpb19kZXN0cm95X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01NTgtICovXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU1OTpzdGF0aWMgaW50IHNlcmlvX3JlY29ubmVjdF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU2MC17XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjU2MTpcXHRpbnQgZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfZHJpdmVyKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTYyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTU3NC0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NTc1OnN0YXRpYyB2b2lkIHNlcmlvX3JlY29ubmVjdF9zdWJ0cmVlKHN0cnVjdCBzZXJpbyAqcm9vdClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTc2LXtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy01ODAtXFx0ZG8ge1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo1ODE6XFx0XFx0ZXJyb3IgPSBzZXJpb19yZWNvbm5lY3RfcG9ydChzKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNTgyLVxcdFxcdGlmICghZXJyb3IpIHtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTY9RVhQT1JUX1NZTUJPTChzZXJpb19yZXNjYW4pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTctXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1ODp2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTkte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2MS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY2MjpFWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDIuMTk3NTI5MTYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mjk0Mzk3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIHRoZSBTRVJJTyBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYW4gaXNzdWUgaW4gdGhlIFNFUklPIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBzZXJpb19yZWNvbm5lY3RgIGlzIGV4cG9ydGVkLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrOiBgIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldilgIHdpdGhpbiBgc2VyaW9fZmluZF9kcml2ZXJgLiBUaGlzIHNlZW1zIHRvIGJlIGEgZGVmZW5zaXZlIG1lYXN1cmUsIGFpbWluZyB0byBwcmV2ZW50IGBzZXJpb19maW5kX2RyaXZlcmAgZnJvbSBiZWluZyBjYWxsZWQgb24gYSBkZXZpY2UgdGhhdCdzIGFscmVhZHkgYmVlbiB1bnJlZ2lzdGVyZWQuIE1ha2VzIHNlbnNlLlxuXG5UaGUgY29udGV4dCBpcyB0aGF0IGBzZXJpb19maW5kX2RyaXZlcmAgaXMgZ2V0dGluZyBjYWxsZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBkZXZpY2UgbWlnaHQgbm90IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgYW55bW9yZSDigJMgc3lzZnMgKGBkcnZjdGxfc3RvcmVgKSwgYSB3b3JrcXVldWUgKGBzZXJpb19oYW5kbGVfZXZlbnRgKSwgYW5kIHBvdGVudGlhbGx5IGR1cmluZyBwb3J0IHJlY29ubmVjdGlvbiAoYHNlcmlvX3JlY29ubmVjdF9wb3J0YCksIG9yIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiAoYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCkuIElmIHRoZSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdpbGwgcmlnaHRseSByZXR1cm4gZmFsc2UuXG5cblRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBmdXp6aW5nIHdvdWxkIGJlIGEgZ29vZCBpZGVhLiBUaGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCBpcyBgU0VSSU9gLCBvYnZpb3VzbHkuIEdpdmVuIHRoYXQgYHNlcmlvX2ZpbmRfZHJpdmVyYCBpcyBzdGF0aWMsIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBTbywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY2FsbGVycy4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgZHJ2Y3RsX3N0b3JlYCwgYHNlcmlvX2hhbmRsZV9ldmVudGAsIGBzZXJpb19yZWNvbm5lY3RfcG9ydGAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAgYW5kIGBzZXJpb19yZWNvbm5lY3RgLiBPaCwgcmlnaHQsIGBkcnZjdGxfc3RvcmVgIGlzIHN5c2ZzLCBhbmQgYHNlcmlvX2hhbmRsZV9ldmVudGAgaXMgYSB3b3JrcXVldWUuIE9rYXkuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gSG1tLCBsZXQncyBzZWUuIEkgaGF2ZSBgc2VyaW9fcmVzY2FuYCwgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAsIGBzZXJpb19yZWNvbm5lY3RgLCBhbmQgYHNlcmlvX2ludGVycnVwdGAuXG5cbkFscmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBzZXJpb19yZXNjYW5gIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDguNjI2OTcxODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzQxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlcmlvX3Jlc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTYxNz1zdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTEtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1Mjp2b2lkIHNlcmlvX3Jlc2NhbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTMte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1NS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NjpFWFBPUlRfU1lNQk9MKHNlcmlvX3Jlc2Nhbik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1Ny1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NjQ9aXJxcmV0dXJuX3Qgc2VyaW9faW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTcyLVxcdGlmICghZGZsIFxcdTAwMjZcXHUwMDI2IGRldmljZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2KSkge1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NzM6XFx0XFx0c2VyaW9fcmVzY2FuKHNlcmlvKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTc0LVxcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MDguNjc2NzQ0OTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3MjE0MDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBzZXJpb191bnJlZ2lzdGVyX3BvcnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIHVucmVnaXN0cmF0aW9uIG9mIGEgUFMvMiBwb3J0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBTZXJpYWwgSS9PIChTRVJJTykgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgd2UndmUgYWxyZWFkeSBnb3R0ZW4gcGFzdCB0aGUgZHJpdmVyIHByb2JlIGFuZCByZWdpc3RyYXRpb24gcGhhc2UuIE5vdywgdW5yZWdpc3RyYXRpb24uLi4gdGhhdCBtZWFucyB3ZSdyZSBsaWtlbHkgZWl0aGVyOlxuXG4qICAgU2h1dHRpbmcgZG93biBhIGRldmljZSBncmFjZWZ1bGx5LlxuKiAgIEhhbmRsaW5nIGEgaG90LXVucGx1ZyBldmVudCAobGVzcyBsaWtlbHksIGJ1dCBpbXBvcnRhbnQgdG8gY29uc2lkZXIpLlxuKiAgIENsZWFuaW5nIHVwIGFmdGVyIGFuIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiogICBPciBtYXliZSwgaW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8sIHJlLWFzc2lnbmluZyB0aGUgcG9ydCB0byBhIGRpZmZlcmVudCBkZXZpY2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgYXJvdW5kIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbG9ja3MsIG9idmlvdXNseS4gV2UncmUgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudC4gV2hhdCBtdXRleGVzIG9yIHNwaW5sb2NrcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0J3MgdGhlIGFjcXVpc2l0aW9uIG9yZGVyPyBJIG5lZWQgdG8gYmUgc3VyZSB3ZSBhdm9pZCBhbnkgZGVhZGxvY2tzLiBNZW1vcnkgbWFuYWdlbWVudCBpcyB0aGUgbmV4dCBmbGFnIEknbSBnb2luZyB0byBmb2xsb3cuIEFyZSB3ZSBkZWFsbG9jYXRpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIHRoYXQgY291bGQgbGVhZCB0byBhIGNyYXNoIGxhdGVyPyBUaGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNyaXRpY2FsIGhlcmUuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHBhcnRpY3VsYXJseSBpZiB0aGUgcG9ydCBoYWQgYW4gaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBpdC4gQXJlIHdlIGRpc2FibGluZyBpbnRlcnJ1cHRzIGNvcnJlY3RseSBiZWZvcmUgZnJlZWluZyByZXNvdXJjZXM/IFRoZSB0aW1pbmcgb2YgdGhhdCBpcyBhbHdheXMgY3J1Y2lhbC4gQW5kIG9mIGNvdXJzZSwgSSdtIGFscmVhZHkgd29uZGVyaW5nIGFib3V0IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIHVucmVnaXN0cmF0aW9uIGFuZCB0aGUgZGV2aWNlIGl0c2VsZiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBwb3J0LlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB1bnJlZ2lzdHJhdGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24/IERvZXMgaXQgcmV0dXJuIGFuIGVycm9yIGNvZGU/IEhvdyBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGV4cGVjdGVkIHRvIGhhbmRsZSBpdD8gVW5kZXJzdGFuZGluZyB0aGUgcmV0dXJuIHBhdGggaXMgZXNzZW50aWFsIGZvciBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkuIEknbGwgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgY2FsbHNpdGVzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MTIuOTQ4ODg4MDc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb191bnJlZ2lzdGVyX3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NzM9RVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Ny0gKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njc4OnZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3OS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg0LX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6Njg1OkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToxMi45OTc2NjMyNzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMTA1MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0aGlua2luZywgXCJPa2F5LCB3ZSdyZSBsb29raW5nIGF0IGBzZXJpb19yZWdpc3Rlcl9wb3J0YC4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkcml2ZXItbGV2ZWwgZnVuY3Rpb24/IFBhcnQgb2YgYSBicm9hZGVyIGZyYW1ld29yaz8gV2hhdCdzIHRoZSAqd2h5KiBiZWhpbmQgaXRzIHVzZT9cIiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHB1bGxpbmcgdXAgYXNzb2NpYXRlZCBzdHJ1Y3RzOiBgc2VyaW9fcG9ydGAsIGBzZXJpb19kcml2ZXJgLCBhbnkgcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbXMgKGxpa2UgYG11dGV4ZXNgIG9yIGBzcGlubG9ja3NgKS5cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgYXJlOiB3aGF0IGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkL3JlZ2lzdGVyZWQgd2l0aCB0aGlzIGNhbGw/IElzIHRoaXMgYSBzaW1wbGUgcmVnaXN0cmF0aW9uIG9yIGFyZSB3ZSBtYW5hZ2luZyByZXNvdXJjZXMgdG9vPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBNZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCByZXNvdXJjZSBjbGFpbWluZywgYWxsIGNvbWUgdG8gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzICpiZWluZyogcmVnaXN0ZXJlZCBhbmQgdGhlIG92ZXJhbGwgc2V0dXAuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBkYXRhIGZsb3dzIGluIGFuZCBvdXQgb2YgaXQsIGFuZCBjb25maXJtIHRoZSByZWxldmFudCBjYWxsYmFja3MgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGRyaXZlci4gTGV0J3Mgc2VlIGlmIHRoZSBpbnRlcmZhY2UgaXMgYmxvY2tpbmcgb3IgYXN5bmNocm9ub3VzIHRvbyAtIGFuZCBpZiBhbnkgc3BlY2lmaWMgSVJRLWhhbmRsaW5nIG9yIERNQSBzZXR1cCBpcyByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjE2LjM5ODcxNzY4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyODgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY2Mj1FWFBPUlRfU1lNQk9MKHNlcmlvX3JlY29ubmVjdCk7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjY3LSAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2Njg6dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY2OS17XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcyLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjczOkVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToxNi40NDcwMTI2OTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3OTkxODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBzZXJpb19yZWdpc3Rlcl9kcml2ZXJgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHNlcmlvX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24uIFRoYXQncyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgaG93IGEgbmV3IFNlcklPIGRyaXZlciBpbnRlZ3JhdGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgU2VySU8gY29yZS4gVGhpbmdzIGxpa2UgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBkZXZpY2UgcHJvYmluZywgYW5kIG9mIGNvdXJzZSwgdGhlIGRldmljZSBzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBhbGwgY3J1Y2lhbCBwaWVjZXMuIExldCdzIHNlZSBpZiB0aGlzIG9uZSBpcyBjb3JyZWN0bHkgbWFuYWdpbmcgdGhlIGRyaXZlcidzIHByZXNlbmNlLCBlbnN1cmluZyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGF0IGl0J3MgZ3JhY2VmdWxseSBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjAuMDI2OTMyOTQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI4MjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz03NzY9c3RhdGljIHZvaWQgc2VyaW9fYXR0YWNoX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzg1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo3ODY6aW50IF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy03ODcte1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTgyMi19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjgyMzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MToyMC4wNzQyMTg4MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NjUwODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTZXJpbyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQga2VlcHMgY2lyY2xpbmcgYXJvdW5kIHRoZXNlIGBzZXJpb2Agc3ltYm9sczogYHNlcmlvX3JlY29ubmVjdGAsIGBzZXJpb19yZXNjYW5gLCBgX19zZXJpb19yZWdpc3Rlcl9wb3J0YCwgYHNlcmlvX3VucmVnaXN0ZXJfcG9ydGAsIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmAsIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY29yZSBmb2N1cyBwb2ludHMgaGVyZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBkcml2ZSB0aGUgaW50ZXJhY3Rpb24uXG5cbldhaXQgYSBzZWNvbmQsIHRoZXJlJ3MgYSBjcml0aWNhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHNvbGlkaWZ5LiBUaGF0IGBzZXJpb19maW5kX2RyaXZlcmAgZnVuY3Rpb24sIEkganVzdCByZWFsaXplZCB0aGF0IGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgd29ya3F1ZXVlIGhhbmRsZXIuIEFuZCB0aGUgd29ya3F1ZXVlIGlzIHNjaGVkdWxlZCBieSBgc2VyaW9fcXVldWVfZXZlbnRgLiBBaCwgbm93IHRoYXQgSSBoYXZlIHRoaXMgY29ubmVjdGlvbiwgdGhlIHBpY3R1cmUgYmVjb21lcyBhIGxvdCBjbGVhcmVyLiBUaGVzZSBldmVudHMgYXJlIGJlaW5nIGhhbmRsZWQgYXN5bmNocm9ub3VzbHksIGVmZmljaWVudGx5LiBUaGUgd29ya2Zsb3cgaXMgY3JpdGljYWwgdG8gdGhlIGZ1bmN0aW9uYWxpdHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjQuNDcwNzMwMTc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgxMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXJpb19xdWV1ZV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTIyNj1zdGF0aWMgREVDTEFSRV9XT1JLKHNlcmlvX2V2ZW50X3dvcmssIHNlcmlvX2hhbmRsZV9ldmVudCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTIyNy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MjI4OnN0YXRpYyBpbnQgc2VyaW9fcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lcixcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMjI5LVxcdFxcdFxcdCAgICAgZW51bSBzZXJpb19ldmVudF90eXBlIGV2ZW50X3R5cGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY1My17XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY1NDpcXHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVTQ0FOX1BPUlQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTUtfVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTY1OD12b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NTkte1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjA6XFx0c2VyaW9fcXVldWVfZXZlbnQoc2VyaW8sIE5VTEwsIFNFUklPX1JFQ09OTkVDVF9TVUJUUkVFKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjYxLX1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02Njg9dm9pZCBfX3NlcmlvX3JlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjcwLVxcdHNlcmlvX2luaXRfcG9ydChzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY3MTpcXHRzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgb3duZXIsIFNFUklPX1JFR0lTVEVSX1BPUlQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NzItfVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODEzLVxcdFxcdGRydi1cXHUwMDNlbWFudWFsX2JpbmQgPSBmYWxzZTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODE0OlxcdFxcdGVycm9yID0gc2VyaW9fcXVldWVfZXZlbnQoZHJ2LCBOVUxMLCBTRVJJT19BVFRBQ0hfRFJJVkVSKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODE1LVxcdFxcdGlmIChlcnJvcikge1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTkwOD1zdGF0aWMgaW50IHNlcmlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI2LVxcdFxcdCAqL1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5Mjc6XFx0XFx0c2VyaW9fcXVldWVfZXZlbnQoc2VyaW8sIE5VTEwsIFNFUklPX1JFQ09OTkVDVF9QT1JUKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTI4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjQuNTE4NTQ1OTE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzAyMTUzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJpbyBEcml2ZXIgTG9hZGluZyBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGRyaXZlcnMgZ2V0IGNvbm5lY3RlZCB0byBzZXJpYWwgZGV2aWNlcyBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc2VyaW9gIHN1YnN5c3RlbS4gSXQgc2VlbXMgbGlrZSB0aGUgYHNlcmlvX2ZpbmRfZHJpdmVyYCBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHRoaXMgcHJvY2Vzcy4gSSd2ZSBub3RpY2VkIHRoYXQgaXQncyBpbnZva2VkIGluIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MuIEZpcnN0LCBpdCBnZXRzIGNhbGxlZCB3aGVuIGhhbmRsaW5nIGV2ZW50cyByZWxhdGVkIHRvIGRldmljZSBjaGFuZ2VzIC0gYFNFUklPX1JFU0NBTl9QT1JUYCwgYFNFUklPX1JFQ09OTkVDVF9QT1JUYCwgb3IgYFNFUklPX0FUVEFDSF9EUklWRVJgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHNpdHVhdGlvbnMgd2hlcmUgd2UnZCBuZWVkIHRvIGZpbmQgYSBzdWl0YWJsZSBkcml2ZXIuXG5cbkJleW9uZCB0aGF0LCB0aGUgY29kZSBhbHNvIGNhbGxzIGBzZXJpb19maW5kX2RyaXZlcmAgd2hlbiBhIGRyaXZlciBpcyB1bnJlZ2lzdGVyZWQsIHZpYSBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdW5yZWdpc3RyYXRpb24gbWF5IGludm9sdmUgZmluZGluZyBuZXcgZHJpdmVycyB0byBoYW5kbGUgdGhlIGRldmljZSwgb3IgZW5zdXJpbmcgbm8gZHJpdmVyIHJlbWFpbnMgYm91bmQuXG5cbkZpbmFsbHksIGFuZCBpbnRlcmVzdGluZ2x5LCBgZHJ2Y3RsX3N0b3JlYCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggZHJpdmVyIGNvbnRyb2wgdmlhIGEgc3lzZnMgaW50ZXJmYWNlIG9yIHNpbWlsYXIsIGFsc28gY2FsbHMgYHNlcmlvX2ZpbmRfZHJpdmVyYC4gVGhpcyBjb25maXJtcyBpdHMgY29yZSByb2xlIGluIGRyaXZlciBzZWxlY3Rpb24uIE5vdywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgZHJ2Y3RsX3N0b3JlYCBpbXBsZW1lbnRhdGlvbiBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYCB0byBzZWUgaG93IGl0IHVzZXMgYHNlcmlvX2ZpbmRfZHJpdmVyYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgaW1wbGljYXRpb25zIGZvciBkcml2ZXIgbWFuYWdlbWVudC4gVGhpcyB3aWxsIGxpa2VseSBpbGx1bWluYXRlIHRoZSBtZWNoYW5pc21zIGRyaXZpbmcgdGhlIGRyaXZlciBtYXRjaGluZyBhbmQgYmluZGluZyB0aGF0IHNlZW0gdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjI4LjY0ODc2NDA3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjA5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJ2Y3RsX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9MzUxPXN0YXRpYyBzc2l6ZV90IGV4dHJhX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTM1Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6MzU3OnN0YXRpYyBzc2l6ZV90IGRydmN0bF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtMzU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MjguNjk1NDMwMjc0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTc4NDUwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgYGRydmN0bF9zdG9yZWAgU3lzZnMgQXR0cmlidXRlKipcblxuQWxyaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIGBkcnZjdGxfc3RvcmVgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhlIGNvbnRleHQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYFNFUklPYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0gdG8gdW5kZXJzdGFuZCBob3cgYFNFUklPYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGVuYWJsZXMuIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGlzIGF0dHJpYnV0ZSBpcyBkZWNsYXJlZCBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIG92ZXJhbGwgcHVycG9zZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjMxLjU1MzI3ODI2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NzMxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctNC0jXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjU6Y29uZmlnIFNFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlNlcmlhbCBJL08gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNz1pZiBTRVJJT1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6Mjk6Y29uZmlnIFNFUklPX0k4MDQyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJpODA0MiBQQyBLZXlib2FyZCBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQyLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0Mzpjb25maWcgU0VSSU9fU0VSUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiU2VyaWFsIHBvcnQgbGluZSBkaXNjaXBsaW5lXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo1ODpjb25maWcgU0VSSU9fUTQwS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJRNDAga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02MS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6NjI6Y29uZmlnIFNFUklPX1BBUktCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiUGFyYWxsZWwgcG9ydCBrZXlib2FyZCBhZGFwdGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTc1LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo3Njpjb25maWcgU0VSSU9fUlBDS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTc3LVxcdHRyaXN0YXRlIFxcXCJBY29ybiBSaXNjUEMga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04Ni1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6ODc6Y29uZmlnIFNFUklPX0FNQkFLTUlcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkFNQkEgS01JIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkxOmNvbmZpZyBTRVJJT19TQTExMTFcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctOTItXFx0dHJpc3RhdGUgXFxcIkludGVsIFNBMTExMSBrZXlib2FyZCBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk0LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NTpjb25maWcgU0VSSU9fR1NDUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTEzMT1jb25maWcgSElMX01MQ1xcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM1OmNvbmZpZyBTRVJJT19QQ0lQUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0NS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTQ2OmNvbmZpZyBTRVJJT19NQUNFUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiU0dJIE8yIE1BQ0UgUFMvMiBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1NS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTU2OmNvbmZpZyBTRVJJT19TR0lfSU9DM1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIlNHSSBJT0MzIFBTLzIgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2Njpjb25maWcgU0VSSU9fTElCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiUFMvMiBkcml2ZXIgbGlicmFyeVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNzUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE3Njpjb25maWcgU0VSSU9fUkFXXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE3Ny1cXHR0cmlzdGF0ZSBcXFwiUmF3IGFjY2VzcyB0byBzZXJpbyBwb3J0c1xcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTAtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE5MTpjb25maWcgU0VSSU9fQUxURVJBX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xOTItXFx0dHJpc3RhdGUgXFxcIkFsdGVyYSBVUCBQUy8yIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTk5LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyMDA6Y29uZmlnIFNFUklPX0FNU19ERUxUQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMDEtXFx0dHJpc3RhdGUgXFxcIkFtc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIxNTpjb25maWcgU0VSSU9fUFMyTVVMVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMTYtXFx0dHJpc3RhdGUgXFxcIlRRQyBQUy8yIG11bHRpcGxleGVyXFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyMy1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjI0OmNvbmZpZyBTRVJJT19BUkNfUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIyNS1cXHR0cmlzdGF0ZSBcXFwiQVJDIFBTLzIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMzMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIzNDpjb25maWcgU0VSSU9fQVBCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiR1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI0NDpjb25maWcgU0VSSU9fT0xQQ19BUFNQXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiT0xQQyBBUC1TUCBpbnB1dCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI1ND1jb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNjQ6Y29uZmlnIFNFUklPX1NVTjRJX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBBMTAgUFMvMiBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjczLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoyNzQ6Y29uZmlnIFNFUklPX0dQSU9fUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZSBcXFwiR1BJTyBQUy8yIGJpdCBiYW5naW5nIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzEuNjAwMTU2ODk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTc2MTc3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZXJpYWwgSW5wdXQvT3V0cHV0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBTRVJJT2AuIFJpZ2h0LCBgU0VSSU9gIGlzIGEgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGF0J3MgYSBrZXkgZmlyc3QgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlcj8gTGV0J3Mgc2VlLi4uIEFoLCBgVVNFUklPYCBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIGBkcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlYC4gVGhhdCdzIGltcG9ydGFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgVVNFUklPYCBhcyB3ZWxsLiBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBgVVNFUklPYCBjb25maWd1cmF0aW9uIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjM0LjM5Nzc3NzUwOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI3ND1jb25maWcgU0VSSU9fR1BJT19QUzJcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yODQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI4NTpjb25maWcgVVNFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI4Ni1cXHR0cmlzdGF0ZSBcXFwiVXNlciBzcGFjZSBzZXJpbyBwb3J0IGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTozNC40NTMxOTcwODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNjM5MjU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBVU0VSSU8gZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYFVTRVJJT2AgaXMgYSBkcml2ZXIsIHJpZ2h0PyBBbmQgaXQgbGV0cyB1c2Vyc3BhY2UgY29kZSBjcmVhdGUgaXRzIG93biBzZXJpbyBwb3J0cy4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZ1enppbmcuIElmIEkgY2FuIGNyZWF0ZSBjdXN0b20gc2VyaW8gcG9ydHMgZnJvbSB1c2Vyc3BhY2UsIEkgY2FuIGNvbnRyb2wgdGhlIGlucHV0cyBtdWNoIG1vcmUgZGlyZWN0bHkgYW5kIHByZWRpY3RhYmx5IHRoYW4gSSBjb3VsZCBvdGhlcndpc2UuIFRoYXQgbGV2ZWwgb2YgY29udHJvbCBpcyAqZXhhY3RseSogd2hhdCBJIG5lZWQgdG8gY3JhZnQgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuXG5cblRoZSBuZXh0IGNyaXRpY2FsIHF1ZXN0aW9uLCB0aG91Z2gsIGlzIHdoZXRoZXIgYFVTRVJJT2AgaXRzZWxmIHJlbGllcyBvbiB0aGUgYFNFUklPYCBzdWJzeXN0ZW0uIElmIGl0IGRvZXMsIHRoZW4gYW55IGJ1Z3MgaW4gYFNFUklPYCB3aWxsIGJlIGV4cG9zZWQuIElmIGBVU0VSSU9gIGNyZWF0ZXMgaXQncyBvd24gYWJzdHJhY3Rpb24gYW5kIGl0IGlzbid0IGRlcGVuZGVudCBvbiBgU0VSSU9gIGl0c2VsZiwgdGhhdCdzIGFsc28gc29tZXRoaW5nIGludGVyZXN0aW5nLCB0aG91Z2ggcGVyaGFwcyBub3QgYXMgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzcuMzU5NTkyMjQ5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAxMzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjk9Y29uZmlnIFNFUklPX0k4MDQyXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjMyOlxcdGRlcGVuZHMgb24gQVJDSF9NSUdIVF9IQVZFX1BDX1NFUklPXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTMzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz00Mz1jb25maWcgU0VSSU9fU0VSUE9SVFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo0NjpcXHRkZXBlbmRzIG9uIFRUWVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9NTg9Y29uZmlnIFNFUklPX1E0MEtCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy01OS1cXHR0cmlzdGF0ZSBcXFwiUTQwIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gUTQwXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYxLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz02Mj1jb25maWcgU0VSSU9fUEFSS0JEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJQYXJhbGxlbCBwb3J0IGtleWJvYXJkIGFkYXB0ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gUEFSUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy02NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9NzY9Y29uZmlnIFNFUklPX1JQQ0tCRFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03Ny1cXHR0cmlzdGF0ZSBcXFwiQWNvcm4gUmlzY1BDIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjc4OlxcdGRlcGVuZHMgb24gQVJDSF9BQ09STlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy03OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz04Nz1jb25maWcgU0VSSU9fQU1CQUtNSVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiQU1CQSBLTUkga2V5Ym9hcmQgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6ODk6XFx0ZGVwZW5kcyBvbiBBUk1fQU1CQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9OTE9Y29uZmlnIFNFUklPX1NBMTExMVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05Mi1cXHR0cmlzdGF0ZSBcXFwiSW50ZWwgU0ExMTExIGtleWJvYXJkIGNvbnRyb2xsZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjkzOlxcdGRlcGVuZHMgb24gU0ExMTExXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk0LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz05NT1jb25maWcgU0VSSU9fR1NDUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJIUCBHU0MgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIEdTQ1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy05OC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xMDk9Y29uZmlnIEhQX1NEQ1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMTAtXFx0dHJpc3RhdGUgXFxcIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMTE6XFx0ZGVwZW5kcyBvbiAoR1NDIHx8IEhQMzAwKSBcXHUwMDI2XFx1MDAyNiBTRVJJT1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMTItXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTMxPWNvbmZpZyBISUxfTUxDXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzMi1cXHR0cmlzdGF0ZSBcXFwiSElMIE1MQyBTdXBwb3J0IChuZWVkZWQgZm9yIEhJTCBpbnB1dCBkZXZpY2VzKVxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTMzOlxcdGRlcGVuZHMgb24gSFBfU0RDXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MTM1PWNvbmZpZyBTRVJJT19QQ0lQUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJQQ0kgUFMvMiBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxMzc6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTM4OlxcdGRlcGVuZHMgb24gSEFTX0lPUE9SVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTE0Nj1jb25maWcgU0VSSU9fTUFDRVBTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlNHSSBPMiBNQUNFIFBTLzIgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MTQ4OlxcdGRlcGVuZHMgb24gU0dJX0lQMzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xNTY9Y29uZmlnIFNFUklPX1NHSV9JT0MzXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTE1Ny1cXHR0cmlzdGF0ZSBcXFwiU0dJIElPQzMgUFMvMiBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxNTg6XFx0ZGVwZW5kcyBvbiBTR0lfTUZEX0lPQzNcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTU5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xNjY9Y29uZmlnIFNFUklPX0xJQlBTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0xNjctXFx0dHJpc3RhdGUgXFxcIlBTLzIgZHJpdmVyIGxpYnJhcnlcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjE2ODpcXHRkZXBlbmRzIG9uIFNFUklPX0k4MDQyIHx8IFNFUklPX0k4MDQyPW5cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTY5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0xOTE9Y29uZmlnIFNFUklPX0FMVEVSQV9QUzJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTkyLVxcdHRyaXN0YXRlIFxcXCJBbHRlcmEgVVAgUFMvMiBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZzoxOTM6XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMTk0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yMDA9Y29uZmlnIFNFUklPX0FNU19ERUxUQVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMDEtXFx0dHJpc3RhdGUgXFxcIkFtc3RyYWQgRGVsdGEgKEUzKSBtYWlsYm9hcmQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjAyOlxcdGRlcGVuZHMgb24gTUFDSF9BTVNfREVMVEFcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjAzLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIyND1jb25maWcgU0VSSU9fQVJDX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjUtXFx0dHJpc3RhdGUgXFxcIkFSQyBQUy8yIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjIyNjpcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yMjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTIzND1jb25maWcgU0VSSU9fQVBCUFMyXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiR1JMSUIgQVBCUFMyIFBTLzIga2V5Ym9hcmQvbW91c2UgY29udHJvbGxlclxcXCJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc6MjM2OlxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjQ0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjQ1LVxcdHRyaXN0YXRlIFxcXCJPTFBDIEFQLVNQIGlucHV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIEFSQ0hfTU1QIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnPTI1ND1jb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI1NS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI1NjpcXHRkZXBlbmRzIG9uIEhZUEVSVl9WTUJVU1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNTctXFx0ZGVmYXVsdCBIWVBFUlZfVk1CVVNcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZz0yNjQ9Y29uZmlnIFNFUklPX1NVTjRJX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjUtXFx0dHJpc3RhdGUgXFxcIkFsbHdpbm5lciBBMTAgUFMvMiBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjc0PWNvbmZpZyBTRVJJT19HUElPX1BTMlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGUgXFxcIkdQSU8gUFMvMiBiaXQgYmFuZ2luZyBkcml2ZXJcXFwiXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI3NjpcXHRkZXBlbmRzIG9uIEdQSU9MSUJcXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjc3LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6MzcuNDA3NjExOTE4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDIxMjc4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipOYXZpZ2F0aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgVVNFUklPYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3Mgc2VsZi1jb250YWluZWQsIG5vdCByZWxpYW50IG9uIGFueSBvdGhlciBvcHRpb25zLiBIb3dldmVyLCBJJ20gc2VlaW5nIGl0J3Mgc29tZWhvdyBuZXN0ZWQgd2l0aGluIHRoZSBgaWYgU0VSSU9gIGNvbmRpdGlvbmFsIGJsb2NrLiBUaGF0J3MgYSBsaXR0bGUgY29uZnVzaW5nLiBMZXQncyBtYWtlIHN1cmUgSSdtIHJlYWRpbmcgdGhlIEtjb25maWcgZmlsZSBjb3JyZWN0bHkuXG5cbkxldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgd2hlcmUgYFVTRVJJT2AgaXMgZGVmaW5lZCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnYC4gQWgsIHRoZXJlIGl0IGlzLCByaWdodCBhdCB0aGUgdGFpbCBlbmQgb2YgdGhhdCBmaWxlLiBPa2F5LCBub3cgbGV0J3MgY29uZmlybSB0aGUgc3Vycm91bmRpbmcgc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBpZiwgaW5kZWVkLCBpdCdzIGRlZmluZWQgaW5zaWRlIHRoYXQgYGlmIFNFUklPYCBibG9jay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc2ludGVycHJldGluZyB0aGUgZmlsZSBzdHJ1Y3R1cmUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgc3BlY2lmaWMgcmVsYXRpb25zaGlwIGJldHdlZW4gY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gYnVpbGRzIGFuZCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTo0MC42MDk3NDM1MDdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDY3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9Mjg1PWNvbmZpZyBVU0VSSU9cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yOTgtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI5OTplbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MTo0MC42NTc4MTc0ODdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjQ0NDcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU0VSSU8gRHJpdmVyIExvZ2ljKipcblxuT2theSwgc28gSSdtIG5hdmlnYXRpbmcgdGhpcyBgc2VyaW9gIGNvZGUgYW5kIEkgc2VlIHdlJ3JlIGRlZmluaXRlbHkgaW5zaWRlIGFuIGBpZiBTRVJJT2AgYmxvY2suIFRoYXQncyBnb29kLCBjb25maXJtcyBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBOb3csIHRoZSBrZXkgZGVwZW5kZW5jeSBhcHBlYXJzIHRvIGJlIG9uIGJvdGggYFNFUklPYCBhbmQgYFVTRVJJT2AgYmVpbmcgZGVmaW5lZC4gR290IGl0LlxuXG5NeSBmb2N1cyBpcyBuYXJyb3dpbmcgZG93biB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGFuZCB0aGVzZSBzeW1ib2wgbmFtZXMgYXJlIGp1bXBpbmcgb3V0IGF0IG1lOiBgc2VyaW9fcmVjb25uZWN0YCwgYHNlcmlvX3Jlc2NhbmAsIGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYW5kIGBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcmAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaG9va3MgYW5kIG1hbmFnZW1lbnQgcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgY2FsbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGVtLlxuXG5IYW5nIG9uLi4uIEkganVzdCBzcG90dGVkIGBzZXJpb19maW5kX2RyaXZlcmAgYmVpbmcgY2FsbGVkIGZyb20gYGRydmN0bF9zdG9yZWAuICBgZHJ2Y3RsX3N0b3JlYCwgYWgsIHJpZ2h0LCB0aGF0J3MgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQgY29ubmVjdGlvbiBpcyBpbXBvcnRhbnQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHJlbGF0aW9uc2hpcCwgc28gSSBoYXZlIGEgZGlyZWN0IHBhdGggaW50byB0aGUgZHJpdmVyJ3MgbG9va3VwIGZ1bmN0aW9uLiBJdCBtZWFucyB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcy4gXG5cbk9rYXksIG5vdyB0aGUgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSBvdGhlciBzdWNoIHN5c2ZzIGF0dHJpYnV0ZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBkcml2ZXI/ICBUaW1lIHRvIGdvIGJhY2sgdG8gYGRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY2AgYW5kIGh1bnQgZm9yIGBERVZJQ0VfQVRUUmAgY2FsbHMuIFRoYXQgd2lsbCBiZSB0aGUgbmV4dCBwbGFjZSB0byBsb29rIGZvciBzeXNmcyBpbnRlcmFjdGlvbiBwb2ludHMgdG8gZXhwYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NDQuOTgwMjY0Nzg0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg4Mzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZJQ0VfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTQwOT1zdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9pZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00MTUtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNjpzdGF0aWMgREVWSUNFX0FUVFJfUk8odHlwZSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQxNzpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocHJvdG8pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MTg6c3RhdGljIERFVklDRV9BVFRSX1JPKGlkKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDE5OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhleHRyYSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQyMC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz00Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc2VyaW9faWRfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy00MzMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQzNDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW9kYWxpYXMpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0MzU6c3RhdGljIERFVklDRV9BVFRSX1dPKGRydmN0bCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjQzNjpzdGF0aWMgREVWSUNFX0FUVFIoZGVzY3JpcHRpb24sIFNfSVJVR08sIHNlcmlvX3Nob3dfZGVzY3JpcHRpb24sIE5VTEwpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo0Mzc6c3RhdGljIERFVklDRV9BVFRSKGJpbmRfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sIHNlcmlvX3Nob3dfYmluZF9tb2RlLCBzZXJpb19zZXRfYmluZF9tb2RlKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NDM4OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTQzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NDUuMDUxMTUzNjI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTE4MzM4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgU2VyaW8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGZ1enogaXQgZWZmZWN0aXZlbHkuIEkgc2VlIGBkcnZjdGxgIGlzIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBgZHJ2Y3RsX3N0b3JlYCBpcyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyDigJMgdGhhdCdzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KWAgd2l0aGluIGBzZXJpb19maW5kX2RyaXZlcmAsIHNvIEkgbmVlZCB0byBleHBsb3JlIGhvdyB0aGF0IGNvbmRpdGlvbiBjYW4gYmUgdHJpZ2dlcmVkLlxuXG5NeSBtYWluIGZvY3VzIHdpbGwgYmUgb24gdGhlIFNlcmlvIGRyaXZlciwgcGFydGljdWxhcmx5IHRoZSBpbnRlcnBsYXkgYmV0d2VlbiByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBUaGUgbGlrZWx5IGJ1aWxkIGNvbmZpZ3MgYXJlIGBTRVJJT2AgYW5kIGBVU0VSSU9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBmb3IgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uXG5cbkkgaGF2ZSB0byBjYXJlZnVsbHkgYXNzZXNzIGlmIHRoZSBjYW5kaWRhdGUgc3ltYm9scyBhcmUgc3VpdGFibGUsIGdpdmVuIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIEZpcnN0LCBJIGhhdmUgdGhpcyBsaXN0OlxuXG4qICAgYF9fc2VyaW9fcmVnaXN0ZXJfcG9ydGBcbiogICBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YFxuKiAgIGBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcmBcbiogICBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgXG4qICAgYHNlcmlvX3JlY29ubmVjdGBcbiogICBgc2VyaW9fcmVzY2FuYFxuXG5JIHdhcyBjb25zaWRlcmluZyBgZHJ2Y3RsX3N0b3JlYCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQncyBzdGF0aWMgbWFrZXMgaXQgbGVzcyBkZXNpcmFibGUgcGVyIHRoZSBpbnN0cnVjdGlvbnMuIEFuZCBgc2VyaW9faGFuZGxlX2V2ZW50YCBpcyBhbHNvIHN0YXRpYywgc28gaXQncyBvdXQuIFNvLCBteSBsaXN0IGxvb2tzIGdvb2QuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIGNvbmZpcm0gaG93IHNlcmlvIHBvcnRzIGFyZSBjcmVhdGVkIGZyb20gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFVTRVJJT2AgaXMgaW5kZWVkIHRoZSBvbmx5IHdheSB0byBleHBvc2Ugc2VyaW8gcG9ydHMgdG8gdXNlcnNwYWNlLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjUxLjIwMjk5MDY4M1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTgyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM9MTc4PXN0YXRpYyBpbnQgdXNlcmlvX2V4ZWN1dGVfY21kKHN0cnVjdCB1c2VyaW9fZGV2aWNlICp1c2VyaW8sXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTE5NS1cXHRcXHR1c2VyaW8tXFx1MDAzZXJ1bm5pbmcgPSB0cnVlO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTk2OlxcdFxcdHNlcmlvX3JlZ2lzdGVyX3BvcnQodXNlcmlvLVxcdTAwM2VzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xOTctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjUxLjI0OTk5NDc2M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyNjMzNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHVzZXJpb2AgRHJpdmVyKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gb2YgdGhlIHNlcmlhbCBJL08gcG9ydHMgaW4gdGhlIGB1c2VyaW9gIGRyaXZlci4gTGV0J3Mgc2VlLi4uICpZZXMqLCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGB1c2VyaW9fZXhlY3V0ZV9jbWRgIGZ1bmN0aW9uIGlzIGluZGVlZCB0aGUgb25lIHRoYXQgY2FsbHMgYHNlcmlvX3JlZ2lzdGVyX3BvcnRgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBsaWtlbHkgc2V0dGluZyB1cCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGZvciBhIGNvbW1hbmQuXG5cbk5vdywgd2hlcmUncyB0aGUgY2xlYW51cD8gQWhhLCBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCBnZXRzIGNhbGxlZCBpbiB0d28gcGxhY2VzOiBgdXNlcmlvX2RldmljZV9yZWxlYXNlYCB3aGljaCBpcyB0aGUgbG9naWNhbCBwbGFjZSBmb3IgaXQgdG8gYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgdGVhcmRvd24sIGFuZCBpdCAqYWxzbyogYXBwZWFycyB0aGF0IGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGB1c2VyaW9fZXhlY3V0ZV9jbWRgLiBUaGF0IHNlY29uZCBvbmUgaXMgYSBiaXQgbW9yZSBpbnRlcmVzdGluZywgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGxvZ2ljIHRoZXJlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHVucmVnaXN0cmF0aW9uIGhhcHBlbnMgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uLiBUaGVyZSdzIHByb2JhYmx5IGEgY29udGV4dCB3aGVyZSB3ZSBuZWVkIHRvIGNsZWFuIHVwIHJlc291cmNlcyBlYXJseSwgb3IgaGFuZGxlIGFuIGVycm9yIGNvbmRpdGlvbi4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGR1YWwgY2FsbCBkb2Vzbid0IGludHJvZHVjZSBhIHJhY2UgY29uZGl0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aHkgdW5yZWdpc3RyYXRpb24gY291bGQgYmUgY2FsbGVkIGluIGB1c2VyaW9fZXhlY3V0ZV9jbWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQxOjU1LjI0MjYzMDg4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwODAxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYz05Nj1zdGF0aWMgaW50IHVzZXJpb19jaGFyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwMS1cXHRcXHQvKlxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vdXNlcmlvLmM6MTAyOlxcdFxcdCAqIERvbid0IGZyZWUgdGhlIHNlcmlvIHBvcnQgaGVyZSwgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KClcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwMy1cXHRcXHQgKiBkb2VzIGl0IGZvciB1cy5cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jLTEwNC1cXHRcXHQgKi9cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3VzZXJpby5jOjEwNTpcXHRcXHRzZXJpb191bnJlZ2lzdGVyX3BvcnQodXNlcmlvLVxcdTAwM2VzZXJpbyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby91c2VyaW8uYy0xMDYtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTUuMjkzNzE3MjIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTg0MjQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYHNlcmlvYCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCB0aGlzIGxvb2tzIHByb21pc2luZy4gYFVTRVJJT2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgdG9vbCBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGFyZWEuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0d28ga2V5IGNvbmZpZ3VyYXRpb25zOiBgU0VSSU9gIGFuZCBgVVNFUklPYC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkga25vdyBJIG5lZWQgdG8gdGFyZ2V0IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gVGhvc2Ugd2lsbCBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IGBzZXJpby5jYCBtb3JlIGJyb2FkbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcuIFlvdSBuZXZlciBrbm93IHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBsdXJraW5nLiBBIHRob3JvdWdoIHJldmlldyB3aWxsIHJlYWxseSBoZWxwIG1lIGlkZW50aWZ5IGFueSBibGluZCBzcG90cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTguOTEyMTQ0NjM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjUyPXZvaWQgc2VyaW9fcmVzY2FuKHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU1LX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NjU2OkVYUE9SVF9TWU1CT0woc2VyaW9fcmVzY2FuKTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNjU3LVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02NTg9dm9pZCBzZXJpb19yZWNvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjEtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2NjI6RVhQT1JUX1NZTUJPTChzZXJpb19yZWNvbm5lY3QpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02NjMtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjY4PXZvaWQgX19zZXJpb19yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3Mi19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjY3MzpFWFBPUlRfU1lNQk9MKF9fc2VyaW9fcmVnaXN0ZXJfcG9ydCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTY3NC1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz02Nzg9dm9pZCBzZXJpb191bnJlZ2lzdGVyX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODQtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo2ODU6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX3BvcnQpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy02ODYtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9NjkwPXZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9jaGlsZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAwLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6NzAxOkVYUE9SVF9TWU1CT0woc2VyaW9fdW5yZWdpc3Rlcl9jaGlsZF9wb3J0KTtcXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtNzAyLVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTc4Nj1pbnQgX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtODIyLX1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM6ODIzOkVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04MjQtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jPTgyNT12b2lkIHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydilcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy04NDUtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo4NDY6RVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTg0Ny1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYz05NDI9aW50IHNlcmlvX29wZW4oc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KVxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk1MS19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk1MjpFWFBPUlRfU1lNQk9MKHNlcmlvX29wZW4pO1xcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NTMtXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTU1PXZvaWQgc2VyaW9fY2xvc2Uoc3RydWN0IHNlcmlvICpzZXJpbylcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYy05NjEtfVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYzo5NjI6RVhQT1JUX1NZTUJPTChzZXJpb19jbG9zZSk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk2My1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTY0PWlycXJldHVybl90IHNlcmlvX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLFxcbi0tXFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk3OC19XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk3OTpFWFBPUlRfU1lNQk9MKHNlcmlvX2ludGVycnVwdCk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk4MC1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmM9OTgxPWNvbnN0IHN0cnVjdCBidXNfdHlwZSBzZXJpb19idXMgPSB7XFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMtOTkyLX07XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jOjk5MzpFWFBPUlRfU1lNQk9MKHNlcmlvX2J1cyk7XFxuZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jLTk5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDE6NTguOTU5MjY1NDU4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5NzE1ODMwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNlcmlvIFN1YnN5c3RlbSBCdWcgRml4KipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMgZm9yIHRoaXMgc2VyaW8gYnVnIGZpeC4gSSd2ZSBpZGVudGlmaWVkIHRoZSBjcml0aWNhbCBmdW5jdGlvbnM6IGBfX3NlcmlvX3JlZ2lzdGVyX3BvcnRgLCBgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0YCwgYF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyYCwgYHNlcmlvX3JlY29ubmVjdGAsIGFuZCBgc2VyaW9fcmVzY2FuYC4gSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYHNlcmlvX2ludGVycnVwdGAsIGBzZXJpb19vcGVuYCwgYHNlcmlvX2Nsb3NlYCBhbmQgYHNlcmlvX3VucmVnaXN0ZXJfY2hpbGRfcG9ydGAgYnV0IGBzZXJpb19pbnRlcnJ1cHRgIGlzIHRyaWdnZXJlZCBieSB0aGUgaGFyZHdhcmUsIHNvIGl0IG1pZ2h0IG5vdCBiZSB0aGUgbW9zdCBlZmZlY3RpdmUgZm9yIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyByYWNlIGNvbmRpdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCByZWNvbm5lY3QgcGF0aHdheXMuXG5cbkkgcmVjb25maXJtZWQgdGhhdCB0aGUgYFVTRVJJT2AgZHJpdmVyIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byB3b3JyeSBhYm91dDsgc2ltcGxpZnlpbmcgdGhpbmdzLlxuXG5UaGUga2V5IHRvIHRoaXMgZml4IGxpZXMgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyYCwgYW5kIHRoZSBidWcgaXMgdGhhdCBgZGV2aWNlX2F0dGFjaGAgY2FuIGJlIGNhbGxlZCBvbiBhIGRldmljZSB0aGF0IGlzIG5vIGxvbmdlciByZWdpc3RlcmVkLiBJIGNvbmZpcm1lZCBgc2VyaW9fZmluZF9kcml2ZXJgIGlzIGNhbGxlZCBmcm9tIGBzZXJpb19oYW5kbGVfZXZlbnRgICh3b3JrcXVldWUpLCBgZHJ2Y3RsX3N0b3JlYCAoc3lzZnMpLCBgc2VyaW9fcmVjb25uZWN0X3BvcnRgICh3b3JrcXVldWUvc3lzZnMpIGFuZCBgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJgIChzeXNjYWxsKSwgd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIHRoZXNlIGFyZSB0aGUgbWFpbiB3YXlzIGRldmljZXMgd2lsbCBiZSBhdHRhY2hlZCBhbmQgZGV0YWNoZWQuIFRoZSByb290IGNhdXNlIGlzIGxpa2VseSBjb25jdXJyZW50IG9wZXJhdGlvbnMgZHVyaW5nIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIG9yIHJlY29ubmVjdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgY29uY3VycmVudCByYWNlIGNvbmRpdGlvbi5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCBgU0VSSU9gIGFuZCBgVVNFUklPYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIEkgbWVudGlvbmVkIGVhcmxpZXIgdG8gdHJpZ2dlciB0aGUgcmFjZSBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODA3LCJPdXRwdXRUb2tlbnMiOjE4NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNS45MzA4NTE4ODlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTkxNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VSSU9cIixcbiAgICBcIlVTRVJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfcG9ydFwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgICBcInNlcmlvX3JlY29ubmVjdFwiLFxuICAgIFwic2VyaW9fcmVzY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYGRldmljZV9hdHRhY2goKWAgaXMgY2FsbGVkIG9uIGFuIHVucmVnaXN0ZXJlZCBzZXJpbyBkZXZpY2UgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlcmlvIHBvcnQgaXMgYmVpbmcgdW5yZWdpc3RlcmVkIG9yIHJlY29ubmVjdGVkIGNvbmN1cnJlbnRseSB3aXRoIGRyaXZlciBiaW5kaW5nIG9yIHN5c2ZzIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBzZXJpbyBzdWJzeXN0ZW0gdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgdXNlcmlvYCBkcml2ZXIgYW5kIHN5c2ZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBzZXJpbyBwb3J0IHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBkcml2ZXIgYmluZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRVJJT1wiLFxuICAgIFwiVVNFUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zZXJpb19yZWdpc3Rlcl9wb3J0XCIsXG4gICAgXCJzZXJpb191bnJlZ2lzdGVyX3BvcnRcIixcbiAgICBcIl9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyXCIsXG4gICAgXCJzZXJpb191bnJlZ2lzdGVyX2RyaXZlclwiLFxuICAgIFwic2VyaW9fcmVjb25uZWN0XCIsXG4gICAgXCJzZXJpb19yZXNjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgZGV2aWNlX2F0dGFjaCgpYCBpcyBjYWxsZWQgb24gYW4gdW5yZWdpc3RlcmVkIHNlcmlvIGRldmljZSBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgc2VyaW8gcG9ydCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQgb3IgcmVjb25uZWN0ZWQgY29uY3VycmVudGx5IHdpdGggZHJpdmVyIGJpbmRpbmcgb3Igc3lzZnMgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHNlcmlvIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGB1c2VyaW9gIGRyaXZlciBhbmQgc3lzZnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHNlcmlvIHBvcnQgcmVnaXN0cmF0aW9uLCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNi4wMTY3NzUwNjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTY3MDA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMDo0MjowNi4wMTczODg3NjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjA5NjA4MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2c2VyaW8tXFx1MDAzZWRldilgIGJlZm9yZSBjYWxsaW5nIGBkZXZpY2VfYXR0YWNoKClgIGluIGBzZXJpb19maW5kX2RyaXZlcigpYC4gVGhpcyBpcyBhIGxpZmVjeWNsZS9zdGF0ZSBtYW5hZ2VtZW50IGZpeCB0byBwcmV2ZW50IG9wZXJhdGluZyBvbiBhbiB1bnJlZ2lzdGVyZWQgZGV2aWNlLCB3aGljaCB0eXBpY2FsbHkgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgc3RhdGUgYnVncy4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMTNjY2ZkNDUwNGQ2ODJhOWYzYjM2MTVhNDIyNTUwZWNiNmY0NmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTA6NDA6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbmluZGV4IDU0ZGQyNjI0OWIwMjcuLmMyNGU0MzFhZjY3ODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmNcbisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uY1xuQEAgLTEwOSw2ICsxMDksOSBAQCBzdGF0aWMgdm9pZCBzZXJpb19maW5kX2RyaXZlcihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKVxuIHtcbiBcdGludCBlcnJvcjtcbiBcbitcdGlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2c2VyaW8tXHUwMDNlZGV2KSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0ZXJyb3IgPSBkZXZpY2VfYXR0YWNoKFx1MDAyNnNlcmlvLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm9yICE9IC1FUFJPQkVfREVGRVIpXG4gXHRcdGRldl93YXJuKFx1MDAyNnNlcmlvLVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDEwOjQyOjA2LjAxNzM4OTkzOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDk2MDQ5NTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VyaW8gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jYC4gVGhleSd2ZSBhZGRlZCBhIGNoZWNrIGluIGBzZXJpb19maW5kX2RyaXZlcmA6IGBpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNnNlcmlvLVx1MDAzZWRldikpIHJldHVybjtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqLiBJdCdzIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IGNhbGxpbmcgYGRldmljZV9hdHRhY2hgIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UuIFJpZ2h0LCB0aGlzIG1ha2VzIHNlbnNlIC0gdGhhdCB3b3VsZCBiZSBhIGNsYXNzaWMgcmVjaXBlIGZvciBwcm9ibGVtcyDigJMgdXNlLWFmdGVyLWZyZWUsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBzb21ldGhpbmcgbGlrZSB0aGF0LiBJdCBjb3VsZCBldmVuIGJlIHNvbWV0aGluZyBsZXNzIHNldmVyZSwgYnV0IHN0aWxsIGJhZCwgbGlrZSBhIHdhcm5pbmcgaW4gdGhlIGtlcm5lbCBsb2cuXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzICppc24ndCogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBuZXcgY2hlY2sgaXMgYWxsIGFib3V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJcyB0aGUgZGV2aWNlIHJlYWR5PyBJcyBpdCByZWdpc3RlcmVkPyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIGlzIGEgZ29vZCBzaWduLCBlc3BlY2lhbGx5IGlmIGl0J3MgY2hlY2tpbmcgYGRldi1cdTAwM2VwYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgaW4gbXkgaGVhZCAtIHRoaXMgaXNuJ3QgYWJvdXQgS01TQU4tdHlwZSBpc3N1ZXMgdGhhdCB3b3VsZCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgd2UgaGFkIGEgVUFGLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LCBLQVNBTiwgTE9DS0RFUCwgb3Igc2ltaWxhciB3b3VsZCBoYXZlIHNvbWV0aGluZyB0byBzYXkgYWJvdXQgdGhpcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG5cblNvLCBJ4oCZbSBjb25maWRlbnQgaGVyZS4gVGhlIHBhdGNoIGlzIGFib3V0IGVuc3VyaW5nIHRoZSBkZXZpY2UgaXMgaW4gdGhlIHJpZ2h0IHN0YXRlLCBjaGVja2luZyBgZGV2aWNlX2lzX3JlZ2lzdGVyZWRgIHdoaWNoIG1ha2VzIHN1cmUgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5OZWVkc0tNU0FOID0gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTA6NDI6MTIuMTEzNDQzMDA5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGRldmljZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZzZXJpby1cXHUwMDNlZGV2KWAgYmVmb3JlIGNhbGxpbmcgYGRldmljZV9hdHRhY2goKWAgaW4gYHNlcmlvX2ZpbmRfZHJpdmVyKClgLiBUaGlzIGlzIGEgbGlmZWN5Y2xlL3N0YXRlIG1hbmFnZW1lbnQgZml4IHRvIHByZXZlbnQgb3BlcmF0aW5nIG9uIGFuIHVucmVnaXN0ZXJlZCBkZXZpY2UsIHdoaWNoIHR5cGljYWxseSBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBzdGF0ZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNnNlcmlvLVxcdTAwM2VkZXYpYCBiZWZvcmUgY2FsbGluZyBgZGV2aWNlX2F0dGFjaCgpYCBpbiBgc2VyaW9fZmluZF9kcml2ZXIoKWAuIFRoaXMgaXMgYSBsaWZlY3ljbGUvc3RhdGUgbWFuYWdlbWVudCBmaXggdG8gcHJldmVudCBvcGVyYXRpbmcgb24gYW4gdW5yZWdpc3RlcmVkIGRldmljZSwgd2hpY2ggdHlwaWNhbGx5IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHN0YXRlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwsbzj[1] Phase: Succeeded StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 10:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 10:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2] Phase: Succeeded StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 10:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 10:42:23 +0000 UTC FinishedAt: 2026-08-14 10:42:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwsbzj/series-workflowwsbzj-convert-artifact-4153958183/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 10:42:33 +0000 UTC FinishedAt: 2026-08-14 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 10:42:33 +0000 UTC FinishedAt: 2026-08-14 10:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*47384517-8fb7-4900-bf33-a2bb81624de4,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-workflowwsbzj/series-workflowwsbzj-convert-artifact-4153958183/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": "9e19aa51-3c54-493c-86ea-894ba92d9ad3", "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-workflowwsbzj/series-workflowwsbzj-build-action-3331370685/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 10:42:33 +0000 UTC FinishedAt: 2026-08-14 10:59:14 +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:*47384517-8fb7-4900-bf33-a2bb81624de4,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-workflowwsbzj/series-workflowwsbzj-convert-artifact-4153958183/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": "9e19aa51-3c54-493c-86ea-894ba92d9ad3", "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-workflowwsbzj/series-workflowwsbzj-build-action-3331370685/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 10:59:24 +0000 UTC FinishedAt: 2026-08-14 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 10:59:24 +0000 UTC FinishedAt: 2026-08-14 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 10:59:24 +0000 UTC FinishedAt: 2026-08-14 10:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 10:59:24 +0000 UTC FinishedAt: 2026-08-14 10:59:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwsbzj/series-workflowwsbzj-convert-artifact-2318459606/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 10:59:35 +0000 UTC FinishedAt: 2026-08-14 11:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 10:59:35 +0000 UTC FinishedAt: 2026-08-14 11:01:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e19aa51-3c54-493c-86ea-894ba92d9ad3,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-workflowwsbzj/series-workflowwsbzj-build-action-3331370685/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-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 11:01:41 +0000 UTC FinishedAt: 2026-08-14 11:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 11:01:41 +0000 UTC FinishedAt: 2026-08-14 11:01:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 11:01:41 +0000 UTC FinishedAt: 2026-08-14 11:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 11:01:41 +0000 UTC FinishedAt: 2026-08-14 11:20:14 +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:*47384517-8fb7-4900-bf33-a2bb81624de4,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-workflowwsbzj/series-workflowwsbzj-convert-artifact-2318459606/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": "76160cce-7c92-4ac4-bd6a-b3894f537125", "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-workflowwsbzj/series-workflowwsbzj-build-action-3135604954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 11:01:41 +0000 UTC FinishedAt: 2026-08-14 11:20:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*47384517-8fb7-4900-bf33-a2bb81624de4,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-workflowwsbzj/series-workflowwsbzj-convert-artifact-2318459606/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": "76160cce-7c92-4ac4-bd6a-b3894f537125", "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-workflowwsbzj/series-workflowwsbzj-build-action-3135604954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 11:20:14 +0000 UTC FinishedAt: 2026-08-14 11:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 11:20:14 +0000 UTC FinishedAt: 2026-08-14 11:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 11:20:14 +0000 UTC FinishedAt: 2026-08-14 11:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 11:20:15 +0000 UTC FinishedAt: 2026-08-14 11:22:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76160cce-7c92-4ac4-bd6a-b3894f537125,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-workflowwsbzj/series-workflowwsbzj-build-action-3135604954/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-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"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:*9e19aa51-3c54-493c-86ea-894ba92d9ad3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76160cce-7c92-4ac4-bd6a-b3894f537125,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-workflowwsbzj/series-workflowwsbzj-build-action-3331370685/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-workflowwsbzj/series-workflowwsbzj-build-action-3135604954/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 11:22:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 11:22:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"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-workflowwsbzj/series-workflowwsbzj-convert-artifact-3330795131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 11:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 11:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 11:22:11 +0000 UTC FinishedAt: 2026-08-14 11:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 11:22:21 +0000 UTC FinishedAt: 2026-08-14 14:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwsbzj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__serio_register_port","serio_unregister_port","__serio_register_driver","serio_unregister_driver","serio_reconnect","serio_rescan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["SERIO","USERIO"],"series_id":"7576e22d-20f9-4b27-bb1f-99dbf3aebfd8","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 11:22:21 +0000 UTC FinishedAt: 2026-08-14 14:23:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e19aa51-3c54-493c-86ea-894ba92d9ad3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76160cce-7c92-4ac4-bd6a-b3894f537125,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-workflowwsbzj/series-workflowwsbzj-build-action-3331370685/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-workflowwsbzj/series-workflowwsbzj-build-action-3135604954/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-workflowwsbzj/series-workflowwsbzj-convert-artifact-3330795131/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,}