Name: series-workflowgszgb Phase: Succeeded StartedAt: 2026-08-14 20:12:56 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[0] Phase: Succeeded StartedAt: 2026-08-14 20:12:56 +0000 UTC FinishedAt: 2026-08-14 21:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 20:12:56 +0000 UTC FinishedAt: 2026-08-14 21:16:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "series_id": "487214de-81d2-4e88-b406-d47e0cbd81fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_napi_set_doit", "napi_set_threaded", "netif_set_threaded", "__napi_schedule", "__napi_schedule_irqoff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtfX25hcGlfc2NoZWR1bGVfaXJxb2ZmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIHByZXZlbnRzIHRoZSBOQVBJIHRocmVhZCBmcm9tIGhvZ2dpbmcgdGhlIENQVSBhbmQgdHJpZ2dlcmluZyB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGl0IGNvbnRpbnVvdXNseSBmaW5kcyB3b3JrIGJ1dCBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy4gVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgdGhyZWFkIHNjaGVkdWxpbmcgYW5kIENQVSB5aWVsZGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBDUFUgc3RhbGxzIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB3YXRjaGRvZ3Mgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBlY2U2NzAwNTM2ZDliLi44ODRhYTJkY2FkYmVjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzg3NiwxMSAmIzQzOzc4NzYsMTQgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4mIzQzO1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxuJiM0MztcdFx0ICogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyBhIHRocmVhZFxuJiM0MztcdFx0ICogdGhhdCBrZWVwcyBmaW5kaW5nIHdvcmsgd291bGQgbmV2ZXIgZ2l2ZSB1cCB0aGUgQ1BVLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtfX25hcGlfc2NoZWR1bGVfaXJxb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbG9vcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBiZWhhdmlvciBieSB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTkFQSSB0aHJlYWRzIHlpZWxkIHRoZSBDUFUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODY1OGM1NzJmMTg5OTU5MjU5YWZhNTZhNDkyZTIzZTc3ZWZlOGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03ODc2LDExICYjNDM7Nzg3NiwxNCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczoKJiM0MzsJCSAqIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28gYSB0aHJlYWQKJiM0MzsJCSAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJaWYgKCFyZXBvbGwpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBMb29wIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtb3ZpbmcgYGNvbmRfcmVzY2hlZCgpYCBvdXRzaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2sgdGllZCB0byBgcmVwb2xsYCBhbmQgYGJ1c3lfcG9sbF9sYXN0X3FzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSB0aGUgaW50ZW50IGlzIHRvIGhhdmUgaXQgZXhlY3V0ZSBvbiAqZXZlcnkqIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgb3Igd2hlbiBleGl0aW5nIHRoZSBsb29wLCByYXRoZXIgdGhhbiBqdXN0IGNvbmRpdGlvbmFsbHkuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBwYXJ0LCBvcGVyYXRlcy4gSXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IE5BUEkgdGhyZWFkcyBhcmUgc2NoZWR1bGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIENQVSB1dGlsaXphdGlvbiBhbmQgbGF0ZW5jeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IHdpdGhpbiB0aGUgZGV2aWNlIGRyaXZlciBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSBpcyBleHBlY3RlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz03ODE3PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzg0MC1cbm5ldC9jb3JlL2Rldi5jOjc4NDE6c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzg0Mi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcbi0tXG5uZXQvY29yZS9kZXYuYz03ODk2PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzkxNi1cbm5ldC9jb3JlL2Rldi5jOjc5MTc6XHRcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKG5hcGksIHdhbnRfYnVzeV9wb2xsID8gXHUwMDI2bGFzdF9xcyA6IE5VTEwpO1xubmV0L2NvcmUvZGV2LmMtNzkxOC1cdH1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMzIxNT1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyMTgtXG5uZXQvY29yZS9kZXYuYzoxMzIxOTpcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFx1MDAyNnNkLVx1MDAzZWJhY2tsb2csIE5VTEwpO1xubmV0L2NvcmUvZGV2LmMtMTMyMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIFNjaGVkdWxpbmcgQ2hhbmdlOiBBIFN0cmF0ZWdpYyBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgbmFwaV90aHJlYWRlZF9wb2xsYCBhbmQgYHJ1bl9iYWNrbG9nX25hcGlgLiBJdCYjMzk7cyBhIGtleSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBpbW1lZGlhdGVseSBteSBleHBlcnQgaW5zdGluY3Qga2lja3MgaW46IGlzIHRoaXMgd29ydGggZnV6emluZz8KClNjaGVkdWxpbmcgY2hhbmdlcyBhcmUgKm5vdG9yaW91cyogdG8gZnV6ei4gVGhleSYjMzk7cmUgaGFyZCB0byB0cmlnZ2VyIGluIGEgbWVhbmluZ2Z1bCB3YXkuIEhvd2V2ZXIsIHRoaXMgaXMgdGllZCB0byBOQVBJIHBvbGxpbmcsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgdHJhZmZpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVGhlIHZlcnkgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBvbiBOQVBJIGlzIGVudGljaW5nIGJlY2F1c2UgTkFQSSBpcyB0aGUgbmV0d29ya2luZyBrZXJuZWwgQVBJLgoKVGhlbiBJIHBhdXNlZC4gV2FpdC4uLiBgY29uZF9yZXNjaGVkKClgIGlzIGEgKmNvcmUqIGtlcm5lbCBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gRXZlbiB0aG91Z2ggdGhlIHBhdGNoIGlzIHNtYWxsLCBpdCYjMzk7cyBmaXhpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBhIHdhdGNoZG9nIHdhcm5pbmcgb3IgQ1BVIGhvZ2dpbmcgaXNzdWUuIFRoYXQmIzM5O3MgYSBiaWcgZGVhbC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byB0cmlnZ2VyIGEgZGVuaWFsIG9mIHNlcnZpY2UgYXQgdGhlIHZlcnkgbGVhc3QuCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCB0aGluZyBJJiMzOTttIGFza2luZyBteXNlbGYgaXMsIHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGZvY3VzIG9uPyBgbmFwaV90aHJlYWRlZF9wb2xsYCBvciBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIChzaW5jZSBpdCYjMzk7cyBgc3RhdGljYCk/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyBhbHNvIGBzdGF0aWNgLiBZZXAsIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIGFsc28gYHN0YXRpY2AuIFdhaXQgYSBzZWNvbmQsIGFuZCBgcnVuX2JhY2tsb2dfbmFwaWAgaXMgYWxzbyBzdGF0aWM/CgpPa2F5LCB0aW1lIHRvIGNoZWNrIHdoZXJlIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHVzZWQuIFRoaXMgaXMgc3RhcnRpbmcgdG8gbG9vayBwcm9taXNpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xubmV0L2NvcmUvZGV2LmMtMTY0NS1cbm5ldC9jb3JlL2Rldi5jOjE2NDY6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxubmV0L2NvcmUvZGV2LmM9MTY0OD1zdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2NTUtXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjE2NTY6XHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXCYjMzQ7bmFwaS8lcy0lZFwmIzM0Oyxcbm5ldC9jb3JlL2Rldi5jLTE2NTctXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUyOTI9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMwNS1cbm5ldC9jb3JlL2Rldi5jOjUzMDY6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcbm5ldC9jb3JlL2Rldi5jLTUzMDctXHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG5uZXQvY29yZS9kZXYuYy01MzA4LVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzMDk6XHRcdGlmICghbXlzZC1cdTAwM2Vpbl9uZXRfcnhfYWN0aW9uIFx1MDAyNlx1MDAyNiAhbXlzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwpXG5uZXQvY29yZS9kZXYuYy01MzEwLVx0XHRcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4MTc9c3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9kZXYuYy03ODQwLVxubmV0L2NvcmUvZGV2LmM6Nzg0MTpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODQyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc4NTUtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3ODU2Olx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzg1Ny1cbi0tXG5uZXQvY29yZS9kZXYuYy03ODYxLVxubmV0L2NvcmUvZGV2LmM6Nzg2MjpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03ODYzLVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzg5NS1cbm5ldC9jb3JlL2Rldi5jOjc4OTY6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc4OTcte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MTYtXG5uZXQvY29yZS9kZXYuYzo3OTE3Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyMTU9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjE4LVxubmV0L2NvcmUvZGV2LmM6MTMyMTk6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzMjIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxgIEtlcm5lbCBUaHJlYWQqKgoKQWxyaWdodCwgc28gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgZGVmaW5pdGVseSBhIGt0aHJlYWQgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUgYSBiaXQgYmV0dGVyLiBUaGUgY2x1ZSBpcyB0aGF0IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCBpcyByZXNwb25zaWJsZSBmb3IgaXRzIGNyZWF0aW9uLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3cgSSB3YW50IHRvIHNlZSAqd2hlcmUqIHRoaXMgYG5hcGlfa3RocmVhZF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfa3RocmVhZF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xNjQ2PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xubmV0L2NvcmUvZGV2LmMtMTY0Ny1cbm5ldC9jb3JlL2Rldi5jOjE2NDg6c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbm5ldC9jb3JlL2Rldi5jLTE2NDkte1xuLS1cbm5ldC9jb3JlL2Rldi5jPTcyMDk9aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5uZXQvY29yZS9kZXYuYy03MjEzLVx0XHRpZiAoIW5hcGktXHUwMDNldGhyZWFkKSB7XG5uZXQvY29yZS9kZXYuYzo3MjE0Olx0XHRcdGludCBlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xubmV0L2NvcmUvZGV2LmMtNzIxNS1cbi0tXG5uZXQvY29yZS9kZXYuYz03MjQxPWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03MjUxLVx0XHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbm5ldC9jb3JlL2Rldi5jOjcyNTI6XHRcdFx0XHRlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xubmV0L2NvcmUvZGV2LmMtNzI1My1cdFx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc2MDMtXHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXG5uZXQvY29yZS9kZXYuYzo3NjA0Olx0XHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcbm5ldC9jb3JlL2Rldi5jLTc2MDUtXHRcdFx0ZGV2LVx1MDAzZXRocmVhZGVkID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRocmVhZGVkIE5BUEkuLi4gdGhhdCYjMzk7cyBhIGtleSBmZWF0dXJlLCByaWdodD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgY3VycmVudCBzdGF0ZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogaXMgdGhpcyB0aGluZyBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgY2hlY2tpbmcgdGhpcyBjb25maWcgaXMgd2l0aCBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IHNldHVwLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBjaGVjay4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03NjAyLVx0ICovXG5uZXQvY29yZS9kZXYuYzo3NjAzOlx0aWYgKG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhkZXYsIG5hcGkpKVxubmV0L2NvcmUvZGV2LmMtNzYwNC1cdFx0aWYgKG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKlRyYWNpbmcgRG93biBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiYjMzk7dCByZWFsbHkgZG8gYW55dGhpbmcgcHJvZHVjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIGZvciB0aGUgTm9kZS5qcyBhZGQtb24gQVBJIChOLUFQSSkuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgTi1BUEkgbGlicmFyeSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIHZlcmlmeS4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIG5hdmlnYXRpbmcgdGhlIE5vZGUuanMgc291cmNlIHRyZWUgb3IgcG9zc2libHkgYSBkZWRpY2F0ZWQgTi1BUEkgaGVhZGVyIGZpbGUuIExldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc2MDItXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjc2MDM6XHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXG5uZXQvY29yZS9kZXYuYy03NjA0LVx0XHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcbi0tXG5uZXQvY29yZS9kZXYuaD0zNjg9c3RhdGljIGlubGluZSBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkXG5uZXQvY29yZS9kZXYuaDozNjk6bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbm5ldC9jb3JlL2Rldi5oLTM3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCBhbmQsIGZyYW5rbHksIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IG9uIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGNvcmUuIFNwZWNpZmljYWxseSwgSSBrbm93IGl0IGlzIGEgZnVuY3Rpb24sIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBnZXQgdGhlIHRocmVhZGVkIGNvbmZpZ3VyYXRpb24uIEdpdmVuIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGRlZmluaXRpb24gd2lsbCBiZSBpbiBgbmV0L2NvcmUvZGV2LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZS4gSSB3aWxsIGhhdmUgdG8gbG9vayB0byBnZXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjg6XHRzdGF0aWMgaW5saW5lIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWRcbiAzNjk6XHRuYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuIDM3MDpcdHtcbiAzNzE6XHRcdGlmIChuLVx1MDAzZWNvbmZpZylcbiAzNzI6XHRcdFx0cmV0dXJuIG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZGVkO1xuIDM3MzpcdFx0cmV0dXJuIGRldi1cdTAwM2V0aHJlYWRlZDtcbiAzNzQ6XHR9XG4gMzc1Olx0XG4gMzc2Olx0aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbixcbiAzNzc6XHRcdFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRocmVhZGVkIE5BUEksIHRoYXQmIzM5O3MgY29udHJvbGxhYmxlIHZpYSBzeXNmcywgZ29vZCB0byBrbm93LiYjMzQ7IEJ1dCB0aGVuIEkgc2VlIHNvbWV0aGluZyB0aGF0IHRyaWdnZXJzIGEgZGVlcGVyIGRpdmUuIGBydW5fYmFja2xvZ19uYXBpYCDigJMgdGhhdCByaW5ncyBhIGJlbGwhIEl0IGFsc28gY2FsbHMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gTm93IHRoYXQgdGhlIGBydW5fYmFja2xvZ19uYXBpYCBmdW5jdGlvbiBpcyBwcmVzZW50LCB0aGUga2V5IHF1ZXN0aW9ucyBzdGFydCBmb3JtaW5nOiBJcyBgcnVuX2JhY2tsb2dfbmFwaWAgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0/IElzIHRoZXJlIGEgcmVhc29uIGl0IGlzIHRoZXJlPyBMZXQgbWUgZGlnIGludG8gdGhhdCBgcnVuX2JhY2tsb2dfbmFwaWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgZmxvdyBiZXR0ZXIgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEzMjA3PXN0YXRpYyBpbnQgYmFja2xvZ19uYXBpX3Nob3VsZF9ydW4odW5zaWduZWQgaW50IGNwdSlcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzIxNC1cbm5ldC9jb3JlL2Rldi5jOjEzMjE1OnN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcbm5ldC9jb3JlL2Rldi5jLTEzMjE2LXtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzIzMT1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyMzMtXHQudGhyZWFkX3Nob3VsZF9ydW5cdD0gYmFja2xvZ19uYXBpX3Nob3VsZF9ydW4sXG5uZXQvY29yZS9kZXYuYzoxMzIzNDpcdC50aHJlYWRfZm5cdFx0PSBydW5fYmFja2xvZ19uYXBpLFxubmV0L2NvcmUvZGV2LmMtMTMyMzUtXHQudGhyZWFkX2NvbW1cdFx0PSBcJiMzNDtiYWNrbG9nX25hcGkvJXVcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBiYWNrbG9nX3RocmVhZHNgJiMzOTtzIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgYmFja2xvZ190aHJlYWRzYCBpcyBpZGVudGlmaWVkIGFzIGFuIGBzbXBfaG90cGx1Z190aHJlYWRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byBDUFUgaG90cGx1Z2dpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgU01QIChTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZykgZnJhbWV3b3JrLiBLbm93aW5nIGl0JiMzOTtzIG9mIHRoaXMgdHlwZSwgSSB3YW50IHRvIHBpbiBkb3duIGV4YWN0bHkgd2hlcmUgdGhpcyB0aHJlYWQgaXMgcmVnaXN0ZXJlZC4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIHBvaW50IGlzIGNydWNpYWwgZm9yIHRyYWNpbmcgaXRzIGxpZmVjeWNsZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgaXRzIGVudHJ5IHBvaW50IGlzIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcyBhdCBpbml0aWFsaXphdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBob3RwbHVnIGV2ZW50IGhhbmRsaW5nIGFuZCBzY2hlZHVsaW5nLiBJdCB3aWxsIGxpa2VseSByZXZlYWwgY3JpdGljYWwgZGV0YWlscyBhYm91dCBpdHMgcHVycG9zZSBhbmQgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWNrbG9nX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0yMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X2luZGV4X2hhc2goc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcbi0tXG5uZXQvY29yZS9kZXYuYy0yMDctXG5uZXQvY29yZS9kZXYuYzoyMDg6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcbm5ldC9jb3JlL2Rldi5jLTIwOS1cbm5ldC9jb3JlL2Rldi5jPTIxMD1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyhjaGFyICphcmcpXG5uZXQvY29yZS9kZXYuYy0yMTEte1xubmV0L2NvcmUvZGV2LmM6MjEyOlx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2dXNlX2JhY2tsb2dfdGhyZWFkc19rZXkpO1xubmV0L2NvcmUvZGV2LmMtMjEzLVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjE1PWVhcmx5X3BhcmFtKFwmIzM0O3RocmVhZF9iYWNrbG9nX25hcGlcJiMzNDssIHNldHVwX2JhY2tsb2dfbmFwaV90aHJlYWRzKTtcbm5ldC9jb3JlL2Rldi5jLTIxNi1cbm5ldC9jb3JlL2Rldi5jOjIxNzpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXG5uZXQvY29yZS9kZXYuYy0yMTgte1xubmV0L2NvcmUvZGV2LmM6MjE5Olx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2dXNlX2JhY2tsb2dfdGhyZWFkc19rZXkpO1xubmV0L2NvcmUvZGV2LmMtMjIwLX1cbi0tXG5uZXQvY29yZS9kZXYuYy0yMjMtXG5uZXQvY29yZS9kZXYuYzoyMjQ6c3RhdGljIGJvb2wgdXNlX2JhY2tsb2dfdGhyZWFkcyh2b2lkKVxubmV0L2NvcmUvZGV2LmMtMjI1LXtcbi0tXG5uZXQvY29yZS9kZXYuYz0yMzE9c3RhdGljIGlubGluZSB2b2lkIGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yMzctXHRcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XG5uZXQvY29yZS9kZXYuYzoyMzg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTIzOS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9kaXNhYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcbm5ldC9jb3JlL2Rldi5jOjI0NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTYtXHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2LmM6MjU3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNTgtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI2Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ191bmxvY2tfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbm5ldC9jb3JlL2Rldi5jLTI2NC17XG5uZXQvY29yZS9kZXYuYzoyNjU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNjYtXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDk2NT1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDk4MC1cdFx0aWYgKHRocmVhZCkge1xubmV0L2NvcmUvZGV2LmM6NDk4MTpcdFx0XHRpZiAodXNlX2JhY2tsb2dfdGhyZWFkcygpIFx1MDAyNlx1MDAyNiB0aHJlYWQgPT0gcmF3X2NwdV9yZWFkKGJhY2tsb2dfbmFwaSkpXG5uZXQvY29yZS9kZXYuYy00OTgyLVx0XHRcdFx0Z290byB1c2VfbG9jYWxfbmFwaTtcbi0tXG5uZXQvY29yZS9kZXYuYz01MjkyPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUyOTctXHRpZiAoc2QgIT0gbXlzZCkge1xubmV0L2NvcmUvZGV2LmM6NTI5ODpcdFx0aWYgKHVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xubmV0L2NvcmUvZGV2LmMtNTI5OS1cdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnNkLVx1MDAzZWJhY2tsb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBraWNrX2RlZmVyX2xpc3RfcHVyZ2UodW5zaWduZWQgaW50IGNwdSlcbi0tXG5uZXQvY29yZS9kZXYuYy01MzIxLVxubmV0L2NvcmUvZGV2LmM6NTMyMjpcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcbm5ldC9jb3JlL2Rldi5jLTUzMjMtXHRcdGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzZCwgXHUwMDI2ZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY2MzI9c3RhdGljIHZvaWQgbmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNjYzNi1cbm5ldC9jb3JlL2Rldi5jOjY2Mzc6XHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcdTAwMjZcdTAwMjYgcmVtc2QpIHtcbm5ldC9jb3JlL2Rldi5jLTY2MzgtXHRcdHNkLVx1MDAzZXJwc19pcGlfbGlzdCA9IE5VTEw7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjY0OT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY2NTEtI2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jOjY2NTI6XHRyZXR1cm4gIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcdTAwMjZcdTAwMjYgc2QtXHUwMDNlcnBzX2lwaV9saXN0O1xubmV0L2NvcmUvZGV2LmMtNjY1My0jZWxzZVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNzIyPXN0YXRpYyBpbnQgZGV2X2NwdV9kZWFkKHVuc2lnbmVkIGludCBvbGRjcHUpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI3NjctXG5uZXQvY29yZS9kZXYuYzoxMjc2ODpcdGlmICghdXNlX2JhY2tsb2dfdGhyZWFkcygpKSB7XG5uZXQvY29yZS9kZXYuYy0xMjc2OS0jaWZkZWYgQ09ORklHX1JQU1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEzMjIyPXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjMwLVxubmV0L2NvcmUvZGV2LmM6MTMyMzE6c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xubmV0L2NvcmUvZGV2LmMtMTMyMzItXHQuc3RvcmVcdFx0XHQ9IFx1MDAyNmJhY2tsb2dfbmFwaSxcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI0Mz1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzI5OS1cdFx0Z290byBvdXQ7XG5uZXQvY29yZS9kZXYuYzoxMzMwMDpcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYzoxMzMwMTpcdFx0c21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKFx1MDAyNmJhY2tsb2dfdGhyZWFkcyk7XG5uZXQvY29yZS9kZXYuYy0xMzMwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOQVBJIFRocmVhZGluZyBMb29wKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaW4gYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYC4gVGhpcyBpcyB1c2VkIGJ5IGJvdGggcmVndWxhciBOQVBJIHRocmVhZHMgYW5kIHRob3NlIHRoYXQgYXJlIGhhbmRsaW5nIGJhY2tsb2cuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQsIG5hbWVseSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsIGxvb3AsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGlmIGZ1enppbmcgaXQgaXMgYSBnb29kIGlkZWEuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncy4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gYSBjb25maWcgcGVyc3BlY3RpdmUsIGl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfTkVUYCwgYnV0IHRoYXQmIzM5O3MgYSBnaXZlbiDigJMgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgZm9yIGFueSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIE5vIHNwZWNpZmljIE5BUEktcmVsYXRlZCBjb25maWcgb3B0aW9ucyB0aGF0IEkgY2FuIGltbWVkaWF0ZWx5IHNlZS4gTkFQSSBpcyBzbyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrIHdvcmtzLCB0aGVyZSYjMzk7cyBub3QgdXN1YWxseSBhbnkgbW9kdWxhcml0eSB0byBpdCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4KCldhaXQsIGxvb2tpbmcgZGVlcGVyIGludG8gdGhpcywgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5hcGlfdGhyZWFkZWRfcG9sbGAgYW5kIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRocmVhZGVkIE5BUEkgYmVoYXZpb3IgaXMgaW5pdGlhdGVkIGVpdGhlciB3aGVuIHNvbWVvbmUgY2FsbHMgYG5hcGlfc2V0X3RocmVhZGVkYCBvciBgbmV0aWZfc2V0X3RocmVhZGVkYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBhIGNvbmZpZyBmb3IgdGhyZWFkZWQgTkFQSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzE2MT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzE5OC1cbm5ldC9jb3JlL2Rldi5jOjcxOTk6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cdFx0XHRcdCAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkX21vZGUpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIwOC1cbm5ldC9jb3JlL2Rldi5jOjcyMDk6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyMTAtXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIzNC1cdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG5uZXQvY29yZS9kZXYuYzo3MjM1Olx0XHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYy03MjM2LVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxubmV0L2NvcmUvZGV2LmM6NzI2NTpcdFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03MjY2LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTc0ODY9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwNS1cbm5ldC9jb3JlL2Rldi5jOjc1MDY6XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkZWQpKTtcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxuLS1cbm5ldC9jb3JlL2Rldi5oPTM2OT1uYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5oLTM3NS1cbm5ldC9jb3JlL2Rldi5oOjM3NjppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxubmV0L2NvcmUvZGV2LmgtMzc3LVx0XHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNz1uZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzNy1cdFx0dGhyZWFkZWQgPSBubGFfZ2V0X3VpbnQoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9OQVBJX1RIUkVBREVEXSk7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjMzODpcdFx0cmV0ID0gbmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzktXHRcdGlmIChyZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weT0zNT1kZWYgbmFwaV9saXN0X2NoZWNrKG5mKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weS01MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6NTE6ZGVmIG5hcGlfc2V0X3RocmVhZGVkKG5mKSAtXHUwMDNlIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTUyLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5PTM2OT1kZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3NS0gICAgICAgICAgICAgIG5hcGlfbGlzdF9jaGVjayxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6Mzc2OiAgICAgICAgICAgICAgbmFwaV9zZXRfdGhyZWFkZWQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3Ny0gICAgICAgICAgICAgIGRldl9zZXRfdGhyZWFkZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRocmVhZGVkIE5BUEkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVGhyZWFkZWQgTkFQSSBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyBpdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB1c2luZyBuZXRsaW5rIChuZXRkZXYtZ2VubCkuIFRoZSBgdGhyZWFkX2JhY2tsb2dfbmFwaWAgYm9vdCBwYXJhbWV0ZXIgYWxzbyBzZWVtcyB0byBraWNrIHRoaW5ncyBvZmYgd2l0aCBgdXNlX2JhY2tsb2dfdGhyZWFkcygpYC4gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBuZWVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIC0gaXTigJlzIGNvcmUgbmV0d29ya2luZywgcmlnaHQ/CgpBbHJpZ2h0LCBtb3Zpbmcgb24sIGl0IHNvdW5kcyBsaWtlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyBncm91bmRicmVha2luZywgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG5ldyBob29rcy4gTGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucy4gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0IHJ1bnMgYXMgYSBrdGhyZWFkLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgKnN0YXRpYyo/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gRG9lcyBgbmFwaV9zZXRfdGhyZWFkZWRgIGdldCBleHBvcnRlZCBhbnl3aGVyZT8gR290dGEgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBvbiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldGlmX3NldF90aHJlYWRlZGAqKgoKT2theSwgc28gdGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG5ldGlmX3NldF90aHJlYWRlZGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKldoeSogYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nPyBPciBwZXJoYXBzIGEgbmV3IGZlYXR1cmUgdGhhdCYjMzk7cyBiZWluZyBpbnRlZ3JhdGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgaW5mb3JtIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcuCgpNeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBpdHMgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBzZW1hbnRpY3MuIFdoYXQgbG9ja3MgYXJlIGludm9sdmVkPyBBcmUgdGhleSBwZXItbmV0ZGV2LCBnbG9iYWwsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGxvY2sgY29udGVudGlvbj8gTXkgaW50dWl0aW9uIGlzIHNjcmVhbWluZyByYWNlIGNvbmRpdGlvbnMgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyB0aHJlYWQtc2FmZS4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBnb3RjaGFzLCBsaWtlIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxpdmVsb2Nrcywgb3IgZXZlbiBzaW1wbGUgZGF0YSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gSSBrbm93IHNvbWUgYXJjaGl0ZWN0dXJlcyBoYXZlIHNwZWNpZmljIG1lbW9yeSBvcmRlcmluZyByZXF1aXJlbWVudHM7IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgY29kZSBoYW5kbGVzIHRoZW0gY29ycmVjdGx5LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVsYXhlZCBtZW1vcnkgbW9kZWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZCBhbmQgY2FuIHByb3ZpZGUgdGhyZWFkIHNhZmV0eS4KClVsdGltYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhpcyBjb2RlIGlzIHNvbGlkIGFuZCBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBOQVBJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBOQVBJIGNvbmZpZ3VyYXRpb24sIG9yIGF0IGxlYXN0IGEgc2V0dGluZyB0aGF0IGltcGFjdHMgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbmV0bGluayBpbnRlcmZhY2UgY29kZS4gSSBzdXNwZWN0IHRoZSBmdW5jdGlvbiBJJiMzOTttIGFmdGVyLCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvbmUsIGlzIHByb2JhYmx5IG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBleHBvc2VzIE5BUEkgcmVsYXRlZCBzZXR0aW5ncywgYW5kIEkgYmVsaWV2ZSBuZXRsaW5rIGlzIHRoZSByb3V0ZSBpdCB0YWtlcywgc28gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0aGVyZS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNj1zdGF0aWMgaW50XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjMyNzpuZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzI4LXtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTM2MT1pbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM3My1cdGlmIChuYXBpKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM3NDpcdFx0ZXJyID0gbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhuYXBpLCBpbmZvKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzc1LVx0XHRuZXRkZXZfdW5sb2NrKG5hcGktXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAuIFJpZ2h0IGF3YXksIHRoZSBuYW1lIHNjcmVhbXMgJiMzNDtuZXRsaW5rIGhhbmRsZXIsJiMzNDsgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzb21ldGhpbmcgZGVhbGluZyB3aXRoIE5BUEkgKHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIEFQSSkgYW5kIG5ldGxpbmsuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIHdoZW4gd2UgcmVjZWl2ZSBhIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZSByZWxhdGVkIHRvIE5BUEkgY29uZmlndXJhdGlvbiBvciBvcGVyYXRpb24uCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHRoaW5nIGlzIHN0YXRpYy4gSW4ga2VybmVsIGNvZGUsIHRoYXQgZGV0YWlsIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGZvciBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEtub3dpbmcgaWYgaXQmIzM5O3Mgc3RhdGljIGdpdmVzIG1lIGEgdmFsdWFibGUgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlOiBpcyBpdCBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG9yIG1heWJlIGV2ZW4gYW5vdGhlciBtb2R1bGU/IFRoYXQmIzM5O2xsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0bGluayBhbmQgTkFQSSBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW4gYW5kIHNlZSBpZiBpdCYjMzk7cyBnb3QgYSBgc3RhdGljYCBrZXl3b3JkIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIyNi1cdFx0LmNtZFx0XHQ9IE5FVERFVl9DTURfTkFQSV9TRVQsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyMjc6XHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXHRcdC5wb2xpY3lcdFx0PSBuZXRkZXZfbmFwaV9zZXRfbmxfcG9saWN5LFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oPTM3PWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6Mzg6aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMzktaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjb2RlIHNuaXBwZXRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIE5BUEkgYW5kIE5ldHdvcmsgRHJpdmVyIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBkcml2ZXIgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gbWFwIHRoZW0gb3V0IGluIG15IGhlYWQuIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgdGhlIGZpcnN0IG9uZSB0aGF0IGp1bXBzIG91dC4gSXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgbGV0cyB1c2Vyc3BhY2UgaW50ZXJhY3Qgd2l0aCBOQVBJIChOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIFBvbGwpIGZyb20gYSBOZXRsaW5rIGNvbnRleHQsIHByZXN1bWFibHkgdG8gbWFuYWdlIG9yIGNvbmZpZ3VyZSBOQVBJIHNldHRpbmdzLiBUaGF04oCZcyBwcm9iYWJseSB0aGUga2V5IHBvaW50IHRvIHN0YXJ0IHdpdGguCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBjb3JlIHRyaWdnZXI6IE5BUEkgdGhyZWFkZWQgcG9sbGluZyBpcyAqZHJpdmVuKiBieSBpbmNvbWluZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0YmVhdCwgdGhlIHJlYXNvbiBOQVBJIGV4aXN0cy4gVHJhZmZpYyBhcnJpdmVzLCBhbmQgTkFQSSYjMzk7cyBtZWNoYW5pc20gZ2V0cyBraWNrZWQgaW50byBhY3Rpb24uCgpOb3csIGxldCBtZSB0aGluayBhYm91dCBgbmFwaV9zY2hlZHVsZV9ycHNgLiBUaGF0JiMzOTtzIHN0YXRpYywgc28gaXTigJlzIGNsZWFybHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBSUFMgLSBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAtIGlzIGFsbCBhYm91dCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgQ1BVcy4gVGhpcyBpcyBsaWtlbHkgdXNlZCBieSBOQVBJIHRvIGRpcmVjdCBpbmNvbWluZyBwYWNrZXRzIHRvd2FyZHMgYSBwYXJ0aWN1bGFyIENQVSwgcHJlc3VtYWJseSBiYXNlZCBvbiBhIGhhc2guIEkmIzM5O2QgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhhdCYjMzk7cyBwbHVtYmVkIGluLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgc3VnZ2VzdHMgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGRyaXZlciwgb3IgY29yZSBOQVBJIGxvZ2ljLgoKRmluYWxseSwgdGhlcmUmIzM5O3MgYF9fbmFwaV9zY2hlZHVsZWAuIFRoYXTigJlzIGFub3RoZXIga2V5IGZ1bmN0aW9uLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgcHJlZml4IGlzIGEgY29udmVudGlvbiB0aGF0IHN1Z2dlc3RzIHRoaXMgaXMgaW50ZW5kZWQgZm9yICppbnRlcm5hbCogZHJpdmVyIHVzZSwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBieSB1c2Vyc3BhY2UuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIHNjaGVkdWxpbmcgcHJpbWl0aXZlLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICpzY2hlZHVsaW5nKiB0aGUgTkFQSSBwb2xsIGluIHRoZSBmaXJzdCBwbGFjZSwgbGlrZWx5IGJ5IGFkZGluZyBpdCB0byBhIHJ1bnF1ZXVlIG9yIHNpbWlsYXIuIEkmIzM5O2QgZ3Vlc3MgdGhhdCBgbmFwaV9zY2hlZHVsZV9ycHNgIGlzIGEgaGlnaGVyLWxldmVsIHdyYXBwZXIgdGhhdCBjYWxscyBgX19uYXBpX3NjaGVkdWxlYCBhZnRlciBwZXJoYXBzIGRvaW5nIHNvbWUgQ1BVIGFmZmluaXR5IGNhbGN1bGF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgb2YgYSBOQVBJIHBvbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzg2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3Q9MTI5PXRvIElSUSBiZWluZyBhdXRvLW1hc2tlZCBieSB0aGUgZGV2aWNlKSBzaG91bGQgdXNlIHRoZSBuYXBpX3NjaGVkdWxlX3ByZXAoKVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzMDphbmQgX19uYXBpX3NjaGVkdWxlKCkgY2FsbHM6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3QtMTMxLVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzYtICAgICAgLyogc2NoZWR1bGUgYWZ0ZXIgbWFza2luZyB0byBhdm9pZCByYWNlcyAqL1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzNzogICAgICBfX25hcGlfc2NoZWR1bGUoXHUwMDI2di1cdTAwM2VuYXBpKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzgtICB9XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdD03Mz1uYXBpX2NvbXBsZXRlX2RvbmUoKSDkvJrph4rmlL7lrp7kvovnmoTmiYDmnInmnYPjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwMS3mmL7lvI/lsY/olL3kuK3mlq3nmoTpqbHliqjnqIvluo/vvIjogIzpnZ7orr7lpIfoh6rliqjlsY/olL0gSVJR77yJ5bqU5L2/55SoIG5hcGlfc2NoZWR1bGVfcHJlcCgpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdDoxMDI6X19uYXBpX3NjaGVkdWxlKCkg6LCD55So77yaXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwMy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwOC0gICAgICAvKiDlnKjlsY/olL3lkI7osIPluqbku6Xpgb/lhY3nq57kuokgKi9cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3Q6MTA5OiAgICAgIF9fbmFwaV9zY2hlZHVsZShcdTAwMjZ2LVx1MDAzZW5hcGkpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdC0xMTAtICB9XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jPTg0NjI9aXJxcmV0dXJuX3QgcmVjZWl2ZV9jb250ZXh0X2ludGVycnVwdF9uYXBpKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTg0NjktXHRcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKHJjZC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6ODQ3MDpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHJjZC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy04NDcxLVx0XHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYz0zOTg9c3RhdGljIGlycXJldHVybl90IHJjYXJfY2FuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYy00MTgtXHRcdFx0d3JpdGViKHByaXYtXHUwMDNlaWVyLCBcdTAwMjZwcml2LVx1MDAzZXJlZ3MtXHUwMDNlaWVyKTtcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuLmM6NDE5Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYy00MjAtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmM9MTI2Nz1zdGF0aWMgdm9pZCByY2FyX2NhbmZkX2hhbmRsZV9nbG9iYWxfcmVjZWl2ZShzdHJ1Y3QgcmNhcl9jYW5mZF9nbG9iYWwgKmdwcml2LCB1MzIgY2gpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW5mZC5jLTEyODItXHRcdFx0XHRcdCAgICAgUkNBTkZEX1JGQ0NfUkZJRSk7XG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmM6MTI4MzpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYy0xMjg0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYz04Mz1zdGF0aWMgdm9pZCB2aXJ0cXVldWVfbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYy04Ny1cdFx0dmlydHF1ZXVlX2Rpc2FibGVfY2IodnEpO1xuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYzo4ODpcdFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYy04OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYz0xNzgwPXR5cGhvb25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk1LVx0XHR0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyhpb2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM6MTc5NjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmMtMTc5Ny1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jPTEyOTM9c3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jLTEzMTgtXHRcdFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXHUwMDI2bnAtXHUwMDNlbmFwaSkpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGFwdGVjL3N0YXJmaXJlLmM6MTMxOTpcdFx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZucC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkYXB0ZWMvc3RhcmZpcmUuYy0xMzIwLVx0XHRcdFx0ZW5hYmxlID0gcmVhZGwoaW9hZGRyICYjNDM7IEludHJFbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz01MDQ9c3RhdGljIGlycXJldHVybl90IGFsdGVyYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy01MjUtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcnhkbWFfaXJxX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjUyNjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtNTI3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hbWQ4MTExZS5jPTEwNzc9c3RhdGljIGlycXJldHVybl90IGFtZDgxMTFlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExMy1cdFx0XHQvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmM6MTExNDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYy0xMTE1LVx0XHR9IGVsc2UgaWYgKGludHJlbjAgXHUwMDI2IFJJTlRFTjApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTI1NTc9cGNuZXQzMl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMtMjYwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MjYxMDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jLTI2MTEtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz0zNjc9c3RhdGljIHZvaWQgeGdiZV9pc3JfYmhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy00MzctXHRcdFx0LyogVHVybiBvbiBwb2xsaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jOjQzODpcdFx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTQzOS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jPTUzNz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdiZV9kbWFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTMtXHRcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1NTQ6XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2Y2hhbm5lbC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTU1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM9NTY2PXN0YXRpYyB2b2lkIHhnYmVfdHhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01ODctXHRcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1ODg6XHRcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTg5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tYWluLmM9MTI3PXN0YXRpYyBpcnFyZXR1cm5fdCB4Z2VfaXJxKGNvbnN0IGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzItXHRcdHhnZV9pbnRyX2Rpc2FibGUocGRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYzoxMzM6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwZGF0YS1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tYWluLmMtMTM0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0yMTM9c3RhdGljIGlycXJldHVybl90IHhnZW5lX2VuZXRfcnhfaXJxKGNvbnN0IGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTIxOC1cdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM6MjE5Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cnhfcmluZy1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMjAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jPTM1ND1zdGF0aWMgaXJxcmV0dXJuX3QgYXJjX2VtYWNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jLTM2OS1cdFx0XHRhcmNfcmVnX2Nscihwcml2LCBSX0VOQUJMRSwgUlhJTlRfTUFTSyB8IFRYSU5UX01BU0spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jOjM3MDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21haW4uYy0zNzEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYz0xNjMzPXN0YXRpYyB2b2lkIGF0bDFjX2ludHJfcnhfdHgoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0NS1cdFx0XHRpbnRyX21hc2sgXHUwMDI2PSB+YXRsMWNfcXJlZ3NbaV0ucnhfaXNyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmM6MTY0NjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VycmRfcmluZ1tpXS5uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jLTE2NDctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjUzLVx0XHRcdGludHJfbWFzayBcdTAwMjY9IH5hdGwxY19xcmVnc1tpXS50eF9pc3I7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYzoxNjU0Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZXRwZF9yaW5nW2ldLm5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY1NS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jPTEyNzc9c3RhdGljIGlycXJldHVybl90IGF0bDFlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYy0xMzQ2LVx0XHRcdFx0ICAgXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYzoxMzQ3Olx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYy0xMzQ4LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYz04MT1zdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfaGFuZGxpbmcoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1MzIgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMtODUtXHRcdFx0YmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jOjg2Olx0XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2aW50Zi1cdTAwM2VyeF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMtODctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTkyLVx0XHRcdGJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYzo5MzpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmludGYtXHUwMDNldHhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9ODg3PXN0YXRpYyBpcnFyZXR1cm5fdCBiNDRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy05MTctXHRcdFx0X19iNDRfZGlzYWJsZV9pbnRzKGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjkxODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy05MTktXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM9MTEwND1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtX3N5c3BvcnRfcnhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNC1cdFx0XHRpbnRybDJfMF9tYXNrX3NldChwcml2LCBJTlRSTDJfMF9SRE1BX01CRE9ORSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTEyNTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNi1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTQ2LVx0XHRcdGludHJsMl8wX21hc2tfc2V0KHByaXYsIHJpbmdfYml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYzoxMTQ3Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZ0eHItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTE0OC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYz0xMTU1PXN0YXRpYyBpcnFyZXR1cm5fdCBiY21fc3lzcG9ydF90eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTc4LVx0XHRcdGludHJsMl8xX21hc2tfc2V0KHByaXYsIEJJVChyaW5nKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTE3OTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnR4ci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTgwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jPTMzNjI9Ym54Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzkzLVx0XHRibmFwaS1cdTAwM2VsYXN0X3N0YXR1c19pZHggPSBzYmxrLVx1MDAzZXN0YXR1c19pZHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmM6MzM5NDpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmJuYXBpLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTMzOTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zMjEyPXN0YXRpYyBpcnFyZXR1cm5fdCBiY21nZW5ldF9pc3IxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyMzgtXHRcdFx0YmNtZ2VuZXRfcnhfcmluZ19pbnRfZGlzYWJsZShyeF9yaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzIzOTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnJ4X3JpbmctXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNDAtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTEtXHRcdFx0YmNtZ2VuZXRfdHhfcmluZ19pbnRfZGlzYWJsZSh0eF9yaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzI1MjpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnR4X3JpbmctXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTMtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MTk2Mz1zdGF0aWMgaXJxcmV0dXJuX3Qgc2JtYWNfaW50cihpbnQgaXJxLHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5MC1cdFx0XHRfX3Jhd193cml0ZXEoMCwgc2MtXHUwMDNlc2JtX2ltcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MTk5MTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2c2MtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5Mi1cdFx0XHQvKiBEZXBlbmQgb24gdGhlIGV4aXQgZnJvbSBwb2xsIHRvIHJlZW5hYmxlIGludHIgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmM9NzQxPWJuYWRfbmV0aWZfcnhfc2NoZWR1bGVfcG9sbChzdHJ1Y3QgYm5hZCAqYm5hZCwgc3RydWN0IGJuYV9jY2IgKmNjYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ2LVx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSkpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmM6NzQ3Olx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ4LVx0XHRyeF9jdHJsLVx1MDAzZXJ4X3NjaGVkdWxlJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmM9MTY1Mj1pcnFyZXR1cm5fdCB0MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2Mi1cdFx0XHRpZiAocHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwdGVyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYi9zZ2UuYzoxNjYzOlx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2NC1cdFx0XHRlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jPTQxOD1zdGF0aWMgaXJxcmV0dXJuX3QgZXA5M3h4X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL2VwOTN4eF9ldGguYy00MzEtXHRcdFx0d3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jOjQzMjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2ZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jLTQzMy1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MzE2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgYmVfaW50eChpbnQgaXJxLCB2b2lkICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0zMTc4LVx0XHRudW1fZXZ0cyA9IGV2ZW50c19nZXQoZXFvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6MzE3OTpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmVxby1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtMzE4MC1cdFx0aWYgKG51bV9ldnRzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz04Nz1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTA0LVx0XHRcdC8qIHNjaGVkdWxlIGFmdGVyIG1hc2tpbmcgdG8gYXZvaWQgcmFjZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoxMDU6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcXVldWVbMF0ubmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTA2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTExMj1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxX3R4cngoaW50IGlycSwgdm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMTktXHRcdC8qIHNjaGVkdWxlIGFmdGVyIG1hc2tpbmcgdG8gYXZvaWQgcmFjZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoxMjA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZxdWV1ZS1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMjEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmM9MjE4PXN0YXRpYyBpcnFyZXR1cm5fdCBucHNfZW5ldF9pcnFfaGFuZGxlcihzMzIgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMtMjI3LVx0XHRcdG5wc19lbmV0X3JlZ19zZXQocHJpdiwgTlBTX0VORVRfUkVHX0JVRl9JTlRfRU5BQkxFLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jOjIyODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jLTIyOS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI0ODk9ZmVjX2VuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0yNTAwLVx0XHRcdHdyaXRlbCgwLCBmZXAtXHUwMDNlaHdwICYjNDM7IEZFQ19JTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzoyNTAxOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZmZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0yNTAyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDgxNj1zdGF0aWMgaW50IGZlY19lbmV0X3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQ4MzItXHRcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKFx1MDAyNmZlcC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo0ODMzOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZmZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00ODM0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTMwMD1mc19lbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMwLVx0XHRcdGlmIChuYXBpX29rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6MzMxOlx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmZlcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTMzMi1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjI1Nz1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9yZWNlaXZlKGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIyNzUtXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3JwLVx1MDAzZWdycGxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MjI3NjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmdycC1cdTAwM2VuYXBpX3J4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3Ny1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yMjg4PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX3RyYW5zbWl0KGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIyOTktXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3JwLVx1MDAzZWdycGxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MjMwMDpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmdycC1cdTAwM2VuYXBpX3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjMwMS1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzA0Mz1zdGF0aWMgaXJxcmV0dXJuX3QgdWNjX2dldGhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYy0zMDY3LVx0XHRcdG91dF9iZTMyKHVjY2YtXHUwMDNlcF91Y2NtLCB1Y2NtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jOjMwNjg6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnVnZXRoLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzA2OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz01MDY9aGlwMDRfbWFjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTU2My1cdFx0XHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzo1NjQ6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtNTY1LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTY2Nj1zdGF0aWMgaXJxcmV0dXJuX3QgaGlwMDRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTY5NC1cdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6Njk1Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy02OTYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTcwMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgdHhfZG9uZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtNzEwLVx0XHR3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0sgXHUwMDI2IH5SQ1ZfSU5ULCBwcml2LVx1MDAzZWJhc2UgJiM0MzsgUFBFX0lOVEVOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzo3MTE6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTcxMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYz0yNjA9c3RhdGljIGlubGluZSB2b2lkIG1hbF9zY2hlZHVsZV9wb2xsKHN0cnVjdCBtYWxfaW5zdGFuY2UgKm1hbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjYtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hbC1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL21hbC5jOjI2NzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNm1hbC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL21hbC5jLTI2OC1cdH0gZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTU3MD1zdGF0aWMgaXJxcmV0dXJuX3QgaWJtdmV0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTU3OS1cdFx0V0FSTl9PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE1ODA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNTgxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmM9NDMzMj1zdGF0aWMgaXJxcmV0dXJuX3QgaWJtdm5pY19pbnRlcnJ1cHRfcngoaW50IGlycSwgdm9pZCAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYy00MzQ2LVx0XHRkaXNhYmxlX3NjcnFfaXJxKGFkYXB0ZXIsIHNjcnEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYzo0MzQ3Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpW3NjcnEtXHUwMDNlc2NycV9udW1dKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmMtNDM0OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjE5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNC1cdFx0ZTEwMF9kaXNhYmxlX2lycShuaWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjIyMTU6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZuaWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmM9Mzc0Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYy0zNzc4LVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfbWFpbi5jOjM3Nzk6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfbWFpbi5jLTM3ODAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xNzYzPXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaShpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxNy1cdFx0YWRhcHRlci1cdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODE4Olx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTgyOT1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTg5Ni1cdFx0YWRhcHRlci1cdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODk3Olx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTg5OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTk0Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2l4X3J4KGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xOTY1LVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjE5NjY6XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xOTY3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jPTg5NT1zdGF0aWMgaXJxcmV0dXJuX3QgaWdidmZfaW50cl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTExLVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmM6OTEyOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9yaW5nLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTEzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYz0xOTQ9c3RhdGljIHZvaWQgbGliZXRoX3hza19uYXBpX3NjaGVkKHZvaWQgKmluZm8pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMTk1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoxOTY6XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKGluZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jLTE5Ny19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jPTIyMz12b2lkIGxpYmV0aF94c2tfd2FrZXVwKGNhbGxfc2luZ2xlX2RhdGFfdCAqY3NkLCB1MzIgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzYtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjM3Olx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjM4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaD0zNjM9c3RydWN0IGptZV9yaW5nIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaC0zOTMtI2RlZmluZSBKTUVfUlhfU0NIRURVTEUocHJpdikgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oOjM5NDpcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvam1lLmgtMzk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYz00NzA9c3RhdGljIGlycXJldHVybl90IHhyeDIwMF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc1LVx0XHRsdHFfZG1hX2Rpc2FibGVfaXJxKFx1MDAyNmNoLVx1MDAzZWRtYSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmM6NDc2Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2Y2gtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9MzQxNz1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnFfcngoaW50IGlycSwgdm9pZCAqX2V0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjMtXHRcdG10a19yeF9pcnFfZGlzYWJsZShldGgsIGV0aC1cdTAwM2Vzb2MtXHUwMDNlcnguaXJxX2RvbmVfbWFzayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjM0MjQ6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZldGgtXHUwMDNlcnhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz0zNDMwPXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaGFuZGxlX2lycV90eChpbnQgaXJxLCB2b2lkICpfZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQzNi1cdFx0bXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgTVRLX1RYX0RPTkVfSU5UKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MzQzNzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmV0aC1cdTAwM2V0eF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQzOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9NzY5PXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfc3Rhcl9oYW5kbGVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTc4Ny1cdFx0aWYgKHJ4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjc4ODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VyeF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy03ODktXHRcdGlmICh0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzo3OTA6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNldHhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtNzkxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmM9MzA5PXN0YXRpYyBpcnFyZXR1cm5fdCBtb3hhcnRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbW94YS9tb3hhcnRfZXRoZXIuYy0zMjEtXHRcdFx0d3JpdGVsKHByaXYtXHUwMDNlcmVnX2ltciwgcHJpdi1cdTAwM2ViYXNlICYjNDM7IFJFR19JTlRFUlJVUFRfTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jOjMyMjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmMtMzIzLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmM9MjE4Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEwLVx0XHRuYXRzZW1pX2lycV9kaXNhYmxlKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYzoyMjExOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEyLVx0fSBlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTM2NjA9c3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEoaW50IGZvbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4Mi1cdFx0d3JpdGVsKDAsIGJhc2UgJiM0MzsgTnZSZWdJcnFNYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYzozNjgzOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9MzY5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vcHRpbWl6ZWQoaW50IGZvbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNS1cdFx0d3JpdGVsKDAsIGJhc2UgJiM0MzsgTnZSZWdJcnFNYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYzozNzE2Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNy1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jPTk4Nj1zdGF0aWMgaXJxcmV0dXJuX3QgX19scGNfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy05OTktXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZwbGRhdC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jOjEwMDA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwbGRhdC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtMTAwMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jPTEyNTg9c3RhdGljIGlycXJldHVybl90IHBjaF9nYmVfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29raS1zZW1pL3BjaF9nYmUvcGNoX2diZV9tYWluLmMtMTMxNy1cdFx0XHQvKiBTdGFydCBwb2xsaW5nIGZvciBOQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jOjEzMTg6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jLTEzMTktXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jPTIxOTk9c3RhdGljIGlycXJldHVybl90IHFsM3h4eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmMtMjI0NS1cdFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXHUwMDI2cWRldi1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jOjIyNDY6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnFkZXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDctXHR9IGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYz0xMjU9c3RhdGljIGlycXJldHVybl90IGVtYWNfaXNyKGludCBfaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL2VtYWMvZW1hYy5jLTE1NC1cdFx0XHRpcnEtXHUwMDNlbWFzayBcdTAwMjY9IH5yeF9xLVx1MDAzZWludHI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYzoxNTU6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnJ4X3EtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYy0xNTYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYz02NDc9c3RhdGljIGlycXJldHVybl90IHI2MDQwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjc5LVx0XHRcdG1pc3IgXHUwMDI2PSB+KFJYX0lOVFMgfCBUWF9JTlRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jOjY4MDpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmxwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjgxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz01Njg9c3RhdGljIGlycXJldHVybl90IGNwX2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA1LVx0XHRcdGNwdzE2X2YoSW50ck1hc2ssIGNwX25vcnhfaW50cl9tYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6NjA2Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZjcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA3LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MjEzOT1zdGF0aWMgaXJxcmV0dXJuX3QgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgwLVx0XHRcdFJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjE4MTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTAzMz1zdGF0aWMgaXJxcmV0dXJuX3QgcnRhc2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQ2LVx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZpdmVjLVx1MDAzZW5hcGkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA0NzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNml2ZWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQ4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwNTU9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX3FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDY4LVx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZpdmVjLVx1MDAzZW5hcGkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA2OTpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNml2ZWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDcwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM9MTIwMj1zdGF0aWMgYm9vbCByYXZiX3F1ZXVlX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xMjIwLVx0XHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM6MTIyMTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW3FdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMTIyMi1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jPTk2MT1zdGF0aWMgdm9pZCByc3dpdGNoX3F1ZXVlX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTk2OS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2cmRldi1cdTAwM2Vwcml2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYzo5NzA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZyZGV2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NzEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9NDgzPXN0YXRpYyBpcnFyZXR1cm5fdCBydHNuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNDk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM6NDk5Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNTAwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYz0xODM4PXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4NzMtXHRcdFx0XHQgICAgIEVFU0lQUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjE4NzQ6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNm1kcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMtMTg3NS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xNjY5PXN0YXRpYyBpcnFyZXR1cm5fdCBzeGdiZV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jLTE2ODAtXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZWRpc2FibGVfZG1hX2lycShwcml2LVx1MDAzZWlvYWRkciwgcnhxLVx1MDAzZXF1ZXVlX25vKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jOjE2ODE6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYz0xMDY3PXN0YXRpYyBpcnFyZXR1cm5fdCBlcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5Mi1cdFx0XHRlcGljX25hcGlfaXJxX29mZihkZXYsIGVwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvZXBpYzEwMC5jOjEwOTM6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmVwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYz0xNTMwPXN0YXRpYyBpcnFyZXR1cm5fdCBzbXNjOTExeF9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTU4MC1cdFx0XHQvKiBTY2hlZHVsZSBhIE5BUEkgcG9sbCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jOjE1ODE6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnBkYXRhLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTE1ODItXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jPTE0Mzc9c3RhdGljIGlycXJldHVybl90IGVtYWNfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYy0xNDc0LVx0XHRcdGVtYWNfZGlzYWJsZV9pbnRlcnJ1cHQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM6MTQ3NTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTQ3Ni1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzA2Nz1zdGF0aWMgaW50IHN0bW1hY19uYXBpX2NoZWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGNoYW4sIHUzMiBkaXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMDg1LVx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2gtXHUwMDNlbG9jaywgZmxhZ3MpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTAyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBzb21ldGhpbmcgdGhhdCB0cmlnZ2VyZWQgYSBmbGFnLiBJIHRob3VnaHQgYF9fbmFwaV9zY2hlZHVsZWAgd2FzIGludGVybmFsLCBidXQgbm93IEkmIzM5O20gc2VlaW5nIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGlmIGBuYXBpX3NjaGVkdWxlYCBpdHNlbGYgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCYjMzk7cyB0aGUga2V5IG5vdy4gR290dGEgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gb3IgcmVhc3Nlc3MgdGhlIHNpdHVhdGlvbi4gVGhpcyBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHRoaXMgbW9kdWxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTi1BUEkuIFRoaXMgaXMgbGlrZWx5IGFuIG92ZXJzaWdodCB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5hcGlfc2NoZWR1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NjcyND12b2lkIF9fbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNjczMS19XG5uZXQvY29yZS9kZXYuYzo2NzMyOkVYUE9SVF9TWU1CT0woX19uYXBpX3NjaGVkdWxlKTtcbm5ldC9jb3JlL2Rldi5jLTY3MzMtXG4tLVxubmV0L2NvcmUvZGV2LmM9Njc0Mz1ib29sIG5hcGlfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNjc2My19XG5uZXQvY29yZS9kZXYuYzo2NzY0OkVYUE9SVF9TWU1CT0wobmFwaV9zY2hlZHVsZV9wcmVwKTtcbm5ldC9jb3JlL2Rldi5jLTY3NjUtXG4tLVxubmV0L2NvcmUvZGV2LmM9Njc3Nj12b2lkIF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY3ODItfVxubmV0L2NvcmUvZGV2LmM6Njc4MzpFWFBPUlRfU1lNQk9MKF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYpO1xubmV0L2NvcmUvZGV2LmMtNjc4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTkFQSSBUaHJlYWRpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGluc3RydW1lbnQgdGhlIHRocmVhZGVkIE5BUEkgbG9vcCB3aXRoIG15IHRvb2xzLiBJIHNlZSB0aGF0IGBfX25hcGlfc2NoZWR1bGVgIGlzIGV4cG9ydGVkLCBidXQgdGhhdCYjMzk7cyByZWFsbHkganVzdCB0aGUgKnN0YXJ0aW5nKiBwb2ludDsgdGhlIGxvb3AgaXRzZWxmIGlzIGRyaXZlbiBieSBuZXR3b3JrIHRyYWZmaWMsIHNvIHRoYXQmIzM5O3Mgbm90IHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIG1hbmlwdWxhdGUuIE15IGdvYWwgaXMgdG8gZ2V0ICp0aHJlYWRlZCogTkFQSSBnb2luZy4KCkhtbSwgbGV0JiMzOTtzIHNlZS4gSWYgSSB3YW50IHRvIGRpcmVjdGx5IGNvbnRyb2wgdGhlIHRocmVhZGVkIGxvb3AsIGBuYXBpX3RocmVhZGVkX3BvbGxgIGxvb2tzIHByb21pc2luZy4gVGhhdCYjMzk7cyAqdGhlKiBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4gZm9yIHRoZSB0aHJlYWRlZCBwYXJ0LCBvciBwb3RlbnRpYWxseSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIOKAkyB0aGF0IG9uZSBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgKmVuYWJsaW5nKiB0aHJlYWRlZCBOQVBJLiBPaCwgd2FpdCwgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgY2hhbGxlbmdlIGZvciBzeXprYWxsZXI7IEkgbmVlZCBzb21ldGhpbmcgY2FsbGFibGUuIElzIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgYSBzdWl0YWJsZSBmb2N1cyBwb2ludCwgdGhlbj8gWWVzLCBhYnNvbHV0ZWx5ISBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gaXQgaXMgaG93IHN5emthbGxlciBjYW4gZW5hYmxlIHRocmVhZGVkIE5BUEkuCgpBbHNvLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGVhcmx5IHNldHVwIHBhcmFtcy4gVGhlcmUmIzM5O3MgYHNldHVwX2JhY2tsb2dfbmFwaV90aHJlYWRzYCwgYnV0IEkgY2FuIGRlYWwgd2l0aCB0aGF0IGxhdGVyLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGlzIGFjY2Vzc2libGUuIEdvb2QsIGl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyOyB0aGF0JiMzOTtzIHJlYWNoYWJsZS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gZm9jdXMgb24gYG5hcGlfdGhyZWFkZWRfcG9sbGA/IFllcywgaXQmIzM5O3MgdGhlIGt0aHJlYWQgZnVuY3Rpb24sIHNvIEkgY2FuIGF0IGxlYXN0IHJlYWNoIGl0LiBUaG91Z2gsIHNpbmNlIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHN0YXRpYywgc3l6a2FsbGVyIG1pZ2h0IGhhdmUgdHJvdWJsZSBmb2N1c2luZyAqZGlyZWN0bHkqIG9uIGl0LiBJdCYjMzk7cyBiZXR0ZXIgaWYgSSBwcm92aWRlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byB0YXJnZXQuCgpIb2xkIG9uLCBidXQgd2FpdC4uLiBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSXQmIzM5O3MganVzdCAqYmV0dGVyKiB0byBnaXZlIGl0IGEgbm9uLXN0YXRpYyBvbmUuIE9rYXksIGxldCYjMzk7cyBzZWUgaWYgYG5hcGlfc2V0X3RocmVhZGVkYCBpcyBub24tc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzE2MT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzE5OC1cbm5ldC9jb3JlL2Rldi5jOjcxOTk6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cdFx0XHRcdCAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkX21vZGUpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIwOC1cbm5ldC9jb3JlL2Rldi5jOjcyMDk6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyMTAtXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIzNC1cdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG5uZXQvY29yZS9kZXYuYzo3MjM1Olx0XHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYy03MjM2LVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxubmV0L2NvcmUvZGV2LmM6NzI2NTpcdFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03MjY2LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTc0ODY9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwNS1cbm5ldC9jb3JlL2Rldi5jOjc1MDY6XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkZWQpKTtcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiBJIHNlZSB0aGF0IGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBhbmQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgYWRkIHRob3NlLCBhbG9uZyB3aXRoIGBfX25hcGlfc2NoZWR1bGVgIGFuZCBgX19uYXBpX3NjaGVkdWxlX2lycW9mZmAg4oCTIHRoZXkgc2VlbSByZWxldmFudCBhcyB3ZWxsLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIGBDT05GSUdfTkVUYCBpcyB0aGUgYmFzZWxpbmUsIG9mIGNvdXJzZSwgYnV0IGFueXRoaW5nIGVsc2U/IE5vcGUsIG5vdGhpbmcgc3RhbmRzIG91dC4KCkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGlzIGRvd246IFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIGxvb3AsIHdoZXJlIHRoZSBzY2hlZHVsaW5nIGlzIG1vZGlmaWVkIGJ5IGZvcmNpbmcgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwgb24gKmV2ZXJ5KiBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgQ1BVIHRpbWUuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBOQVBJIHRocmVhZCBDUFUgeWllbGRpbmcgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAsIGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBgX19uYXBpX3NjaGVkdWxlYCwgYF9fbmFwaV9zY2hlZHVsZV9pcnFvZmZgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFsgXSAoaS5lLiBub3RoaW5nIHNwZWNpYWwpCgpIb2xkIG9uIGEgc2VjLi4uIGBuYXBpX3NldF90aHJlYWRlZGAgaXNuJiMzOTt0IGV4cG9ydGVkLCBldmVuIHRob3VnaCBpdCYjMzk7cyBub24tc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgbm90IGEgcHJvYmxlbS4gKkhtbSwqIGF0IGxlYXN0IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgYWxzbyBub24tc3RhdGljLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgbmV0aWZfc2V0X3RocmVhZGVkYCBpcyBleHBvcnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5ldGlmX3NldF90aHJlYWRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgVmlzaWJpbGl0eSBvZiBOLUFQSSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggRm9jdXNTeW1ib2xzIGhlcmUsIGFuZCB0aGUgZmFjdCB0aGF0IHNvbWV0aGluZyBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBhbHNvIGlzbiYjMzk7dCBzdGF0aWMsIGRvZXNuJiMzOTt0IHByZXNlbnQgYSBwcm9ibGVtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgTi1BUEkgZnVuY3Rpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlaXIgc2NvcGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY29kZS4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIG5vbi1zdGF0aWMuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgb25lIGNoZWNrIGRvbmUuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHJ1bl9iYWNrbG9nX25hcGlgLiBBbHJpZ2h0LCB0aGF0IG9uZSBpcyBhbHNvIHN0YXRpYy4gUmlnaHQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIHdlaXJkbmVzcyBJJiMzOTt2ZSBvdmVybG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzcKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKlRoZSBOYXR1cmUgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgc2l0dWF0aW9uIGNsZWFybHkgaXNuJiMzOTt0IHN0YXRpYy4gSXQmIzM5O3MgZHluYW1pYywgY2hhbmdpbmcsIG9yIGF0IGxlYXN0IGNhcGFibGUgb2YgY2hhbmdlLiBJIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdC4gVGhlIGtleSBoZXJlIGlzIHRvIGVtYnJhY2UgdGhlIG5vbi1zdGF0aWMgZWxlbWVudC4gVGhpcyByZXF1aXJlcyBhIHNoaWZ0IGluIG15IHRoaW5raW5nLCBhbmQgYXBwcm9hY2guIE5vdyB0aGF0IEkga25vdyB0aGlzLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuIEkgd2lsbCBkaWN0YXRlIHdoYXQgdGhlIG91dGNvbWUgbXVzdCBiZS4gVGhlIG91dGNvbWUgY2Fubm90IGJlIHNldCwgb3IgbGVmdCB0byBjaGFuY2UsIG9yIHJhbmRvbW5lc3MuCgpZb3VyIFN1bW1hcnk6CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7X19uYXBpX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZV9pcnFvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7X19uYXBpX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZV9pcnFvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODY1OGM1NzJmMTg5OTU5MjU5YWZhNTZhNDkyZTIzZTc3ZWZlOGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03ODc2LDExICYjNDM7Nzg3NiwxNCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczoKJiM0MzsJCSAqIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28gYSB0aHJlYWQKJiM0MzsJCSAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJaWYgKCFyZXBvbGwpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2Rldi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgLiBJdCYjMzk7cyBub3cgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keS4KCk15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBhIENQVSBob2cgZml4LCBwbGFpbiBhbmQgc2ltcGxlLiBXZSYjMzk7cmUgcHJldmVudGluZyBhIHRocmVhZCBmcm9tIG1vbm9wb2xpemluZyB0aGUgQ1BVIHdoZW4gaXQmIzM5O3MgY29uc3RhbnRseSBmaW5kaW5nIHdvcmssIGV2ZW4gd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCBkZWNpZGVzIG5vdCB0byBzY2hlZHVsZSByaWdodCBhd2F5LiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhlIHRocmVhZCB5aWVsZHMgYmFjayB0byB0aGUgc2NoZWR1bGVyLgoKSeKAmW0gcGxlYXNlZCB0byBzZWUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGVpdGhlci4gQmFzZWQgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEtNU0FOIGlzIGNvbXBsZXRlbHkgaXJyZWxldmFudCBoZXJlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRocmVhZCBzY2hlZHVsaW5nLCBhbmQgd2UmIzM5O2xsIGNhdGNoIGFueSBwcm9ibGVtcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogS0FTQU4sIExPQ0tERVAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHdhdGNoZG9nLiBUaGUgd2F0Y2hkb2cgaXMgdGhlIHJlYWwgaGVybyBoZXJlLCBzaW5jZSBpdCBjYW4gZmxhZyB0aGUgQ1BVIGhvZ2dpbmcgYmVoYXZpb3IuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIE5BUEkgdGhyZWFkIGdyYWNlZnVsbHkgeWllbGRzIHRoZSBDUFUgYWZ0ZXIgZWFjaCBsb29wIGl0ZXJhdGlvbiwgZXZlbiBpZiBpdCBpbW1lZGlhdGVseSBmaW5kcyBtb3JlIHdvcmsuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBjb250aW51b3VzIGV4ZWN1dGlvbiB3aXRob3V0IHlpZWxkaW5nIGlzIGEgcmVjaXBlIGZvciB3YXRjaGRvZyB0aW1lb3V0cyBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBvbGxpbmcgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGxgIG9yIGBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBwcmV2ZW50cyB0aGUgTkFQSSB0aHJlYWQgZnJvbSBob2dnaW5nIHRoZSBDUFUgYW5kIHRyaWdnZXJpbmcgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBpdCBjb250aW51b3VzbHkgZmluZHMgd29yayBidXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuIFRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIHRocmVhZCBzY2hlZHVsaW5nIGFuZCBDUFUgeWllbGRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgQ1BVIHN0YWxscyBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgd2F0Y2hkb2dzIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0MS44MjkyMDY4MjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIzMzkwNDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbG9vcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBiZWhhdmlvciBieSB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTkFQSSB0aHJlYWRzIHlpZWxkIHRoZSBDUFUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjQxLjgyOTIxNDA5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNTQ1OTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03ODc2LDExICs3ODc2LDE0IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG4gXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbi1cXHRcXHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xcbi1cXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XFxuK1xcdFxcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXFxuIFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxcbitcXHRcXHQgKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIGEgdGhyZWFkXFxuK1xcdFxcdCAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXBvbGwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0My4yNTU0OTg0ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzYyMTgzMzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2NThjNTcyZjE4OTk1OTI1OWFmYTU2YTQ5MmUyM2U3N2VmZThlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE0OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggZWNlNjcwMDUzNmQ5Yi4uODg0YWEyZGNhZGJlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc4NzYsMTEgKzc4NzYsMTQgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4rXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXG4gXHRcdFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdH1cbitcbitcdFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxuK1x0XHQgKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIGEgdGhyZWFkXG4rXHRcdCAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS5cbitcdFx0ICovXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRpZiAoIXJlcG9sbClcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjQzLjI1NTQ5OTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjMyMDg2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQVBJIFRocmVhZGVkIFBvbGxpbmcgTG9vcCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtb3ZpbmcgYGNvbmRfcmVzY2hlZCgpYCBvdXRzaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2sgdGllZCB0byBgcmVwb2xsYCBhbmQgYGJ1c3lfcG9sbF9sYXN0X3FzYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHRoZSBpbnRlbnQgaXMgdG8gaGF2ZSBpdCBleGVjdXRlIG9uICpldmVyeSogaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBvciB3aGVuIGV4aXRpbmcgdGhlIGxvb3AsIHJhdGhlciB0aGFuIGp1c3QgY29uZGl0aW9uYWxseS5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgcGFydCwgb3BlcmF0ZXMuIEl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBOQVBJIHRocmVhZHMgYXJlIHNjaGVkdWxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiBDUFUgdXRpbGl6YXRpb24gYW5kIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IHdpdGhpbiB0aGUgZGV2aWNlIGRyaXZlciBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSBpcyBleHBlY3RlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpZiBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0Ni42Nzg3MTIzMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV90aHJlYWRlZF9wb2xsX2xvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzgxNz1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg0MC1cXG5uZXQvY29yZS9kZXYuYzo3ODQxOnN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5uZXQvY29yZS9kZXYuYy03ODQyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4OTY9c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MTYtXFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFxcdTAwMjZsYXN0X3FzIDogTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtNzkxOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzIxNT1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzIxOC1cXG5uZXQvY29yZS9kZXYuYzoxMzIxOTpcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2csIE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMjIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NDYuNzI0NjExNDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MjgzMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgU2NoZWR1bGluZyBDaGFuZ2U6IEEgU3RyYXRlZ2ljIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgbmFwaV90aHJlYWRlZF9wb2xsYCBhbmQgYHJ1bl9iYWNrbG9nX25hcGlgLiBJdCdzIGEga2V5IG5ldHdvcmtpbmcgZnVuY3Rpb24sIHNvIGltbWVkaWF0ZWx5IG15IGV4cGVydCBpbnN0aW5jdCBraWNrcyBpbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5TY2hlZHVsaW5nIGNoYW5nZXMgYXJlICpub3RvcmlvdXMqIHRvIGZ1enouIFRoZXkncmUgaGFyZCB0byB0cmlnZ2VyIGluIGEgbWVhbmluZ2Z1bCB3YXkuIEhvd2V2ZXIsIHRoaXMgaXMgdGllZCB0byBOQVBJIHBvbGxpbmcsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgdHJhZmZpYy4gVGhhdCdzIGEgZ29vZCBzaWduLiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIG9uIE5BUEkgaXMgZW50aWNpbmcgYmVjYXVzZSBOQVBJIGlzIHRoZSBuZXR3b3JraW5nIGtlcm5lbCBBUEkuXG5cblRoZW4gSSBwYXVzZWQuIFdhaXQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyBhICpjb3JlKiBrZXJuZWwgZnVuY3Rpb24uIFRoYXQgY2hhbmdlcyB0aGluZ3MuIEV2ZW4gdGhvdWdoIHRoZSBwYXRjaCBpcyBzbWFsbCwgaXQncyBmaXhpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBhIHdhdGNoZG9nIHdhcm5pbmcgb3IgQ1BVIGhvZ2dpbmcgaXNzdWUuIFRoYXQncyBhIGJpZyBkZWFsLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgYSBkZW5pYWwgb2Ygc2VydmljZSBhdCB0aGUgdmVyeSBsZWFzdC5cblxuQWxyaWdodCwgc28gdGhlIG5leHQgdGhpbmcgSSdtIGFza2luZyBteXNlbGYgaXMsIHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGZvY3VzIG9uPyBgbmFwaV90aHJlYWRlZF9wb2xsYCBvciBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIChzaW5jZSBpdCdzIGBzdGF0aWNgKT8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGlmIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIGFsc28gYHN0YXRpY2AuIFllcCwgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgYWxzbyBgc3RhdGljYC4gV2FpdCBhIHNlY29uZCwgYW5kIGBydW5fYmFja2xvZ19uYXBpYCBpcyBhbHNvIHN0YXRpYz9cblxuT2theSwgdGltZSB0byBjaGVjayB3aGVyZSBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyB1c2VkLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgcHJvbWlzaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjUyLjA5NzQ0Nzg2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xcbm5ldC9jb3JlL2Rldi5jLTE2NDUtXFxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcXG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxcbm5ldC9jb3JlL2Rldi5jPTE2NDg9c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE2NTUtXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6MTY1NjpcXHRuLVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIG4sIFxcXCJuYXBpLyVzLSVkXFxcIixcXG5uZXQvY29yZS9kZXYuYy0xNjU3LVxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MjkyPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMwNS1cXG5uZXQvY29yZS9kZXYuYzo1MzA2OlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcXG5uZXQvY29yZS9kZXYuYy01MzA3LVxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxubmV0L2NvcmUvZGV2LmMtNTMwOC1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzA5OlxcdFxcdGlmICghbXlzZC1cXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcXHUwMDI2XFx1MDAyNiAhbXlzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxcbm5ldC9jb3JlL2Rldi5jLTUzMTAtXFx0XFx0XFx0X19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03ODE3PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03ODQwLVxcbm5ldC9jb3JlL2Rldi5jOjc4NDE6c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTc4NDItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg1NS1cXHRcXHRzZCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhKTtcXG5uZXQvY29yZS9kZXYuYzo3ODU2OlxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xcbm5ldC9jb3JlL2Rldi5jLTc4NTctXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03ODYxLVxcbm5ldC9jb3JlL2Rldi5jOjc4NjI6XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jLTc4NjMtXFx0XFx0YmFycmllcigpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg5NS1cXG5uZXQvY29yZS9kZXYuYzo3ODk2OnN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXFxubmV0L2NvcmUvZGV2LmMtNzg5Ny17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTE2LVxcbm5ldC9jb3JlL2Rldi5jOjc5MTc6XFx0XFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AobmFwaSwgd2FudF9idXN5X3BvbGwgPyBcXHUwMDI2bGFzdF9xcyA6IE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMyMTU9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMyMTgtXFxubmV0L2NvcmUvZGV2LmM6MTMyMTk6XFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoXFx1MDAyNnNkLVxcdTAwM2ViYWNrbG9nLCBOVUxMKTtcXG5uZXQvY29yZS9kZXYuYy0xMzIyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjUyLjE0NDE4NjcxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTI1NTU1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsYCBLZXJuZWwgVGhyZWFkKipcblxuQWxyaWdodCwgc28gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgZGVmaW5pdGVseSBhIGt0aHJlYWQgZnVuY3Rpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhIGJpdCBiZXR0ZXIuIFRoZSBjbHVlIGlzIHRoYXQgYG5hcGlfa3RocmVhZF9jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgY3JlYXRpb24uIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93IEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGlzIGBuYXBpX2t0aHJlYWRfY3JlYXRlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhpcyB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjU0LjkzNjc0NTE2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA2NjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX2t0aHJlYWRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE2NDY9c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XFxubmV0L2NvcmUvZGV2LmMtMTY0Ny1cXG5uZXQvY29yZS9kZXYuYzoxNjQ4OnN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxubmV0L2NvcmUvZGV2LmMtMTY0OS17XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03MjA5PWludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjEzLVxcdFxcdGlmICghbmFwaS1cXHUwMDNldGhyZWFkKSB7XFxubmV0L2NvcmUvZGV2LmM6NzIxNDpcXHRcXHRcXHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcXG5uZXQvY29yZS9kZXYuYy03MjE1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzI0MT1pbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjUxLVxcdFxcdFxcdGlmICghbmFwaS1cXHUwMDNldGhyZWFkKSB7XFxubmV0L2NvcmUvZGV2LmM6NzI1MjpcXHRcXHRcXHRcXHRlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xcbm5ldC9jb3JlL2Rldi5jLTcyNTMtXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MDMtXFx0aWYgKG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhkZXYsIG5hcGkpKVxcbm5ldC9jb3JlL2Rldi5jOjc2MDQ6XFx0XFx0aWYgKG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSkpXFxubmV0L2NvcmUvZGV2LmMtNzYwNS1cXHRcXHRcXHRkZXYtXFx1MDAzZXRocmVhZGVkID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjU0Ljk4MjgxNjQ5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDYzOTcxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhyZWFkZWQgTkFQSS4uLiB0aGF0J3MgYSBrZXkgZmVhdHVyZSwgcmlnaHQ/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGN1cnJlbnQgc3RhdGUuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgdGhpbmcgZW5hYmxlZCBieSBkZWZhdWx0PyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBjaGVja2luZyB0aGlzIGNvbmZpZyBpcyB3aXRoIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgc2V0dXAuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSdsbCBjaGVjay4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NTcuODI5MjE2MzM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX2dldF90aHJlYWRlZF9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MDItXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NzYwMzpcXHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXFxubmV0L2NvcmUvZGV2LmMtNzYwNC1cXHRcXHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NTcuODc0MzgzMjA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTk1ODk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqVHJhY2luZyBEb3duIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyBwcm9kdWN0aXZlIHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlcnMgYW5kIHNvdXJjZSBmaWxlcyBmb3IgdGhlIE5vZGUuanMgYWRkLW9uIEFQSSAoTi1BUEkpLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBOLUFQSSBsaWJyYXJ5LCBidXQgaXQncyBhbHdheXMgYmVzdCB0byB2ZXJpZnkuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBuYXZpZ2F0aW5nIHRoZSBOb2RlLmpzIHNvdXJjZSB0cmVlIG9yIHBvc3NpYmx5IGEgZGVkaWNhdGVkIE4tQVBJIGhlYWRlciBmaWxlLiBMZXQncyBzdGFydCBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTowMC43NzM5NzY0MTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjUxMDU0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzYwMi1cXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo3NjAzOlxcdGlmIChuYXBpX2dldF90aHJlYWRlZF9jb25maWcoZGV2LCBuYXBpKSlcXG5uZXQvY29yZS9kZXYuYy03NjA0LVxcdFxcdGlmIChuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpKVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MzY4PXN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZFxcbm5ldC9jb3JlL2Rldi5oOjM2OTpuYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbm5ldC9jb3JlL2Rldi5oLTM3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjAyLjU5OTA4ODI4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU5ODc1MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZ2AgYW5kLCBmcmFua2x5LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiBleGFjdGx5IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGNvcmUuIFNwZWNpZmljYWxseSwgSSBrbm93IGl0IGlzIGEgZnVuY3Rpb24sIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBnZXQgdGhlIHRocmVhZGVkIGNvbmZpZ3VyYXRpb24uIEdpdmVuIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGRlZmluaXRpb24gd2lsbCBiZSBpbiBgbmV0L2NvcmUvZGV2LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZS4gSSB3aWxsIGhhdmUgdG8gbG9vayB0byBnZXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjExLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MDUuMzU4OTY1NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY4OlxcdHN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZFxcbiAzNjk6XFx0bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4gMzcwOlxcdHtcXG4gMzcxOlxcdFxcdGlmIChuLVxcdTAwM2Vjb25maWcpXFxuIDM3MjpcXHRcXHRcXHRyZXR1cm4gbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZDtcXG4gMzczOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZXRocmVhZGVkO1xcbiAzNzQ6XFx0fVxcbiAzNzU6XFx0XFxuIDM3NjpcXHRpbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxcbiAzNzc6XFx0XFx0XFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjA1LjM1OTA0ODA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDc5NjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQncyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRocmVhZGVkIE5BUEkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhyZWFkZWQgTkFQSSwgdGhhdCdzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMsIGdvb2QgdG8ga25vdy5cIiBCdXQgdGhlbiBJIHNlZSBzb21ldGhpbmcgdGhhdCB0cmlnZ2VycyBhIGRlZXBlciBkaXZlLiBgcnVuX2JhY2tsb2dfbmFwaWAg4oCTIHRoYXQgcmluZ3MgYSBiZWxsISBJdCBhbHNvIGNhbGxzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFuZCB0aGF0J3MgdGhlIGNydWNpYWwgbGluay4gTm93IHRoYXQgdGhlIGBydW5fYmFja2xvZ19uYXBpYCBmdW5jdGlvbiBpcyBwcmVzZW50LCB0aGUga2V5IHF1ZXN0aW9ucyBzdGFydCBmb3JtaW5nOiBJcyBgcnVuX2JhY2tsb2dfbmFwaWAgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0/IElzIHRoZXJlIGEgcmVhc29uIGl0IGlzIHRoZXJlPyBMZXQgbWUgZGlnIGludG8gdGhhdCBgcnVuX2JhY2tsb2dfbmFwaWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBmbG93IGJldHRlciB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTowOC42NjcwMTU2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3Mjk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2JhY2tsb2dfbmFwaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz0xMzIwNz1zdGF0aWMgaW50IGJhY2tsb2dfbmFwaV9zaG91bGRfcnVuKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzIxNC1cXG5uZXQvY29yZS9kZXYuYzoxMzIxNTpzdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxubmV0L2NvcmUvZGV2LmMtMTMyMTYte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMyMzE9c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMyMzMtXFx0LnRocmVhZF9zaG91bGRfcnVuXFx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcXG5uZXQvY29yZS9kZXYuYzoxMzIzNDpcXHQudGhyZWFkX2ZuXFx0XFx0PSBydW5fYmFja2xvZ19uYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTEzMjM1LVxcdC50aHJlYWRfY29tbVxcdFxcdD0gXFxcImJhY2tsb2dfbmFwaS8ldVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjA4LjcxMzc1MDc1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2MTUxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBiYWNrbG9nX3RocmVhZHNgJ3MgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGJhY2tsb2dfdGhyZWFkc2AgaXMgaWRlbnRpZmllZCBhcyBhbiBgc21wX2hvdHBsdWdfdGhyZWFkYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIHNwZWNpZmljIGNoYXJhY3RlcmlzdGljcyBhbmQgaW1wbGljYXRpb25zIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWdnaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgU01QIChTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZykgZnJhbWV3b3JrLiBLbm93aW5nIGl0J3Mgb2YgdGhpcyB0eXBlLCBJIHdhbnQgdG8gcGluIGRvd24gZXhhY3RseSB3aGVyZSB0aGlzIHRocmVhZCBpcyByZWdpc3RlcmVkLiBVbmRlcnN0YW5kaW5nIGl0cyByZWdpc3RyYXRpb24gcG9pbnQgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyBpdHMgbGlmZWN5Y2xlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdHMgZW50cnkgcG9pbnQgaXMgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHV0aWxpemVzIGF0IGluaXRpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgaG90cGx1ZyBldmVudCBoYW5kbGluZyBhbmQgc2NoZWR1bGluZy4gSXQgd2lsbCBsaWtlbHkgcmV2ZWFsIGNyaXRpY2FsIGRldGFpbHMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHJlc3BvbnNpYmlsaXRpZXMgd2l0aGluIHRoZSBzeXN0ZW0ncyBydW50aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MTEuNzk5OTA1NjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc1OTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNrbG9nX3RocmVhZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MjAxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKmRldl9pbmRleF9oYXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yMDctXFxubmV0L2NvcmUvZGV2LmM6MjA4OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1c2VfYmFja2xvZ190aHJlYWRzX2tleSk7XFxubmV0L2NvcmUvZGV2LmMtMjA5LVxcbm5ldC9jb3JlL2Rldi5jPTIxMD1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyhjaGFyICphcmcpXFxubmV0L2NvcmUvZGV2LmMtMjExLXtcXG5uZXQvY29yZS9kZXYuYzoyMTI6XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy0yMTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yMTU9ZWFybHlfcGFyYW0oXFxcInRocmVhZF9iYWNrbG9nX25hcGlcXFwiLCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyk7XFxubmV0L2NvcmUvZGV2LmMtMjE2LVxcbm5ldC9jb3JlL2Rldi5jOjIxNzpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMjE4LXtcXG5uZXQvY29yZS9kZXYuYzoyMTk6XFx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy0yMjAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjIzLVxcbm5ldC9jb3JlL2Rldi5jOjIyNDpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMjI1LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTIzMT1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9zYXZlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjM3LVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxubmV0L2NvcmUvZGV2LmM6MjM4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yMzktXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX2xvY2tfaXJxX2Rpc2FibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcXG5uZXQvY29yZS9kZXYuYzoyNDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JQUykgfHwgdXNlX2JhY2tsb2dfdGhyZWFkcygpKVxcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1Ni1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldi5jOjI1NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmMtMjU4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjYzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTI2NC17XFxubmV0L2NvcmUvZGV2LmM6MjY1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDk2NT1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00OTgwLVxcdFxcdGlmICh0aHJlYWQpIHtcXG5uZXQvY29yZS9kZXYuYzo0OTgxOlxcdFxcdFxcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkgXFx1MDAyNlxcdTAwMjYgdGhyZWFkID09IHJhd19jcHVfcmVhZChiYWNrbG9nX25hcGkpKVxcbm5ldC9jb3JlL2Rldi5jLTQ5ODItXFx0XFx0XFx0XFx0Z290byB1c2VfbG9jYWxfbmFwaTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTUyOTI9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01Mjk3LVxcdGlmIChzZCAhPSBteXNkKSB7XFxubmV0L2NvcmUvZGV2LmM6NTI5ODpcXHRcXHRpZiAodXNlX2JhY2tsb2dfdGhyZWFkcygpKSB7XFxubmV0L2NvcmUvZGV2LmMtNTI5OS1cXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzE3PXZvaWQga2lja19kZWZlcl9saXN0X3B1cmdlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzIxLVxcbm5ldC9jb3JlL2Rldi5jOjUzMjI6XFx0aWYgKHVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xcbm5ldC9jb3JlL2Rldi5jLTUzMjMtXFx0XFx0YmFja2xvZ19sb2NrX2lycV9zYXZlKHNkLCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjYzMj1zdGF0aWMgdm9pZCBuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTY2MzYtXFxubmV0L2NvcmUvZGV2LmM6NjYzNzpcXHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcXHUwMDI2XFx1MDAyNiByZW1zZCkge1xcbm5ldC9jb3JlL2Rldi5jLTY2MzgtXFx0XFx0c2QtXFx1MDAzZXJwc19pcGlfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NjQ5PXN0YXRpYyBib29sIHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NjUxLSNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmM6NjY1MjpcXHRyZXR1cm4gIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcXHUwMDI2XFx1MDAyNiBzZC1cXHUwMDNlcnBzX2lwaV9saXN0O1xcbm5ldC9jb3JlL2Rldi5jLTY2NTMtI2Vsc2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNzIyPXN0YXRpYyBpbnQgZGV2X2NwdV9kZWFkKHVuc2lnbmVkIGludCBvbGRjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc2Ny1cXG5uZXQvY29yZS9kZXYuYzoxMjc2ODpcXHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xcbm5ldC9jb3JlL2Rldi5jLTEyNzY5LSNpZmRlZiBDT05GSUdfUlBTXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzIyMj1zdGF0aWMgdm9pZCBiYWNrbG9nX25hcGlfc2V0dXAodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjMwLVxcbm5ldC9jb3JlL2Rldi5jOjEzMjMxOnN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG5uZXQvY29yZS9kZXYuYy0xMzIzMi1cXHQuc3RvcmVcXHRcXHRcXHQ9IFxcdTAwMjZiYWNrbG9nX25hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI0Mz1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjk5LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2Rldi5jOjEzMzAwOlxcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmM6MTMzMDE6XFx0XFx0c21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKFxcdTAwMjZiYWNrbG9nX3RocmVhZHMpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMzAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNToxMS44NDc2NzI5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU3NDE4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5BUEkgVGhyZWFkaW5nIExvb3AqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGluIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAuIFRoaXMgaXMgdXNlZCBieSBib3RoIHJlZ3VsYXIgTkFQSSB0aHJlYWRzIGFuZCB0aG9zZSB0aGF0IGFyZSBoYW5kbGluZyBiYWNrbG9nLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgdG8gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBuYW1lbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbCBsb29wLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGlmIGZ1enppbmcgaXQgaXMgYSBnb29kIGlkZWEuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncy5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBhIGNvbmZpZyBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2UnbGwgbmVlZCBgQ09ORklHX05FVGAsIGJ1dCB0aGF0J3MgYSBnaXZlbiDigJMgaXQncyBhbHdheXMgZW5hYmxlZCBmb3IgYW55IG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm8gc3BlY2lmaWMgTkFQSS1yZWxhdGVkIGNvbmZpZyBvcHRpb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLiBOQVBJIGlzIHNvIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2sgd29ya3MsIHRoZXJlJ3Mgbm90IHVzdWFsbHkgYW55IG1vZHVsYXJpdHkgdG8gaXQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuXG5cbldhaXQsIGxvb2tpbmcgZGVlcGVyIGludG8gdGhpcywgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5hcGlfdGhyZWFkZWRfcG9sbGAgYW5kIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRocmVhZGVkIE5BUEkgYmVoYXZpb3IgaXMgaW5pdGlhdGVkIGVpdGhlciB3aGVuIHNvbWVvbmUgY2FsbHMgYG5hcGlfc2V0X3RocmVhZGVkYCBvciBgbmV0aWZfc2V0X3RocmVhZGVkYC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGEgY29uZmlnIGZvciB0aHJlYWRlZCBOQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjE2LjMwNTA5NTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcwODk4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03MTYxPXN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcxOTgtXFxubmV0L2NvcmUvZGV2LmM6NzE5OTpzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cXHRcXHRcXHRcXHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIwOC1cXG5uZXQvY29yZS9kZXYuYzo3MjA5OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIxMC1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIzNC1cXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG5uZXQvY29yZS9kZXYuYzo3MjM1OlxcdFxcdG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYy03MjM2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzI2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFxcdTAwMjZkZXYtXFx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpXFxubmV0L2NvcmUvZGV2LmM6NzI2NTpcXHRcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03MjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzQ4Nj1zdGF0aWMgdm9pZCBuYXBpX3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MDUtXFxubmV0L2NvcmUvZGV2LmM6NzUwNjpcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZCkpO1xcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MzY5PW5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0zNzUtXFxubmV0L2NvcmUvZGV2Lmg6Mzc2OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sXFxubmV0L2NvcmUvZGV2LmgtMzc3LVxcdFxcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzNy1cXHRcXHR0aHJlYWRlZCA9IG5sYV9nZXRfdWludChpbmZvLVxcdTAwM2VhdHRyc1tORVRERVZfQV9OQVBJX1RIUkVBREVEXSk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMzg6XFx0XFx0cmV0ID0gbmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzM5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5PTM1PWRlZiBuYXBpX2xpc3RfY2hlY2sobmYpIC1cXHUwMDNlIE5vbmU6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6NTE6ZGVmIG5hcGlfc2V0X3RocmVhZGVkKG5mKSAtXFx1MDAzZSBOb25lOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHktNTItICAgIFxcXCJcXFwiXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weT0zNjk9ZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weS0zNzUtICAgICAgICAgICAgICBuYXBpX2xpc3RfY2hlY2ssXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weTozNzY6ICAgICAgICAgICAgICBuYXBpX3NldF90aHJlYWRlZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3Ny0gICAgICAgICAgICAgIGRldl9zZXRfdGhyZWFkZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjE4LjA3NTk5OTExNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxODU2NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBUaHJlYWRlZCBOQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBUaHJlYWRlZCBOQVBJIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGl0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIG5ldGxpbmsgKG5ldGRldi1nZW5sKS4gVGhlIGB0aHJlYWRfYmFja2xvZ19uYXBpYCBib290IHBhcmFtZXRlciBhbHNvIHNlZW1zIHRvIGtpY2sgdGhpbmdzIG9mZiB3aXRoIGB1c2VfYmFja2xvZ190aHJlYWRzKClgLiBObyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG5lZWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgLSBpdOKAmXMgY29yZSBuZXR3b3JraW5nLCByaWdodD9cblxuQWxyaWdodCwgbW92aW5nIG9uLCBpdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcsIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIG5ldyBob29rcy4gTGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMuIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCBydW5zIGFzIGEga3RocmVhZC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0J3MgKnN0YXRpYyo/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gRG9lcyBgbmFwaV9zZXRfdGhyZWFkZWRgIGdldCBleHBvcnRlZCBhbnl3aGVyZT8gR290dGEgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBvbiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNToyMi4yNjc4NTg4NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTc3ODQyMjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MjQuNDY1NjUzNjE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njg1NjQzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRpZl9zZXRfdGhyZWFkZWRgKipcblxuT2theSwgc28gdGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG5ldGlmX3NldF90aHJlYWRlZGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKldoeSogYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHdlJ3JlIGludmVzdGlnYXRpbmc/IE9yIHBlcmhhcHMgYSBuZXcgZmVhdHVyZSB0aGF0J3MgYmVpbmcgaW50ZWdyYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGluZm9ybSBob3cgZGVlcCBJIG5lZWQgdG8gZGlnLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBpdHMgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHNlbWFudGljcy4gV2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IEFyZSB0aGV5IHBlci1uZXRkZXYsIGdsb2JhbCwgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gQW55IHBvdGVudGlhbCBmb3IgbG9jayBjb250ZW50aW9uPyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHJhY2UgY29uZGl0aW9ucyBhdCB0aGlzIHBvaW50ISBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgdGhyZWFkLXNhZmUuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY29tbW9uIGdvdGNoYXMsIGxpa2UgcG90ZW50aWFsIGRlYWRsb2NrcywgbGl2ZWxvY2tzLCBvciBldmVuIHNpbXBsZSBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW9zLiBJIGtub3cgc29tZSBhcmNoaXRlY3R1cmVzIGhhdmUgc3BlY2lmaWMgbWVtb3J5IG9yZGVyaW5nIHJlcXVpcmVtZW50czsgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvZGUgaGFuZGxlcyB0aGVtIGNvcnJlY3RseSwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggcmVsYXhlZCBtZW1vcnkgbW9kZWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZCBhbmQgY2FuIHByb3ZpZGUgdGhyZWFkIHNhZmV0eS5cblxuVWx0aW1hdGVseSwgSSdtIGNoZWNraW5nIGlmIHRoaXMgY29kZSBpcyBzb2xpZCBhbmQgaWYgaXQncyBvcGVyYXRpbmcgc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjI4LjAzNDIyMTk4MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMDA4NDcxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmV0aWZfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MzAuMjU0MzEzOTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODM3NzI3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBOQVBJIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2UgTkFQSSBjb25maWd1cmF0aW9uLCBvciBhdCBsZWFzdCBhIHNldHRpbmcgdGhhdCBpbXBhY3RzIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldGxpbmsgaW50ZXJmYWNlIGNvZGUuIEkgc3VzcGVjdCB0aGUgZnVuY3Rpb24gSSdtIGFmdGVyLCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvbmUsIGlzIHByb2JhYmx5IG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBleHBvc2VzIE5BUEkgcmVsYXRlZCBzZXR0aW5ncywgYW5kIEkgYmVsaWV2ZSBuZXRsaW5rIGlzIHRoZSByb3V0ZSBpdCB0YWtlcywgc28gSSdsbCBzdGFydCBkaWdnaW5nIHRoZXJlLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjMzLjIzODA5MDAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTM1MzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMjc6bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMjgte1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zNjE9aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM3My1cXHRpZiAobmFwaSkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6Mzc0OlxcdFxcdGVyciA9IG5ldGRldl9ubF9uYXBpX3NldF9jb25maWcobmFwaSwgaW5mbyk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNzUtXFx0XFx0bmV0ZGV2X3VubG9jayhuYXBpLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTozNC44ODk0NDg0MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjYyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YC4gUmlnaHQgYXdheSwgdGhlIG5hbWUgc2NyZWFtcyBcIm5ldGxpbmsgaGFuZGxlcixcIiB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCBmb3Igc29tZXRoaW5nIGRlYWxpbmcgd2l0aCBOQVBJICh0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciBBUEkpIGFuZCBuZXRsaW5rLiBJdCdzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0J3MgZ29pbmcgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgd2hlbiB3ZSByZWNlaXZlIGEgc3BlY2lmaWMgbmV0bGluayBtZXNzYWdlIHJlbGF0ZWQgdG8gTkFQSSBjb25maWd1cmF0aW9uIG9yIG9wZXJhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyB0aGluZyBpcyBzdGF0aWMuIEluIGtlcm5lbCBjb2RlLCB0aGF0IGRldGFpbCBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBmb3Igc2NvcGUgYW5kIHBvdGVudGlhbCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgbW9kdWxlLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIGdpdmVzIG1lIGEgdmFsdWFibGUgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlOiBpcyBpdCBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG9yIG1heWJlIGV2ZW4gYW5vdGhlciBtb2R1bGU/IFRoYXQnbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXRsaW5rIGFuZCBOQVBJIGluZnJhc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUgaWYgaXQncyBnb3QgYSBgc3RhdGljYCBrZXl3b3JkIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTozOS4yMTIwODAxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzQwMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjI2LVxcdFxcdC5jbWRcXHRcXHQ9IE5FVERFVl9DTURfTkFQSV9TRVQsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6MjI3OlxcdFxcdC5kb2l0XFx0XFx0PSBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X25hcGlfc2V0X25sX3BvbGljeSxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oPTM3PWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oOjM4OmludCBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0zOS1pbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MzI3PW5ldGRldl9ubF9uYXBpX3NldF9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozNjE6aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo0MC44MDU0ODcyMzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NzY1NTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIE5BUEkgYW5kIE5ldHdvcmsgRHJpdmVyIEludGVyYWN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgZHJpdmVyIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIG1hcCB0aGVtIG91dCBpbiBteSBoZWFkLiBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQuIEl0J3MgKm5vdCogc3RhdGljLCBzbyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEkgdGhhdCBsZXRzIHVzZXJzcGFjZSBpbnRlcmFjdCB3aXRoIE5BUEkgKE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgUG9sbCkgZnJvbSBhIE5ldGxpbmsgY29udGV4dCwgcHJlc3VtYWJseSB0byBtYW5hZ2Ugb3IgY29uZmlndXJlIE5BUEkgc2V0dGluZ3MuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC5cblxuVGhlbiB0aGVyZSdzIHRoZSBjb3JlIHRyaWdnZXI6IE5BUEkgdGhyZWFkZWQgcG9sbGluZyBpcyAqZHJpdmVuKiBieSBpbmNvbWluZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQncyB0aGUgaGVhcnRiZWF0LCB0aGUgcmVhc29uIE5BUEkgZXhpc3RzLiBUcmFmZmljIGFycml2ZXMsIGFuZCBOQVBJJ3MgbWVjaGFuaXNtIGdldHMga2lja2VkIGludG8gYWN0aW9uLlxuXG5Ob3csIGxldCBtZSB0aGluayBhYm91dCBgbmFwaV9zY2hlZHVsZV9ycHNgLiBUaGF0J3Mgc3RhdGljLCBzbyBpdOKAmXMgY2xlYXJseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIFJQUyAtIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC0gaXMgYWxsIGFib3V0IGxvYWQgYmFsYW5jaW5nIGFjcm9zcyBDUFVzLiBUaGlzIGlzIGxpa2VseSB1c2VkIGJ5IE5BUEkgdG8gZGlyZWN0IGluY29taW5nIHBhY2tldHMgdG93YXJkcyBhIHBhcnRpY3VsYXIgQ1BVLCBwcmVzdW1hYmx5IGJhc2VkIG9uIGEgaGFzaC4gSSdkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoYXQncyBwbHVtYmVkIGluLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBzdWdnZXN0cyBpdCdzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBkcml2ZXIsIG9yIGNvcmUgTkFQSSBsb2dpYy5cblxuRmluYWxseSwgdGhlcmUncyBgX19uYXBpX3NjaGVkdWxlYC4gVGhhdOKAmXMgYW5vdGhlciBrZXkgZnVuY3Rpb24uIFRoZSBkb3VibGUgdW5kZXJzY29yZSBwcmVmaXggaXMgYSBjb252ZW50aW9uIHRoYXQgc3VnZ2VzdHMgdGhpcyBpcyBpbnRlbmRlZCBmb3IgKmludGVybmFsKiBkcml2ZXIgdXNlLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IHVzZXJzcGFjZS4gSXQncyBwcm9iYWJseSB0aGUgY29yZSBzY2hlZHVsaW5nIHByaW1pdGl2ZSwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqc2NoZWR1bGluZyogdGhlIE5BUEkgcG9sbCBpbiB0aGUgZmlyc3QgcGxhY2UsIGxpa2VseSBieSBhZGRpbmcgaXQgdG8gYSBydW5xdWV1ZSBvciBzaW1pbGFyLiBJJ2QgZ3Vlc3MgdGhhdCBgbmFwaV9zY2hlZHVsZV9ycHNgIGlzIGEgaGlnaGVyLWxldmVsIHdyYXBwZXIgdGhhdCBjYWxscyBgX19uYXBpX3NjaGVkdWxlYCBhZnRlciBwZXJoYXBzIGRvaW5nIHNvbWUgQ1BVIGFmZmluaXR5IGNhbGN1bGF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgb2YgYSBOQVBJIHBvbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NDUuMzUzMTQ1OTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMTAxNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmFwaV9zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3ODYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdD0xMjk9dG8gSVJRIGJlaW5nIGF1dG8tbWFza2VkIGJ5IHRoZSBkZXZpY2UpIHNob3VsZCB1c2UgdGhlIG5hcGlfc2NoZWR1bGVfcHJlcCgpXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzMDphbmQgX19uYXBpX3NjaGVkdWxlKCkgY2FsbHM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0LTEzMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzYtICAgICAgLyogc2NoZWR1bGUgYWZ0ZXIgbWFza2luZyB0byBhdm9pZCByYWNlcyAqL1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdDoxMzc6ICAgICAgX19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ2LVxcdTAwM2VuYXBpKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3QtMTM4LSAgfVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdD03Mz1uYXBpX2NvbXBsZXRlX2RvbmUoKSDkvJrph4rmlL7lrp7kvovnmoTmiYDmnInmnYPjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3QtMTAxLeaYvuW8j+Wxj+iUveS4reaWreeahOmpseWKqOeoi+W6j++8iOiAjOmdnuiuvuWkh+iHquWKqOWxj+iUvSBJUlHvvInlupTkvb/nlKggbmFwaV9zY2hlZHVsZV9wcmVwKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdDoxMDI6X19uYXBpX3NjaGVkdWxlKCkg6LCD55So77yaXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdC0xMDMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwOC0gICAgICAvKiDlnKjlsY/olL3lkI7osIPluqbku6Xpgb/lhY3nq57kuokgKi9cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0OjEwOTogICAgICBfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnYtXFx1MDAzZW5hcGkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3QtMTEwLSAgfVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jPTg0NjI9aXJxcmV0dXJuX3QgcmVjZWl2ZV9jb250ZXh0X2ludGVycnVwdF9uYXBpKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtODQ2OS1cXHRcXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChyY2QtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6ODQ3MDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHJjZC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTg0NzEtXFx0XFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYz0zOTg9c3RhdGljIGlycXJldHVybl90IHJjYXJfY2FuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2Nhbi5jLTQxOC1cXHRcXHRcXHR3cml0ZWIocHJpdi1cXHUwMDNlaWVyLCBcXHUwMDI2cHJpdi1cXHUwMDNlcmVncy1cXHUwMDNlaWVyKTtcXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2Nhbi5jOjQxOTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuLmMtNDIwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYz0xMjY3PXN0YXRpYyB2b2lkIHJjYXJfY2FuZmRfaGFuZGxlX2dsb2JhbF9yZWNlaXZlKHN0cnVjdCByY2FyX2NhbmZkX2dsb2JhbCAqZ3ByaXYsIHUzMiBjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYy0xMjgyLVxcdFxcdFxcdFxcdFxcdCAgICAgUkNBTkZEX1JGQ0NfUkZJRSk7XFxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW5mZC5jOjEyODM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmMtMTI4NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdmlydGlvX2Nhbi5jPTgzPXN0YXRpYyB2b2lkIHZpcnRxdWV1ZV9uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmMtODctXFx0XFx0dmlydHF1ZXVlX2Rpc2FibGVfY2IodnEpO1xcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmM6ODg6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmMtODktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM9MTc4MD10eXBob29uX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk1LVxcdFxcdHR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKGlvYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM6MTc5NjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk3LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGFwdGVjL3N0YXJmaXJlLmM9MTI5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkYXB0ZWMvc3RhcmZpcmUuYy0xMzE4LVxcdFxcdFxcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKFxcdTAwMjZucC1cXHUwMDNlbmFwaSkpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jOjEzMTk6XFx0XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZucC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jLTEzMjAtXFx0XFx0XFx0XFx0ZW5hYmxlID0gcmVhZGwoaW9hZGRyICsgSW50ckVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9NTA0PXN0YXRpYyBpcnFyZXR1cm5fdCBhbHRlcmFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy01MjUtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJ4ZG1hX2lycV9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6NTI2OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTUyNy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYz0xMDc3PXN0YXRpYyBpcnFyZXR1cm5fdCBhbWQ4MTExZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExMy1cXHRcXHRcXHQvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hbWQ4MTExZS5jOjExMTQ6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZscC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExNS1cXHRcXHR9IGVsc2UgaWYgKGludHJlbjAgXFx1MDAyNiBSSU5URU4wKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTI1NTc9cGNuZXQzMl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0yNjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MjYxMDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmxwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jLTI2MTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jPTM2Nz1zdGF0aWMgdm9pZCB4Z2JlX2lzcl9iaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNDM3LVxcdFxcdFxcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM6NDM4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTQzOS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz01Mzc9c3RhdGljIGlycXJldHVybl90IHhnYmVfZG1hX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTMtXFx0XFx0LyogVHVybiBvbiBwb2xsaW5nICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1NTQ6XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2Y2hhbm5lbC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz01NjY9c3RhdGljIHZvaWQgeGdiZV90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTg3LVxcdFxcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM6NTg4OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTU4OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWFpbi5jPTEyNz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdlX2lycShjb25zdCBpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzItXFx0XFx0eGdlX2ludHJfZGlzYWJsZShwZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYzoxMzM6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwZGF0YS1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jPTIxMz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdlbmVfZW5ldF9yeF9pcnEoY29uc3QgaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMTgtXFx0XFx0ZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jOjIxOTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnJ4X3JpbmctXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMjAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jPTM1ND1zdGF0aWMgaXJxcmV0dXJuX3QgYXJjX2VtYWNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tYWluLmMtMzY5LVxcdFxcdFxcdGFyY19yZWdfY2xyKHByaXYsIFJfRU5BQkxFLCBSWElOVF9NQVNLIHwgVFhJTlRfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jOjM3MDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21haW4uYy0zNzEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmM9MTYzMz1zdGF0aWMgdm9pZCBhdGwxY19pbnRyX3J4X3R4KHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLCB1MzIgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0NS1cXHRcXHRcXHRpbnRyX21hc2sgXFx1MDAyNj0gfmF0bDFjX3FyZWdzW2ldLnJ4X2lzcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYzoxNjQ2OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnJkX3JpbmdbaV0ubmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0Ny1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjUzLVxcdFxcdFxcdGludHJfbWFzayBcXHUwMDI2PSB+YXRsMWNfcXJlZ3NbaV0udHhfaXNyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jOjE2NTQ6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V0cGRfcmluZ1tpXS5uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjU1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jPTEyNzc9c3RhdGljIGlycXJldHVybl90IGF0bDFlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jLTEzNDYtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYzoxMzQ3OlxcdFxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxZS9hdGwxZV9tYWluLmMtMTM0OC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jPTgxPXN0YXRpYyB2b2lkIGJjbWFzcF9pbnRyMl9oYW5kbGluZyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTg1LVxcdFxcdFxcdGJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmM6ODY6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2aW50Zi1cXHUwMDNlcnhfbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYy04Ny1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTkyLVxcdFxcdFxcdGJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmM6OTM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2aW50Zi1cXHUwMDNldHhfbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYy05NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz04ODc9c3RhdGljIGlycXJldHVybl90IGI0NF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtOTE3LVxcdFxcdFxcdF9fYjQ0X2Rpc2FibGVfaW50cyhicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6OTE4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YnAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTkxOS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM9MTEwND1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtX3N5c3BvcnRfcnhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTI0LVxcdFxcdFxcdGludHJsMl8wX21hc2tfc2V0KHByaXYsIElOVFJMMl8wX1JETUFfTUJET05FKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTEyNTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTE0Ni1cXHRcXHRcXHRpbnRybDJfMF9tYXNrX3NldChwcml2LCByaW5nX2JpdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtc3lzcG9ydC5jOjExNDc6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ0eHItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTQ4LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYz0xMTU1PXN0YXRpYyBpcnFyZXR1cm5fdCBiY21fc3lzcG9ydF90eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtc3lzcG9ydC5jLTExNzgtXFx0XFx0XFx0aW50cmwyXzFfbWFza19zZXQocHJpdiwgQklUKHJpbmcpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTE3OTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZ0eHItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTgwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYz0zMzYyPWJueDJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzkzLVxcdFxcdGJuYXBpLVxcdTAwM2VsYXN0X3N0YXR1c19pZHggPSBzYmxrLVxcdTAwM2VzdGF0dXNfaWR4O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYzozMzk0OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2Ym5hcGktXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzk1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MzIxMj1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtZ2VuZXRfaXNyMShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyMzgtXFx0XFx0XFx0YmNtZ2VuZXRfcnhfcmluZ19pbnRfZGlzYWJsZShyeF9yaW5nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjMyMzk6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2cnhfcmluZy1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMjQwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzI1MS1cXHRcXHRcXHRiY21nZW5ldF90eF9yaW5nX2ludF9kaXNhYmxlKHR4X3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzI1MjpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZ0eF9yaW5nLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTMtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTE5NjM9c3RhdGljIGlycXJldHVybl90IHNibWFjX2ludHIoaW50IGlycSx2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5MC1cXHRcXHRcXHRfX3Jhd193cml0ZXEoMCwgc2MtXFx1MDAzZXNibV9pbXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoxOTkxOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2c2MtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0xOTkyLVxcdFxcdFxcdC8qIERlcGVuZCBvbiB0aGUgZXhpdCBmcm9tIHBvbGwgdG8gcmVlbmFibGUgaW50ciAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZC5jPTc0MT1ibmFkX25ldGlmX3J4X3NjaGVkdWxlX3BvbGwoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfY2NiICpjY2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ2LVxcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYzo3NDc6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYy03NDgtXFx0XFx0cnhfY3RybC1cXHUwMDNlcnhfc2NoZWR1bGUrKztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYi9zZ2UuYz0xNjUyPWlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jLTE2NjItXFx0XFx0XFx0aWYgKHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlcikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jOjE2NjM6XFx0XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2NC1cXHRcXHRcXHRlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmM9NDE4PXN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmMtNDMxLVxcdFxcdFxcdHdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmM6NDMyOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmMtNDMzLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MzE2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgYmVfaW50eChpbnQgaXJxLCB2b2lkICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTMxNzgtXFx0XFx0bnVtX2V2dHMgPSBldmVudHNfZ2V0KGVxbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzozMTc5OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXFvLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTMxODAtXFx0XFx0aWYgKG51bV9ldnRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTg3PXN0YXRpYyBpcnFyZXR1cm5fdCB0c25lcF9pcnEoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTEwNC1cXHRcXHRcXHQvKiBzY2hlZHVsZSBhZnRlciBtYXNraW5nIHRvIGF2b2lkIHJhY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjEwNTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXF1ZXVlWzBdLm5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMDYtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTExMj1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxX3R4cngoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTExOS1cXHRcXHQvKiBzY2hlZHVsZSBhZnRlciBtYXNraW5nIHRvIGF2b2lkIHJhY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjEyMDpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnF1ZXVlLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTIxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jPTIxOD1zdGF0aWMgaXJxcmV0dXJuX3QgbnBzX2VuZXRfaXJxX2hhbmRsZXIoczMyIGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMtMjI3LVxcdFxcdFxcdG5wc19lbmV0X3JlZ19zZXQocHJpdiwgTlBTX0VORVRfUkVHX0JVRl9JTlRfRU5BQkxFLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lemNoaXAvbnBzX2VuZXQuYzoyMjg6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lemNoaXAvbnBzX2VuZXQuYy0yMjktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MjQ4OT1mZWNfZW5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMjUwMC1cXHRcXHRcXHR3cml0ZWwoMCwgZmVwLVxcdTAwM2Vod3AgKyBGRUNfSU1BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjI1MDE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZmZXAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTI1MDItXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDgxNj1zdGF0aWMgaW50IGZlY19lbmV0X3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDgzMi1cXHRcXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2ZmVwLVxcdTAwM2VuYXBpKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDgzMzpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDgzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYz0zMDA9ZnNfZW5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMwLVxcdFxcdFxcdGlmIChuYXBpX29rKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jOjMzMTpcXHRcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjI1Nz1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9yZWNlaXZlKGludCBpcnEsIHZvaWQgKmdycF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3NS1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncnAtXFx1MDAzZWdycGxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIyNzY6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZncnAtXFx1MDAzZW5hcGlfcngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3Ny1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yMjg4PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX3RyYW5zbWl0KGludCBpcnEsIHZvaWQgKmdycF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI5OS1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncnAtXFx1MDAzZWdycGxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIzMDA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZncnAtXFx1MDAzZW5hcGlfdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjMwMS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzA0Mz1zdGF0aWMgaXJxcmV0dXJuX3QgdWNjX2dldGhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTMwNjctXFx0XFx0XFx0b3V0X2JlMzIodWNjZi1cXHUwMDNlcF91Y2NtLCB1Y2NtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozMDY4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2dWdldGgtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTMwNjktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTUwNj1oaXAwNF9tYWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy01NjMtXFx0XFx0XFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6NTY0OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTU2NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM9NjY2PXN0YXRpYyBpcnFyZXR1cm5fdCBoaXAwNF9tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy02OTQtXFx0XFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6Njk1OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTY5Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM9NzAxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB0eF9kb25lKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTcxMC1cXHRcXHR3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0sgXFx1MDAyNiB+UkNWX0lOVCwgcHJpdi1cXHUwMDNlYmFzZSArIFBQRV9JTlRFTik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjcxMTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy03MTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvbWFsLmM9MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtYWxfc2NoZWR1bGVfcG9sbChzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1hbC1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvbWFsLmM6MjY3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2bWFsLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjgtXFx0fSBlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE1NzA9c3RhdGljIGlycXJldHVybl90IGlibXZldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTU3OS1cXHRcXHRXQVJOX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE1ODA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE1ODEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYz00MzMyPXN0YXRpYyBpcnFyZXR1cm5fdCBpYm12bmljX2ludGVycnVwdF9yeChpbnQgaXJxLCB2b2lkICppbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmMtNDM0Ni1cXHRcXHRkaXNhYmxlX3NjcnFfaXJxKGFkYXB0ZXIsIHNjcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmM6NDM0NzpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGlbc2NycS1cXHUwMDNlc2NycV9udW1dKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdm5pYy5jLTQzNDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTIxOTM9c3RhdGljIGlycXJldHVybl90IGUxMDBfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNC1cXHRcXHRlMTAwX2Rpc2FibGVfaXJxKG5pYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjIyMTU6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZuaWMtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yMjE2LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYz0zNzQ2PXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmMtMzc3OC1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmM6Mzc3OTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYy0zNzgwLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTc2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2koaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxNy1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTgxODpcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTgyOT1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xODk2LVxcdFxcdGFkYXB0ZXItXFx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODk3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xODk4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xOTQ2PXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaXhfcngoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTk2NS1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTk2NjpcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTk2Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz04OTU9c3RhdGljIGlycXJldHVybl90IGlnYnZmX2ludHJfbXNpeF9yeChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTExLVxcdFxcdGFkYXB0ZXItXFx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jOjkxMjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3JpbmctXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTkxMy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM9MTk0PXN0YXRpYyB2b2lkIGxpYmV0aF94c2tfbmFwaV9zY2hlZCh2b2lkICppbmZvKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0xOTUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoxOTY6XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihpbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMTk3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYz0yMjM9dm9pZCBsaWJldGhfeHNrX3dha2V1cChjYWxsX3NpbmdsZV9kYXRhX3QgKmNzZCwgdTMyIHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoyMzc6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvam1lLmg9MzYzPXN0cnVjdCBqbWVfcmluZyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaC0zOTMtI2RlZmluZSBKTUVfUlhfU0NIRURVTEUocHJpdikgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oOjM5NDpcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oLTM5NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYz00NzA9c3RhdGljIGlycXJldHVybl90IHhyeDIwMF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB0cilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYy00NzUtXFx0XFx0bHRxX2RtYV9kaXNhYmxlX2lycShcXHUwMDI2Y2gtXFx1MDAzZWRtYSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX3hyeDIwMC5jOjQ3NjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmNoLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9MzQxNz1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnFfcngoaW50IGlycSwgdm9pZCAqX2V0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQyMy1cXHRcXHRtdGtfcnhfaXJxX2Rpc2FibGUoZXRoLCBldGgtXFx1MDAzZXNvYy1cXHUwMDNlcnguaXJxX2RvbmVfbWFzayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzozNDI0OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXRoLVxcdTAwM2VyeF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz0zNDMwPXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaGFuZGxlX2lycV90eChpbnQgaXJxLCB2b2lkICpfZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0zNDM2LVxcdFxcdG10a190eF9pcnFfZGlzYWJsZShldGgsIE1US19UWF9ET05FX0lOVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzozNDM3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXRoLVxcdTAwM2V0eF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MzgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTc2OT1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX3N0YXJfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTc4Ny1cXHRcXHRpZiAocngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjc4ODpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZXJ4X25hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy03ODktXFx0XFx0aWYgKHR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzo3OTA6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtNzkxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmM9MzA5PXN0YXRpYyBpcnFyZXR1cm5fdCBtb3hhcnRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jLTMyMS1cXHRcXHRcXHR3cml0ZWwocHJpdi1cXHUwMDNlcmVnX2ltciwgcHJpdi1cXHUwMDNlYmFzZSArIFJFR19JTlRFUlJVUFRfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbW94YS9tb3hhcnRfZXRoZXIuYzozMjI6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jLTMyMy1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYz0yMTgzPXN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmMtMjIxMC1cXHRcXHRuYXRzZW1pX2lycV9kaXNhYmxlKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmM6MjIxMTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEyLVxcdH0gZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTM2NjA9c3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEoaW50IGZvbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy0zNjgyLVxcdFxcdHdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6MzY4MzpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9MzY5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vcHRpbWl6ZWQoaW50IGZvbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy0zNzE1LVxcdFxcdHdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6MzcxNjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jPTk4Nj1zdGF0aWMgaXJxcmV0dXJuX3QgX19scGNfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jLTk5OS1cXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2cGxkYXQtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jOjEwMDA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwbGRhdC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy0xMDAxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYz0xMjU4PXN0YXRpYyBpcnFyZXR1cm5fdCBwY2hfZ2JlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29raS1zZW1pL3BjaF9nYmUvcGNoX2diZV9tYWluLmMtMTMxNy1cXHRcXHRcXHQvKiBTdGFydCBwb2xsaW5nIGZvciBOQVBJICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYzoxMzE4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYy0xMzE5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmM9MjE5OT1zdGF0aWMgaXJxcmV0dXJuX3QgcWwzeHh4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDUtXFx0XFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXFx1MDAyNnFkZXYtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jOjIyNDY6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZxZGV2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDctXFx0fSBlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYz0xMjU9c3RhdGljIGlycXJldHVybl90IGVtYWNfaXNyKGludCBfaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLmMtMTU0LVxcdFxcdFxcdGlycS1cXHUwMDNlbWFzayBcXHUwMDI2PSB+cnhfcS1cXHUwMDNlaW50cjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYzoxNTU6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZyeF9xLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYy0xNTYtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM9NjQ3PXN0YXRpYyBpcnFyZXR1cm5fdCByNjA0MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjc5LVxcdFxcdFxcdG1pc3IgXFx1MDAyNj0gfihSWF9JTlRTIHwgVFhfSU5UUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM6NjgwOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNmxwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYy02ODEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz01Njg9c3RhdGljIGlycXJldHVybl90IGNwX2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYy02MDUtXFx0XFx0XFx0Y3B3MTZfZihJbnRyTWFzaywgY3Bfbm9yeF9pbnRyX21hc2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6NjA2OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2Y3AtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIxMzk9c3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgwLVxcdFxcdFxcdFJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIxODE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMjE4Mi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xMDMzPXN0YXRpYyBpcnFyZXR1cm5fdCBydGFzZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0Ni1cXHRpZiAobmFwaV9zY2hlZHVsZV9wcmVwKFxcdTAwMjZpdmVjLVxcdTAwM2VuYXBpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoxMDQ3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2aXZlYy1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwNTU9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX3FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEwNjgtXFx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2aXZlYy1cXHUwMDNlbmFwaSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA2OTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNml2ZWMtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEwNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jPTEyMDI9c3RhdGljIGJvb2wgcmF2Yl9xdWV1ZV9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xMjIwLVxcdFxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjEyMjE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpW3FdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTEyMjItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM9OTYxPXN0YXRpYyB2b2lkIHJzd2l0Y2hfcXVldWVfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NjktXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJkZXYtXFx1MDAzZXByaXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM6OTcwOlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cmRldi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NzEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9NDgzPXN0YXRpYyBpcnFyZXR1cm5fdCBydHNuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYy00OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM6NDk5OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNTAwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTgzOD1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4NzMtXFx0XFx0XFx0XFx0ICAgICBFRVNJUFIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM6MTg3NDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm1kcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0xODc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xNjY5PXN0YXRpYyBpcnFyZXR1cm5fdCBzeGdiZV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4MC1cXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VkaXNhYmxlX2RtYV9pcnEocHJpdi1cXHUwMDNlaW9hZGRyLCByeHEtXFx1MDAzZXF1ZXVlX25vKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYzoxNjgxOlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYz0xMDY3PXN0YXRpYyBpcnFyZXR1cm5fdCBlcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYy0xMDkyLVxcdFxcdFxcdGVwaWNfbmFwaV9pcnFfb2ZmKGRldiwgZXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvZXBpYzEwMC5jOjEwOTM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM9MTUzMD1zdGF0aWMgaXJxcmV0dXJuX3Qgc21zYzkxMXhfaXJxaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTU4MC1cXHRcXHRcXHQvKiBTY2hlZHVsZSBhIE5BUEkgcG9sbCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYzoxNTgxOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cGRhdGEtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYy0xNTgyLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM9MTQzNz1zdGF0aWMgaXJxcmV0dXJuX3QgZW1hY19pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTQ3NC1cXHRcXHRcXHRlbWFjX2Rpc2FibGVfaW50ZXJydXB0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYzoxNDc1OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYy0xNDc2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzA2Nz1zdGF0aWMgaW50IHN0bW1hY19uYXBpX2NoZWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGNoYW4sIHUzMiBkaXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMwODUtXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y2gtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NDYuOTc0MjUxOTA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA2ODAzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBFeHBvcnRlZCBTeW1ib2xzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBzb21ldGhpbmcgdGhhdCB0cmlnZ2VyZWQgYSBmbGFnLiBJIHRob3VnaHQgYF9fbmFwaV9zY2hlZHVsZWAgd2FzIGludGVybmFsLCBidXQgbm93IEknbSBzZWVpbmcgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYG5hcGlfc2NoZWR1bGVgIGl0c2VsZiBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGtleSBub3cuIEdvdHRhIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIG9yIHJlYXNzZXNzIHRoZSBzaXR1YXRpb24uIFRoaXMgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIE4tQVBJLiBUaGlzIGlzIGxpa2VseSBhbiBvdmVyc2lnaHQgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjUwLjE4NDkzNTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxNTI1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5hcGlfc2NoZWR1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTY3MjQ9dm9pZCBfX25hcGlfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjczMS19XFxubmV0L2NvcmUvZGV2LmM6NjczMjpFWFBPUlRfU1lNQk9MKF9fbmFwaV9zY2hlZHVsZSk7XFxubmV0L2NvcmUvZGV2LmMtNjczMy1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY3NDM9Ym9vbCBuYXBpX3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjc2My19XFxubmV0L2NvcmUvZGV2LmM6Njc2NDpFWFBPUlRfU1lNQk9MKG5hcGlfc2NoZWR1bGVfcHJlcCk7XFxubmV0L2NvcmUvZGV2LmMtNjc2NS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY3NzY9dm9pZCBfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTY3ODItfVxcbm5ldC9jb3JlL2Rldi5jOjY3ODM6RVhQT1JUX1NZTUJPTChfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKTtcXG5uZXQvY29yZS9kZXYuYy02Nzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo1Mi4zNTY0NzEyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTg3NDY5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5BUEkgVGhyZWFkaW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgaW5zdHJ1bWVudCB0aGUgdGhyZWFkZWQgTkFQSSBsb29wIHdpdGggbXkgdG9vbHMuIEkgc2VlIHRoYXQgYF9fbmFwaV9zY2hlZHVsZWAgaXMgZXhwb3J0ZWQsIGJ1dCB0aGF0J3MgcmVhbGx5IGp1c3QgdGhlICpzdGFydGluZyogcG9pbnQ7IHRoZSBsb29wIGl0c2VsZiBpcyBkcml2ZW4gYnkgbmV0d29yayB0cmFmZmljLCBzbyB0aGF0J3Mgbm90IHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIG1hbmlwdWxhdGUuIE15IGdvYWwgaXMgdG8gZ2V0ICp0aHJlYWRlZCogTkFQSSBnb2luZy5cblxuSG1tLCBsZXQncyBzZWUuIElmIEkgd2FudCB0byBkaXJlY3RseSBjb250cm9sIHRoZSB0aHJlYWRlZCBsb29wLCBgbmFwaV90aHJlYWRlZF9wb2xsYCBsb29rcyBwcm9taXNpbmcuIFRoYXQncyAqdGhlKiBmdW5jdGlvbiBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgdGhlIHRocmVhZGVkIHBhcnQsIG9yIHBvdGVudGlhbGx5IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAg4oCTIHRoYXQgb25lIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciAqZW5hYmxpbmcqIHRocmVhZGVkIE5BUEkuIE9oLCB3YWl0LCBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyBzdGF0aWMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIHN5emthbGxlcjsgSSBuZWVkIHNvbWV0aGluZyBjYWxsYWJsZS4gSXMgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhIHN1aXRhYmxlIGZvY3VzIHBvaW50LCB0aGVuPyBZZXMsIGFic29sdXRlbHkhIFRoYXQncyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gaXQgaXMgaG93IHN5emthbGxlciBjYW4gZW5hYmxlIHRocmVhZGVkIE5BUEkuXG5cbkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgZWFybHkgc2V0dXAgcGFyYW1zLiBUaGVyZSdzIGBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkc2AsIGJ1dCBJIGNhbiBkZWFsIHdpdGggdGhhdCBsYXRlci5cblxuTGV0J3MgbWFrZSBzdXJlIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgYWNjZXNzaWJsZS4gR29vZCwgaXQncyBhIG5ldGxpbmsgaGFuZGxlcjsgdGhhdCdzIHJlYWNoYWJsZS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gZm9jdXMgb24gYG5hcGlfdGhyZWFkZWRfcG9sbGA/IFllcywgaXQncyB0aGUga3RocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4gYXQgbGVhc3QgcmVhY2ggaXQuIFRob3VnaCwgc2luY2UgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLCBzeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIGZvY3VzaW5nICpkaXJlY3RseSogb24gaXQuIEl0J3MgYmV0dGVyIGlmIEkgcHJvdmlkZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdG8gdGFyZ2V0LlxuXG5Ib2xkIG9uLCBidXQgd2FpdC4uLiBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCdzIGp1c3QgKmJldHRlciogdG8gZ2l2ZSBpdCBhIG5vbi1zdGF0aWMgb25lLiBPa2F5LCBsZXQncyBzZWUgaWYgYG5hcGlfc2V0X3RocmVhZGVkYCBpcyBub24tc3RhdGljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NTguOTQzOTQzNTg5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX3NldF90aHJlYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03MTYxPXN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcxOTgtXFxubmV0L2NvcmUvZGV2LmM6NzE5OTpzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cXHRcXHRcXHRcXHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIwOC1cXG5uZXQvY29yZS9kZXYuYzo3MjA5OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIxMC1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIzNC1cXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG5uZXQvY29yZS9kZXYuYzo3MjM1OlxcdFxcdG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYy03MjM2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzI2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFxcdTAwMjZkZXYtXFx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpXFxubmV0L2NvcmUvZGV2LmM6NzI2NTpcXHRcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03MjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzQ4Nj1zdGF0aWMgdm9pZCBuYXBpX3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MDUtXFxubmV0L2NvcmUvZGV2LmM6NzUwNjpcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZCkpO1xcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo1OC45ODk4MjQxMDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1NDkyMjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlOiBJIHNlZSB0aGF0IGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBhbmQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBhZGQgdGhvc2UsIGFsb25nIHdpdGggYF9fbmFwaV9zY2hlZHVsZWAgYW5kIGBfX25hcGlfc2NoZWR1bGVfaXJxb2ZmYCDigJMgdGhleSBzZWVtIHJlbGV2YW50IGFzIHdlbGwuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2VsaW5lLCBvZiBjb3Vyc2UsIGJ1dCBhbnl0aGluZyBlbHNlPyBOb3BlLCBub3RoaW5nIHN0YW5kcyBvdXQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGlzIGRvd246IFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIGxvb3AsIHdoZXJlIHRoZSBzY2hlZHVsaW5nIGlzIG1vZGlmaWVkIGJ5IGZvcmNpbmcgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwgb24gKmV2ZXJ5KiBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgQ1BVIHRpbWUuXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKlJlYXNvbmluZzoqKiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgTkFQSSB0aHJlYWQgQ1BVIHlpZWxkaW5nIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBfX25hcGlfc2NoZWR1bGVgLCBgX19uYXBpX3NjaGVkdWxlX2lycW9mZmBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFxbIF0gKGkuZS4gbm90aGluZyBzcGVjaWFsKVxuXG5Ib2xkIG9uIGEgc2VjLi4uIGBuYXBpX3NldF90aHJlYWRlZGAgaXNuJ3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0J3Mgbm9uLXN0YXRpYy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBub3QgYSBwcm9ibGVtLiAqSG1tLCogYXQgbGVhc3QgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBpcyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBuZXRpZl9zZXRfdGhyZWFkZWRgIGlzIGV4cG9ydGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA0LjQ0NDc1MDUxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NDE1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTY6MDQuNDkxMzAwMjI5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ0Nzk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIFZpc2liaWxpdHkgb2YgTi1BUEkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBGb2N1c1N5bWJvbHMgaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkLCBidXQgYWxzbyBpc24ndCBzdGF0aWMsIGRvZXNuJ3QgcHJlc2VudCBhIHByb2JsZW0uIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIE4tQVBJIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgbm9uLXN0YXRpYy4gTm9wZSwgaXQncyBzdGF0aWMuIE9rYXksIG9uZSBjaGVjayBkb25lLiBOb3csIGxldCdzIGxvb2sgYXQgYHJ1bl9iYWNrbG9nX25hcGlgLiBBbHJpZ2h0LCB0aGF0IG9uZSBpcyBhbHNvIHN0YXRpYy4gUmlnaHQsIGxldCdzIGRvdWJsZSBjaGVjayBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGFuZCBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSB3ZWlyZG5lc3MgSSd2ZSBvdmVybG9va2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA3Ljc2NTc4MjYzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MzMwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9ubF9uYXBpX3NldF9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM2MC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA3Ljk5MTExOTYyNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg2MTc3ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHNpdHVhdGlvbiBjbGVhcmx5IGlzbid0IHN0YXRpYy4gSXQncyBkeW5hbWljLCBjaGFuZ2luZywgb3IgYXQgbGVhc3QgY2FwYWJsZSBvZiBjaGFuZ2UuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGUga2V5IGhlcmUgaXMgdG8gZW1icmFjZSB0aGUgbm9uLXN0YXRpYyBlbGVtZW50LiBUaGlzIHJlcXVpcmVzIGEgc2hpZnQgaW4gbXkgdGhpbmtpbmcsIGFuZCBhcHByb2FjaC4gTm93IHRoYXQgSSBrbm93IHRoaXMsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cy4gSSB3aWxsIGRpY3RhdGUgd2hhdCB0aGUgb3V0Y29tZSBtdXN0IGJlLiBUaGUgb3V0Y29tZSBjYW5ub3QgYmUgc2V0LCBvciBsZWZ0IHRvIGNoYW5jZSwgb3IgcmFuZG9tbmVzcy5cblxuWW91ciBTdW1tYXJ5OlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg3NywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44NzczMDExWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTY6MTAuODc3MzM0NTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODU3NjU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44Nzc3OTk2N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTg1Mjk2MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03ODc2LDExICs3ODc2LDE0IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRncm9fZmx1c2hfbm9ybWFsKFx1MDAyNm5hcGktXHUwMDNlZ3JvLCBIWiBcdTAwM2U9IDEwMDApO1xuIFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbi1cdFx0LyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi9cbi1cdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykge1xuK1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4rXG4rXHRcdC8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczpcbitcdFx0ICogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyBhIHRocmVhZFxuK1x0XHQgKiB0aGF0IGtlZXBzIGZpbmRpbmcgd29yayB3b3VsZCBuZXZlciBnaXZlIHVwIHRoZSBDUFUuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44Nzc4MDAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODUyNzMwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5BUEkgVGhyZWFkaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2Rldi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgLiBJdCdzIG5vdyB1bmNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQ/IFRoaXMgaXMgYSBDUFUgaG9nIGZpeCwgcGxhaW4gYW5kIHNpbXBsZS4gV2UncmUgcHJldmVudGluZyBhIHRocmVhZCBmcm9tIG1vbm9wb2xpemluZyB0aGUgQ1BVIHdoZW4gaXQncyBjb25zdGFudGx5IGZpbmRpbmcgd29yaywgZXZlbiB3aGVuIGBuYXBpX3RocmVhZF93YWl0KClgIGRlY2lkZXMgbm90IHRvIHNjaGVkdWxlIHJpZ2h0IGF3YXkuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGUgdGhyZWFkIHlpZWxkcyBiYWNrIHRvIHRoZSBzY2hlZHVsZXIuXG5cbknigJltIHBsZWFzZWQgdG8gc2VlIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIFRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZWl0aGVyLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgS01TQU4gaXMgY29tcGxldGVseSBpcnJlbGV2YW50IGhlcmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aHJlYWQgc2NoZWR1bGluZywgYW5kIHdlJ2xsIGNhdGNoIGFueSBwcm9ibGVtcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogS0FTQU4sIExPQ0tERVAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHdhdGNoZG9nLiBUaGUgd2F0Y2hkb2cgaXMgdGhlIHJlYWwgaGVybyBoZXJlLCBzaW5jZSBpdCBjYW4gZmxhZyB0aGUgQ1BVIGhvZ2dpbmcgYmVoYXZpb3IuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgTkFQSSB0aHJlYWQgZ3JhY2VmdWxseSB5aWVsZHMgdGhlIENQVSBhZnRlciBlYWNoIGxvb3AgaXRlcmF0aW9uLCBldmVuIGlmIGl0IGltbWVkaWF0ZWx5IGZpbmRzIG1vcmUgd29yay4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IGNvbnRpbnVvdXMgZXhlY3V0aW9uIHdpdGhvdXQgeWllbGRpbmcgaXMgYSByZWNpcGUgZm9yIHdhdGNoZG9nIHRpbWVvdXRzIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxOS4wNjMwNzcwNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBvbGxpbmcgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGxgIG9yIGBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBwcmV2ZW50cyB0aGUgTkFQSSB0aHJlYWQgZnJvbSBob2dnaW5nIHRoZSBDUFUgYW5kIHRyaWdnZXJpbmcgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBpdCBjb250aW51b3VzbHkgZmluZHMgd29yayBidXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuIFRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIHRocmVhZCBzY2hlZHVsaW5nIGFuZCBDUFUgeWllbGRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgQ1BVIHN0YWxscyBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgd2F0Y2hkb2dzIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIHByZXZlbnRzIHRoZSBOQVBJIHRocmVhZCBmcm9tIGhvZ2dpbmcgdGhlIENQVSBhbmQgdHJpZ2dlcmluZyB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGl0IGNvbnRpbnVvdXNseSBmaW5kcyB3b3JrIGJ1dCBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy4gVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgdGhyZWFkIHNjaGVkdWxpbmcgYW5kIENQVSB5aWVsZGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBDUFUgc3RhbGxzIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB3YXRjaGRvZ3Mgb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 20:12:56 +0000 UTC FinishedAt: 2026-08-14 21:16:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "series_id": "487214de-81d2-4e88-b406-d47e0cbd81fa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_nl_napi_set_doit", "napi_set_threaded", "netif_set_threaded", "__napi_schedule", "__napi_schedule_irqoff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtfX25hcGlfc2NoZWR1bGVfaXJxb2ZmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIHByZXZlbnRzIHRoZSBOQVBJIHRocmVhZCBmcm9tIGhvZ2dpbmcgdGhlIENQVSBhbmQgdHJpZ2dlcmluZyB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGl0IGNvbnRpbnVvdXNseSBmaW5kcyB3b3JrIGJ1dCBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy4gVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgdGhyZWFkIHNjaGVkdWxpbmcgYW5kIENQVSB5aWVsZGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBDUFUgc3RhbGxzIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB3YXRjaGRvZ3Mgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBlY2U2NzAwNTM2ZDliLi44ODRhYTJkY2FkYmVjIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzg3NiwxMSAmIzQzOzc4NzYsMTQgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4mIzQzO1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxuJiM0MztcdFx0ICogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyBhIHRocmVhZFxuJiM0MztcdFx0ICogdGhhdCBrZWVwcyBmaW5kaW5nIHdvcmsgd291bGQgbmV2ZXIgZ2l2ZSB1cCB0aGUgQ1BVLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7bmV0aWZfc2V0X3RocmVhZGVkJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICAgJiMzNDtfX25hcGlfc2NoZWR1bGVfaXJxb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbG9vcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBiZWhhdmlvciBieSB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTkFQSSB0aHJlYWRzIHlpZWxkIHRoZSBDUFUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODY1OGM1NzJmMTg5OTU5MjU5YWZhNTZhNDkyZTIzZTc3ZWZlOGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03ODc2LDExICYjNDM7Nzg3NiwxNCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczoKJiM0MzsJCSAqIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28gYSB0aHJlYWQKJiM0MzsJCSAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJaWYgKCFyZXBvbGwpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5BUEkgVGhyZWFkZWQgUG9sbGluZyBMb29wIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtb3ZpbmcgYGNvbmRfcmVzY2hlZCgpYCBvdXRzaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2sgdGllZCB0byBgcmVwb2xsYCBhbmQgYGJ1c3lfcG9sbF9sYXN0X3FzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgbG9va3MgbGlrZSB0aGUgaW50ZW50IGlzIHRvIGhhdmUgaXQgZXhlY3V0ZSBvbiAqZXZlcnkqIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgb3Igd2hlbiBleGl0aW5nIHRoZSBsb29wLCByYXRoZXIgdGhhbiBqdXN0IGNvbmRpdGlvbmFsbHkuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBwYXJ0LCBvcGVyYXRlcy4gSXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IE5BUEkgdGhyZWFkcyBhcmUgc2NoZWR1bGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIENQVSB1dGlsaXphdGlvbiBhbmQgbGF0ZW5jeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IHdpdGhpbiB0aGUgZGV2aWNlIGRyaXZlciBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSBpcyBleHBlY3RlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpZiBhdCBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz03ODE3PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzg0MC1cbm5ldC9jb3JlL2Rldi5jOjc4NDE6c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzg0Mi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcbi0tXG5uZXQvY29yZS9kZXYuYz03ODk2PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzkxNi1cbm5ldC9jb3JlL2Rldi5jOjc5MTc6XHRcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKG5hcGksIHdhbnRfYnVzeV9wb2xsID8gXHUwMDI2bGFzdF9xcyA6IE5VTEwpO1xubmV0L2NvcmUvZGV2LmMtNzkxOC1cdH1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMzIxNT1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyMTgtXG5uZXQvY29yZS9kZXYuYzoxMzIxOTpcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFx1MDAyNnNkLVx1MDAzZWJhY2tsb2csIE5VTEwpO1xubmV0L2NvcmUvZGV2LmMtMTMyMjAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIFNjaGVkdWxpbmcgQ2hhbmdlOiBBIFN0cmF0ZWdpYyBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgbmFwaV90aHJlYWRlZF9wb2xsYCBhbmQgYHJ1bl9iYWNrbG9nX25hcGlgLiBJdCYjMzk7cyBhIGtleSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBpbW1lZGlhdGVseSBteSBleHBlcnQgaW5zdGluY3Qga2lja3MgaW46IGlzIHRoaXMgd29ydGggZnV6emluZz8KClNjaGVkdWxpbmcgY2hhbmdlcyBhcmUgKm5vdG9yaW91cyogdG8gZnV6ei4gVGhleSYjMzk7cmUgaGFyZCB0byB0cmlnZ2VyIGluIGEgbWVhbmluZ2Z1bCB3YXkuIEhvd2V2ZXIsIHRoaXMgaXMgdGllZCB0byBOQVBJIHBvbGxpbmcsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgdHJhZmZpYy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gVGhlIHZlcnkgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyBvbiBOQVBJIGlzIGVudGljaW5nIGJlY2F1c2UgTkFQSSBpcyB0aGUgbmV0d29ya2luZyBrZXJuZWwgQVBJLgoKVGhlbiBJIHBhdXNlZC4gV2FpdC4uLiBgY29uZF9yZXNjaGVkKClgIGlzIGEgKmNvcmUqIGtlcm5lbCBmdW5jdGlvbi4gVGhhdCBjaGFuZ2VzIHRoaW5ncy4gRXZlbiB0aG91Z2ggdGhlIHBhdGNoIGlzIHNtYWxsLCBpdCYjMzk7cyBmaXhpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBhIHdhdGNoZG9nIHdhcm5pbmcgb3IgQ1BVIGhvZ2dpbmcgaXNzdWUuIFRoYXQmIzM5O3MgYSBiaWcgZGVhbC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byB0cmlnZ2VyIGEgZGVuaWFsIG9mIHNlcnZpY2UgYXQgdGhlIHZlcnkgbGVhc3QuCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCB0aGluZyBJJiMzOTttIGFza2luZyBteXNlbGYgaXMsIHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGZvY3VzIG9uPyBgbmFwaV90aHJlYWRlZF9wb2xsYCBvciBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIChzaW5jZSBpdCYjMzk7cyBgc3RhdGljYCk/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyBhbHNvIGBzdGF0aWNgLiBZZXAsIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIGFsc28gYHN0YXRpY2AuIFdhaXQgYSBzZWNvbmQsIGFuZCBgcnVuX2JhY2tsb2dfbmFwaWAgaXMgYWxzbyBzdGF0aWM/CgpPa2F5LCB0aW1lIHRvIGNoZWNrIHdoZXJlIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHVzZWQuIFRoaXMgaXMgc3RhcnRpbmcgdG8gbG9vayBwcm9taXNpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xubmV0L2NvcmUvZGV2LmMtMTY0NS1cbm5ldC9jb3JlL2Rldi5jOjE2NDY6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxubmV0L2NvcmUvZGV2LmM9MTY0OD1zdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2NTUtXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjE2NTY6XHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXCYjMzQ7bmFwaS8lcy0lZFwmIzM0Oyxcbm5ldC9jb3JlL2Rldi5jLTE2NTctXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUyOTI9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTMwNS1cbm5ldC9jb3JlL2Rldi5jOjUzMDY6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcbm5ldC9jb3JlL2Rldi5jLTUzMDctXHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG5uZXQvY29yZS9kZXYuYy01MzA4LVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzMDk6XHRcdGlmICghbXlzZC1cdTAwM2Vpbl9uZXRfcnhfYWN0aW9uIFx1MDAyNlx1MDAyNiAhbXlzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwpXG5uZXQvY29yZS9kZXYuYy01MzEwLVx0XHRcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4MTc9c3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9kZXYuYy03ODQwLVxubmV0L2NvcmUvZGV2LmM6Nzg0MTpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODQyLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc4NTUtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3ODU2Olx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzg1Ny1cbi0tXG5uZXQvY29yZS9kZXYuYy03ODYxLVxubmV0L2NvcmUvZGV2LmM6Nzg2MjpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03ODYzLVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzg5NS1cbm5ldC9jb3JlL2Rldi5jOjc4OTY6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc4OTcte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MTYtXG5uZXQvY29yZS9kZXYuYzo3OTE3Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyMTU9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjE4LVxubmV0L2NvcmUvZGV2LmM6MTMyMTk6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzMjIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjA4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxgIEtlcm5lbCBUaHJlYWQqKgoKQWxyaWdodCwgc28gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgZGVmaW5pdGVseSBhIGt0aHJlYWQgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY2xlYXIgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUgYSBiaXQgYmV0dGVyLiBUaGUgY2x1ZSBpcyB0aGF0IGBuYXBpX2t0aHJlYWRfY3JlYXRlYCBpcyByZXNwb25zaWJsZSBmb3IgaXRzIGNyZWF0aW9uLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3cgSSB3YW50IHRvIHNlZSAqd2hlcmUqIHRoaXMgYG5hcGlfa3RocmVhZF9jcmVhdGVgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGludm9rZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIHRocmVhZGVkIHBvbGxpbmcgbWVjaGFuaXNtIGlzIHNldCB1cCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfa3RocmVhZF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xNjQ2PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpO1xubmV0L2NvcmUvZGV2LmMtMTY0Ny1cbm5ldC9jb3JlL2Rldi5jOjE2NDg6c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbm5ldC9jb3JlL2Rldi5jLTE2NDkte1xuLS1cbm5ldC9jb3JlL2Rldi5jPTcyMDk9aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5uZXQvY29yZS9kZXYuYy03MjEzLVx0XHRpZiAoIW5hcGktXHUwMDNldGhyZWFkKSB7XG5uZXQvY29yZS9kZXYuYzo3MjE0Olx0XHRcdGludCBlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xubmV0L2NvcmUvZGV2LmMtNzIxNS1cbi0tXG5uZXQvY29yZS9kZXYuYz03MjQxPWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03MjUxLVx0XHRcdGlmICghbmFwaS1cdTAwM2V0aHJlYWQpIHtcbm5ldC9jb3JlL2Rldi5jOjcyNTI6XHRcdFx0XHRlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xubmV0L2NvcmUvZGV2LmMtNzI1My1cdFx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc2MDMtXHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXG5uZXQvY29yZS9kZXYuYzo3NjA0Olx0XHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcbm5ldC9jb3JlL2Rldi5jLTc2MDUtXHRcdFx0ZGV2LVx1MDAzZXRocmVhZGVkID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRocmVhZGVkIE5BUEkuLi4gdGhhdCYjMzk7cyBhIGtleSBmZWF0dXJlLCByaWdodD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgY3VycmVudCBzdGF0ZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogaXMgdGhpcyB0aGluZyBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgY2hlY2tpbmcgdGhpcyBjb25maWcgaXMgd2l0aCBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IHNldHVwLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBjaGVjay4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03NjAyLVx0ICovXG5uZXQvY29yZS9kZXYuYzo3NjAzOlx0aWYgKG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhkZXYsIG5hcGkpKVxubmV0L2NvcmUvZGV2LmMtNzYwNC1cdFx0aWYgKG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKlRyYWNpbmcgRG93biBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgIGlzIGFjdHVhbGx5IGRlZmluZWQuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiYjMzk7dCByZWFsbHkgZG8gYW55dGhpbmcgcHJvZHVjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIGZvciB0aGUgTm9kZS5qcyBhZGQtb24gQVBJIChOLUFQSSkuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgTi1BUEkgbGlicmFyeSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIHZlcmlmeS4gVGhpcyB3aWxsIGxpa2VseSBpbnZvbHZlIG5hdmlnYXRpbmcgdGhlIE5vZGUuanMgc291cmNlIHRyZWUgb3IgcG9zc2libHkgYSBkZWRpY2F0ZWQgTi1BUEkgaGVhZGVyIGZpbGUuIExldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTc2MDItXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjc2MDM6XHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXG5uZXQvY29yZS9kZXYuYy03NjA0LVx0XHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcbi0tXG5uZXQvY29yZS9kZXYuaD0zNjg9c3RhdGljIGlubGluZSBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkXG5uZXQvY29yZS9kZXYuaDozNjk6bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbm5ldC9jb3JlL2Rldi5oLTM3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCBhbmQsIGZyYW5rbHksIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IG9uIGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGNvcmUuIFNwZWNpZmljYWxseSwgSSBrbm93IGl0IGlzIGEgZnVuY3Rpb24sIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBnZXQgdGhlIHRocmVhZGVkIGNvbmZpZ3VyYXRpb24uIEdpdmVuIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGRlZmluaXRpb24gd2lsbCBiZSBpbiBgbmV0L2NvcmUvZGV2LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZS4gSSB3aWxsIGhhdmUgdG8gbG9vayB0byBnZXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjg6XHRzdGF0aWMgaW5saW5lIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWRcbiAzNjk6XHRuYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuIDM3MDpcdHtcbiAzNzE6XHRcdGlmIChuLVx1MDAzZWNvbmZpZylcbiAzNzI6XHRcdFx0cmV0dXJuIG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZGVkO1xuIDM3MzpcdFx0cmV0dXJuIGRldi1cdTAwM2V0aHJlYWRlZDtcbiAzNzQ6XHR9XG4gMzc1Olx0XG4gMzc2Olx0aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbixcbiAzNzc6XHRcdFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHRocmVhZGVkIE5BUEksIHRoYXQmIzM5O3MgY29udHJvbGxhYmxlIHZpYSBzeXNmcywgZ29vZCB0byBrbm93LiYjMzQ7IEJ1dCB0aGVuIEkgc2VlIHNvbWV0aGluZyB0aGF0IHRyaWdnZXJzIGEgZGVlcGVyIGRpdmUuIGBydW5fYmFja2xvZ19uYXBpYCDigJMgdGhhdCByaW5ncyBhIGJlbGwhIEl0IGFsc28gY2FsbHMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluay4gTm93IHRoYXQgdGhlIGBydW5fYmFja2xvZ19uYXBpYCBmdW5jdGlvbiBpcyBwcmVzZW50LCB0aGUga2V5IHF1ZXN0aW9ucyBzdGFydCBmb3JtaW5nOiBJcyBgcnVuX2JhY2tsb2dfbmFwaWAgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0/IElzIHRoZXJlIGEgcmVhc29uIGl0IGlzIHRoZXJlPyBMZXQgbWUgZGlnIGludG8gdGhhdCBgcnVuX2JhY2tsb2dfbmFwaWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNhbGwgZmxvdyBiZXR0ZXIgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEzMjA3PXN0YXRpYyBpbnQgYmFja2xvZ19uYXBpX3Nob3VsZF9ydW4odW5zaWduZWQgaW50IGNwdSlcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzIxNC1cbm5ldC9jb3JlL2Rldi5jOjEzMjE1OnN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcbm5ldC9jb3JlL2Rldi5jLTEzMjE2LXtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzIzMT1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyMzMtXHQudGhyZWFkX3Nob3VsZF9ydW5cdD0gYmFja2xvZ19uYXBpX3Nob3VsZF9ydW4sXG5uZXQvY29yZS9kZXYuYzoxMzIzNDpcdC50aHJlYWRfZm5cdFx0PSBydW5fYmFja2xvZ19uYXBpLFxubmV0L2NvcmUvZGV2LmMtMTMyMzUtXHQudGhyZWFkX2NvbW1cdFx0PSBcJiMzNDtiYWNrbG9nX25hcGkvJXVcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBiYWNrbG9nX3RocmVhZHNgJiMzOTtzIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgYmFja2xvZ190aHJlYWRzYCBpcyBpZGVudGlmaWVkIGFzIGFuIGBzbXBfaG90cGx1Z190aHJlYWRgLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUgc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIGFuZCBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byBDUFUgaG90cGx1Z2dpbmcgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgU01QIChTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZykgZnJhbWV3b3JrLiBLbm93aW5nIGl0JiMzOTtzIG9mIHRoaXMgdHlwZSwgSSB3YW50IHRvIHBpbiBkb3duIGV4YWN0bHkgd2hlcmUgdGhpcyB0aHJlYWQgaXMgcmVnaXN0ZXJlZC4gVW5kZXJzdGFuZGluZyBpdHMgcmVnaXN0cmF0aW9uIHBvaW50IGlzIGNydWNpYWwgZm9yIHRyYWNpbmcgaXRzIGxpZmVjeWNsZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgaXRzIGVudHJ5IHBvaW50IGlzIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCB1dGlsaXplcyBhdCBpbml0aWFsaXphdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBob3RwbHVnIGV2ZW50IGhhbmRsaW5nIGFuZCBzY2hlZHVsaW5nLiBJdCB3aWxsIGxpa2VseSByZXZlYWwgY3JpdGljYWwgZGV0YWlscyBhYm91dCBpdHMgcHVycG9zZSBhbmQgcmVzcG9uc2liaWxpdGllcyB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWNrbG9nX3RocmVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0yMDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqZGV2X2luZGV4X2hhc2goc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleClcbi0tXG5uZXQvY29yZS9kZXYuYy0yMDctXG5uZXQvY29yZS9kZXYuYzoyMDg6c3RhdGljIERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcbm5ldC9jb3JlL2Rldi5jLTIwOS1cbm5ldC9jb3JlL2Rldi5jPTIxMD1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyhjaGFyICphcmcpXG5uZXQvY29yZS9kZXYuYy0yMTEte1xubmV0L2NvcmUvZGV2LmM6MjEyOlx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2dXNlX2JhY2tsb2dfdGhyZWFkc19rZXkpO1xubmV0L2NvcmUvZGV2LmMtMjEzLVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjE1PWVhcmx5X3BhcmFtKFwmIzM0O3RocmVhZF9iYWNrbG9nX25hcGlcJiMzNDssIHNldHVwX2JhY2tsb2dfbmFwaV90aHJlYWRzKTtcbm5ldC9jb3JlL2Rldi5jLTIxNi1cbm5ldC9jb3JlL2Rldi5jOjIxNzpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXG5uZXQvY29yZS9kZXYuYy0yMTgte1xubmV0L2NvcmUvZGV2LmM6MjE5Olx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2dXNlX2JhY2tsb2dfdGhyZWFkc19rZXkpO1xubmV0L2NvcmUvZGV2LmMtMjIwLX1cbi0tXG5uZXQvY29yZS9kZXYuYy0yMjMtXG5uZXQvY29yZS9kZXYuYzoyMjQ6c3RhdGljIGJvb2wgdXNlX2JhY2tsb2dfdGhyZWFkcyh2b2lkKVxubmV0L2NvcmUvZGV2LmMtMjI1LXtcbi0tXG5uZXQvY29yZS9kZXYuYz0yMzE9c3RhdGljIGlubGluZSB2b2lkIGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yMzctXHRcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XG5uZXQvY29yZS9kZXYuYzoyMzg6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTIzOS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9kaXNhYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcbm5ldC9jb3JlL2Rldi5jOjI0NTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcbi0tXG5uZXQvY29yZS9kZXYuYy0yNTYtXHR9IGVsc2Uge1xubmV0L2NvcmUvZGV2LmM6MjU3Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNTgtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2QtXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTI2Mz1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ191bmxvY2tfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbm5ldC9jb3JlL2Rldi5jLTI2NC17XG5uZXQvY29yZS9kZXYuYzoyNjU6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYy0yNjYtXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZC1cdTAwM2VpbnB1dF9wa3RfcXVldWUubG9jayk7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDk2NT1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXG4tLVxubmV0L2NvcmUvZGV2LmMtNDk4MC1cdFx0aWYgKHRocmVhZCkge1xubmV0L2NvcmUvZGV2LmM6NDk4MTpcdFx0XHRpZiAodXNlX2JhY2tsb2dfdGhyZWFkcygpIFx1MDAyNlx1MDAyNiB0aHJlYWQgPT0gcmF3X2NwdV9yZWFkKGJhY2tsb2dfbmFwaSkpXG5uZXQvY29yZS9kZXYuYy00OTgyLVx0XHRcdFx0Z290byB1c2VfbG9jYWxfbmFwaTtcbi0tXG5uZXQvY29yZS9kZXYuYz01MjkyPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTUyOTctXHRpZiAoc2QgIT0gbXlzZCkge1xubmV0L2NvcmUvZGV2LmM6NTI5ODpcdFx0aWYgKHVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xubmV0L2NvcmUvZGV2LmMtNTI5OS1cdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnNkLVx1MDAzZWJhY2tsb2cpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUzMTc9dm9pZCBraWNrX2RlZmVyX2xpc3RfcHVyZ2UodW5zaWduZWQgaW50IGNwdSlcbi0tXG5uZXQvY29yZS9kZXYuYy01MzIxLVxubmV0L2NvcmUvZGV2LmM6NTMyMjpcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpIHtcbm5ldC9jb3JlL2Rldi5jLTUzMjMtXHRcdGJhY2tsb2dfbG9ja19pcnFfc2F2ZShzZCwgXHUwMDI2ZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTY2MzI9c3RhdGljIHZvaWQgbmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNjYzNi1cbm5ldC9jb3JlL2Rldi5jOjY2Mzc6XHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcdTAwMjZcdTAwMjYgcmVtc2QpIHtcbm5ldC9jb3JlL2Rldi5jLTY2MzgtXHRcdHNkLVx1MDAzZXJwc19pcGlfbGlzdCA9IE5VTEw7XG4tLVxubmV0L2NvcmUvZGV2LmM9NjY0OT1zdGF0aWMgYm9vbCBzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY2NTEtI2lmZGVmIENPTkZJR19SUFNcbm5ldC9jb3JlL2Rldi5jOjY2NTI6XHRyZXR1cm4gIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcdTAwMjZcdTAwMjYgc2QtXHUwMDNlcnBzX2lwaV9saXN0O1xubmV0L2NvcmUvZGV2LmMtNjY1My0jZWxzZVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEyNzIyPXN0YXRpYyBpbnQgZGV2X2NwdV9kZWFkKHVuc2lnbmVkIGludCBvbGRjcHUpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI3NjctXG5uZXQvY29yZS9kZXYuYzoxMjc2ODpcdGlmICghdXNlX2JhY2tsb2dfdGhyZWFkcygpKSB7XG5uZXQvY29yZS9kZXYuYy0xMjc2OS0jaWZkZWYgQ09ORklHX1JQU1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEzMjIyPXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzMjMwLVxubmV0L2NvcmUvZGV2LmM6MTMyMzE6c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xubmV0L2NvcmUvZGV2LmMtMTMyMzItXHQuc3RvcmVcdFx0XHQ9IFx1MDAyNmJhY2tsb2dfbmFwaSxcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI0Mz1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9kZXYuYy0xMzI5OS1cdFx0Z290byBvdXQ7XG5uZXQvY29yZS9kZXYuYzoxMzMwMDpcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpXG5uZXQvY29yZS9kZXYuYzoxMzMwMTpcdFx0c21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKFx1MDAyNmJhY2tsb2dfdGhyZWFkcyk7XG5uZXQvY29yZS9kZXYuYy0xMzMwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBOQVBJIFRocmVhZGluZyBMb29wKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaW4gYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYC4gVGhpcyBpcyB1c2VkIGJ5IGJvdGggcmVndWxhciBOQVBJIHRocmVhZHMgYW5kIHRob3NlIHRoYXQgYXJlIGhhbmRsaW5nIGJhY2tsb2cuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGNoYW5nZSB0byBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQsIG5hbWVseSB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsIGxvb3AsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGlmIGZ1enppbmcgaXQgaXMgYSBnb29kIGlkZWEuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncy4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gYSBjb25maWcgcGVyc3BlY3RpdmUsIGl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfTkVUYCwgYnV0IHRoYXQmIzM5O3MgYSBnaXZlbiDigJMgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgZm9yIGFueSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkuIE5vIHNwZWNpZmljIE5BUEktcmVsYXRlZCBjb25maWcgb3B0aW9ucyB0aGF0IEkgY2FuIGltbWVkaWF0ZWx5IHNlZS4gTkFQSSBpcyBzbyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrIHdvcmtzLCB0aGVyZSYjMzk7cyBub3QgdXN1YWxseSBhbnkgbW9kdWxhcml0eSB0byBpdCBmcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZS4KCldhaXQsIGxvb2tpbmcgZGVlcGVyIGludG8gdGhpcywgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5hcGlfdGhyZWFkZWRfcG9sbGAgYW5kIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRocmVhZGVkIE5BUEkgYmVoYXZpb3IgaXMgaW5pdGlhdGVkIGVpdGhlciB3aGVuIHNvbWVvbmUgY2FsbHMgYG5hcGlfc2V0X3RocmVhZGVkYCBvciBgbmV0aWZfc2V0X3RocmVhZGVkYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBpcyBhIGNvbmZpZyBmb3IgdGhyZWFkZWQgTkFQSS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzE2MT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzE5OC1cbm5ldC9jb3JlL2Rldi5jOjcxOTk6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cdFx0XHRcdCAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkX21vZGUpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIwOC1cbm5ldC9jb3JlL2Rldi5jOjcyMDk6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyMTAtXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIzNC1cdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG5uZXQvY29yZS9kZXYuYzo3MjM1Olx0XHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYy03MjM2LVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxubmV0L2NvcmUvZGV2LmM6NzI2NTpcdFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03MjY2LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTc0ODY9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwNS1cbm5ldC9jb3JlL2Rldi5jOjc1MDY6XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkZWQpKTtcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxuLS1cbm5ldC9jb3JlL2Rldi5oPTM2OT1uYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5oLTM3NS1cbm5ldC9jb3JlL2Rldi5oOjM3NjppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxubmV0L2NvcmUvZGV2LmgtMzc3LVx0XHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKTtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNz1uZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzNy1cdFx0dGhyZWFkZWQgPSBubGFfZ2V0X3VpbnQoaW5mby1cdTAwM2VhdHRyc1tORVRERVZfQV9OQVBJX1RIUkVBREVEXSk7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjMzODpcdFx0cmV0ID0gbmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzktXHRcdGlmIChyZXQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weT0zNT1kZWYgbmFwaV9saXN0X2NoZWNrKG5mKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weS01MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6NTE6ZGVmIG5hcGlfc2V0X3RocmVhZGVkKG5mKSAtXHUwMDNlIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTUyLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5PTM2OT1kZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3NS0gICAgICAgICAgICAgIG5hcGlfbGlzdF9jaGVjayxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6Mzc2OiAgICAgICAgICAgICAgbmFwaV9zZXRfdGhyZWFkZWQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3Ny0gICAgICAgICAgICAgIGRldl9zZXRfdGhyZWFkZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFRocmVhZGVkIE5BUEkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVGhyZWFkZWQgTkFQSSBpbXBsZW1lbnRhdGlvbi4gSXQgc2VlbXMgbGlrZSBlbmFibGluZyBpdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB1c2luZyBuZXRsaW5rIChuZXRkZXYtZ2VubCkuIFRoZSBgdGhyZWFkX2JhY2tsb2dfbmFwaWAgYm9vdCBwYXJhbWV0ZXIgYWxzbyBzZWVtcyB0byBraWNrIHRoaW5ncyBvZmYgd2l0aCBgdXNlX2JhY2tsb2dfdGhyZWFkcygpYC4gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBuZWVkZWQsIHdoaWNoIG1ha2VzIHNlbnNlIC0gaXTigJlzIGNvcmUgbmV0d29ya2luZywgcmlnaHQ/CgpBbHJpZ2h0LCBtb3Zpbmcgb24sIGl0IHNvdW5kcyBsaWtlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90aGluZyBncm91bmRicmVha2luZywgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG5ldyBob29rcy4gTGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucy4gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0IHJ1bnMgYXMgYSBrdGhyZWFkLiBXYWl0IGEgbWludXRlLi4uIHRoYXQmIzM5O3MgKnN0YXRpYyo/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gRG9lcyBgbmFwaV9zZXRfdGhyZWFkZWRgIGdldCBleHBvcnRlZCBhbnl3aGVyZT8gR290dGEgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBvbiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldGlmX3NldF90aHJlYWRlZGAqKgoKT2theSwgc28gdGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG5ldGlmX3NldF90aHJlYWRlZGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKldoeSogYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nPyBPciBwZXJoYXBzIGEgbmV3IGZlYXR1cmUgdGhhdCYjMzk7cyBiZWluZyBpbnRlZ3JhdGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IHdpbGwgaW5mb3JtIGhvdyBkZWVwIEkgbmVlZCB0byBkaWcuCgpNeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBpdHMgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMsIGVzcGVjaWFsbHkgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBzZW1hbnRpY3MuIFdoYXQgbG9ja3MgYXJlIGludm9sdmVkPyBBcmUgdGhleSBwZXItbmV0ZGV2LCBnbG9iYWwsIG9yIHNvbWV0aGluZyBtb3JlIG51YW5jZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGxvY2sgY29udGVudGlvbj8gTXkgaW50dWl0aW9uIGlzIHNjcmVhbWluZyByYWNlIGNvbmRpdGlvbnMgYXQgdGhpcyBwb2ludCEgSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyB0aHJlYWQtc2FmZS4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBnb3RjaGFzLCBsaWtlIHBvdGVudGlhbCBkZWFkbG9ja3MsIGxpdmVsb2Nrcywgb3IgZXZlbiBzaW1wbGUgZGF0YSBjb3JydXB0aW9uIHNjZW5hcmlvcy4gSSBrbm93IHNvbWUgYXJjaGl0ZWN0dXJlcyBoYXZlIHNwZWNpZmljIG1lbW9yeSBvcmRlcmluZyByZXF1aXJlbWVudHM7IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgY29kZSBoYW5kbGVzIHRoZW0gY29ycmVjdGx5LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVsYXhlZCBtZW1vcnkgbW9kZWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZCBhbmQgY2FuIHByb3ZpZGUgdGhyZWFkIHNhZmV0eS4KClVsdGltYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhpcyBjb2RlIGlzIHNvbGlkIGFuZCBpZiBpdCYjMzk7cyBvcGVyYXRpbmcgc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBOQVBJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBuZXR3b3JrIGRldmljZSBOQVBJIGNvbmZpZ3VyYXRpb24sIG9yIGF0IGxlYXN0IGEgc2V0dGluZyB0aGF0IGltcGFjdHMgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbmV0bGluayBpbnRlcmZhY2UgY29kZS4gSSBzdXNwZWN0IHRoZSBmdW5jdGlvbiBJJiMzOTttIGFmdGVyLCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvbmUsIGlzIHByb2JhYmx5IG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBleHBvc2VzIE5BUEkgcmVsYXRlZCBzZXR0aW5ncywgYW5kIEkgYmVsaWV2ZSBuZXRsaW5rIGlzIHRoZSByb3V0ZSBpdCB0YWtlcywgc28gSSYjMzk7bGwgc3RhcnQgZGlnZ2luZyB0aGVyZS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNj1zdGF0aWMgaW50XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjMyNzpuZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzI4LXtcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jPTM2MT1pbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM3My1cdGlmIChuYXBpKSB7XG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM3NDpcdFx0ZXJyID0gbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhuYXBpLCBpbmZvKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzc1LVx0XHRuZXRkZXZfdW5sb2NrKG5hcGktXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAuIFJpZ2h0IGF3YXksIHRoZSBuYW1lIHNjcmVhbXMgJiMzNDtuZXRsaW5rIGhhbmRsZXIsJiMzNDsgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IGZvciBzb21ldGhpbmcgZGVhbGluZyB3aXRoIE5BUEkgKHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIEFQSSkgYW5kIG5ldGxpbmsuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGRvaW5nIHRoZSBoZWF2eSBsaWZ0aW5nIHdoZW4gd2UgcmVjZWl2ZSBhIHNwZWNpZmljIG5ldGxpbmsgbWVzc2FnZSByZWxhdGVkIHRvIE5BUEkgY29uZmlndXJhdGlvbiBvciBvcGVyYXRpb24uCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHRoaW5nIGlzIHN0YXRpYy4gSW4ga2VybmVsIGNvZGUsIHRoYXQgZGV0YWlsIGlzIGluY3JlZGlibHkgaW1wb3J0YW50IGZvciBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUuIEtub3dpbmcgaWYgaXQmIzM5O3Mgc3RhdGljIGdpdmVzIG1lIGEgdmFsdWFibGUgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlOiBpcyBpdCBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG9yIG1heWJlIGV2ZW4gYW5vdGhlciBtb2R1bGU/IFRoYXQmIzM5O2xsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0bGluayBhbmQgTkFQSSBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW4gYW5kIHNlZSBpZiBpdCYjMzk7cyBnb3QgYSBgc3RhdGljYCBrZXl3b3JkIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZGV2X25sX25hcGlfc2V0X2RvaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5jLTIyNi1cdFx0LmNtZFx0XHQ9IE5FVERFVl9DTURfTkFQSV9TRVQsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYzoyMjc6XHRcdC5kb2l0XHRcdD0gbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQsXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXHRcdC5wb2xpY3lcdFx0PSBuZXRkZXZfbmFwaV9zZXRfbmxfcG9saWN5LFxuLS1cbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oPTM3PWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmg6Mzg6aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmgtMzktaW50IG5ldGRldl9ubF9iaW5kX3R4X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjb2RlIHNuaXBwZXRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipUaGlua2luZyBUaHJvdWdoIE5BUEkgYW5kIE5ldHdvcmsgRHJpdmVyIEludGVyYWN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBkcml2ZXIgZnVuY3Rpb25zIGFuZCB0cnlpbmcgdG8gbWFwIHRoZW0gb3V0IGluIG15IGhlYWQuIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgdGhlIGZpcnN0IG9uZSB0aGF0IGp1bXBzIG91dC4gSXQmIzM5O3MgKm5vdCogc3RhdGljLCBzbyBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgbGV0cyB1c2Vyc3BhY2UgaW50ZXJhY3Qgd2l0aCBOQVBJIChOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIFBvbGwpIGZyb20gYSBOZXRsaW5rIGNvbnRleHQsIHByZXN1bWFibHkgdG8gbWFuYWdlIG9yIGNvbmZpZ3VyZSBOQVBJIHNldHRpbmdzLiBUaGF04oCZcyBwcm9iYWJseSB0aGUga2V5IHBvaW50IHRvIHN0YXJ0IHdpdGguCgpUaGVuIHRoZXJlJiMzOTtzIHRoZSBjb3JlIHRyaWdnZXI6IE5BUEkgdGhyZWFkZWQgcG9sbGluZyBpcyAqZHJpdmVuKiBieSBpbmNvbWluZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0YmVhdCwgdGhlIHJlYXNvbiBOQVBJIGV4aXN0cy4gVHJhZmZpYyBhcnJpdmVzLCBhbmQgTkFQSSYjMzk7cyBtZWNoYW5pc20gZ2V0cyBraWNrZWQgaW50byBhY3Rpb24uCgpOb3csIGxldCBtZSB0aGluayBhYm91dCBgbmFwaV9zY2hlZHVsZV9ycHNgLiBUaGF0JiMzOTtzIHN0YXRpYywgc28gaXTigJlzIGNsZWFybHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLiBSUFMgLSBSZWNlaXZlIFBhY2tldCBTdGVlcmluZyAtIGlzIGFsbCBhYm91dCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgQ1BVcy4gVGhpcyBpcyBsaWtlbHkgdXNlZCBieSBOQVBJIHRvIGRpcmVjdCBpbmNvbWluZyBwYWNrZXRzIHRvd2FyZHMgYSBwYXJ0aWN1bGFyIENQVSwgcHJlc3VtYWJseSBiYXNlZCBvbiBhIGhhc2guIEkmIzM5O2QgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhhdCYjMzk7cyBwbHVtYmVkIGluLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgc3VnZ2VzdHMgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGRyaXZlciwgb3IgY29yZSBOQVBJIGxvZ2ljLgoKRmluYWxseSwgdGhlcmUmIzM5O3MgYF9fbmFwaV9zY2hlZHVsZWAuIFRoYXTigJlzIGFub3RoZXIga2V5IGZ1bmN0aW9uLiBUaGUgZG91YmxlIHVuZGVyc2NvcmUgcHJlZml4IGlzIGEgY29udmVudGlvbiB0aGF0IHN1Z2dlc3RzIHRoaXMgaXMgaW50ZW5kZWQgZm9yICppbnRlcm5hbCogZHJpdmVyIHVzZSwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBieSB1c2Vyc3BhY2UuIEl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIHNjaGVkdWxpbmcgcHJpbWl0aXZlLCB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5ICpzY2hlZHVsaW5nKiB0aGUgTkFQSSBwb2xsIGluIHRoZSBmaXJzdCBwbGFjZSwgbGlrZWx5IGJ5IGFkZGluZyBpdCB0byBhIHJ1bnF1ZXVlIG9yIHNpbWlsYXIuIEkmIzM5O2QgZ3Vlc3MgdGhhdCBgbmFwaV9zY2hlZHVsZV9ycHNgIGlzIGEgaGlnaGVyLWxldmVsIHdyYXBwZXIgdGhhdCBjYWxscyBgX19uYXBpX3NjaGVkdWxlYCBhZnRlciBwZXJoYXBzIGRvaW5nIHNvbWUgQ1BVIGFmZmluaXR5IGNhbGN1bGF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgb2YgYSBOQVBJIHBvbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmFwaV9zY2hlZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzg2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3Q9MTI5PXRvIElSUSBiZWluZyBhdXRvLW1hc2tlZCBieSB0aGUgZGV2aWNlKSBzaG91bGQgdXNlIHRoZSBuYXBpX3NjaGVkdWxlX3ByZXAoKVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzMDphbmQgX19uYXBpX3NjaGVkdWxlKCkgY2FsbHM6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3QtMTMxLVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzYtICAgICAgLyogc2NoZWR1bGUgYWZ0ZXIgbWFza2luZyB0byBhdm9pZCByYWNlcyAqL1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzNzogICAgICBfX25hcGlfc2NoZWR1bGUoXHUwMDI2di1cdTAwM2VuYXBpKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzgtICB9XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdD03Mz1uYXBpX2NvbXBsZXRlX2RvbmUoKSDkvJrph4rmlL7lrp7kvovnmoTmiYDmnInmnYPjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwMS3mmL7lvI/lsY/olL3kuK3mlq3nmoTpqbHliqjnqIvluo/vvIjogIzpnZ7orr7lpIfoh6rliqjlsY/olL0gSVJR77yJ5bqU5L2/55SoIG5hcGlfc2NoZWR1bGVfcHJlcCgpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdDoxMDI6X19uYXBpX3NjaGVkdWxlKCkg6LCD55So77yaXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwMy1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwOC0gICAgICAvKiDlnKjlsY/olL3lkI7osIPluqbku6Xpgb/lhY3nq57kuokgKi9cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3Q6MTA5OiAgICAgIF9fbmFwaV9zY2hlZHVsZShcdTAwMjZ2LVx1MDAzZW5hcGkpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdC0xMTAtICB9XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jPTg0NjI9aXJxcmV0dXJuX3QgcmVjZWl2ZV9jb250ZXh0X2ludGVycnVwdF9uYXBpKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTg0NjktXHRcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKHJjZC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6ODQ3MDpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHJjZC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL2NoaXAuYy04NDcxLVx0XHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYz0zOTg9c3RhdGljIGlycXJldHVybl90IHJjYXJfY2FuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYy00MTgtXHRcdFx0d3JpdGViKHByaXYtXHUwMDNlaWVyLCBcdTAwMjZwcml2LVx1MDAzZXJlZ3MtXHUwMDNlaWVyKTtcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuLmM6NDE5Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYy00MjAtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmM9MTI2Nz1zdGF0aWMgdm9pZCByY2FyX2NhbmZkX2hhbmRsZV9nbG9iYWxfcmVjZWl2ZShzdHJ1Y3QgcmNhcl9jYW5mZF9nbG9iYWwgKmdwcml2LCB1MzIgY2gpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW5mZC5jLTEyODItXHRcdFx0XHRcdCAgICAgUkNBTkZEX1JGQ0NfUkZJRSk7XG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmM6MTI4MzpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYy0xMjg0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYz04Mz1zdGF0aWMgdm9pZCB2aXJ0cXVldWVfbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYy04Ny1cdFx0dmlydHF1ZXVlX2Rpc2FibGVfY2IodnEpO1xuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYzo4ODpcdFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xuZHJpdmVycy9uZXQvY2FuL3ZpcnRpb19jYW4uYy04OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYz0xNzgwPXR5cGhvb25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk1LVx0XHR0eXBob29uX3Bvc3RfcGNpX3dyaXRlcyhpb2FkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM6MTc5NjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmMtMTc5Ny1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jPTEyOTM9c3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jLTEzMTgtXHRcdFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXHUwMDI2bnAtXHUwMDNlbmFwaSkpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGFwdGVjL3N0YXJmaXJlLmM6MTMxOTpcdFx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZucC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkYXB0ZWMvc3RhcmZpcmUuYy0xMzIwLVx0XHRcdFx0ZW5hYmxlID0gcmVhZGwoaW9hZGRyICYjNDM7IEludHJFbmFibGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYz01MDQ9c3RhdGljIGlycXJldHVybl90IGFsdGVyYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy01MjUtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcnhkbWFfaXJxX2xvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jOjUyNjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmMtNTI3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hbWQ4MTExZS5jPTEwNzc9c3RhdGljIGlycXJldHVybl90IGFtZDgxMTFlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExMy1cdFx0XHQvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmM6MTExNDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYy0xMTE1LVx0XHR9IGVsc2UgaWYgKGludHJlbjAgXHUwMDI2IFJJTlRFTjApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTI1NTc9cGNuZXQzMl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMtMjYwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MjYxMDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jLTI2MTEtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz0zNjc9c3RhdGljIHZvaWQgeGdiZV9pc3JfYmhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy00MzctXHRcdFx0LyogVHVybiBvbiBwb2xsaW5nICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jOjQzODpcdFx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTQzOS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jPTUzNz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdiZV9kbWFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTMtXHRcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1NTQ6XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2Y2hhbm5lbC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTU1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM9NTY2PXN0YXRpYyB2b2lkIHhnYmVfdHhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01ODctXHRcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1ODg6XHRcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTg5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tYWluLmM9MTI3PXN0YXRpYyBpcnFyZXR1cm5fdCB4Z2VfaXJxKGNvbnN0IGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzItXHRcdHhnZV9pbnRyX2Rpc2FibGUocGRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYzoxMzM6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwZGF0YS1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS12Mi9tYWluLmMtMTM0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYz0yMTM9c3RhdGljIGlycXJldHVybl90IHhnZW5lX2VuZXRfcnhfaXJxKGNvbnN0IGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jLTIxOC1cdFx0ZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmM6MjE5Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cnhfcmluZy1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMjAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jPTM1ND1zdGF0aWMgaXJxcmV0dXJuX3QgYXJjX2VtYWNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jLTM2OS1cdFx0XHRhcmNfcmVnX2Nscihwcml2LCBSX0VOQUJMRSwgUlhJTlRfTUFTSyB8IFRYSU5UX01BU0spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jOjM3MDpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21haW4uYy0zNzEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYz0xNjMzPXN0YXRpYyB2b2lkIGF0bDFjX2ludHJfcnhfdHgoc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0NS1cdFx0XHRpbnRyX21hc2sgXHUwMDI2PSB+YXRsMWNfcXJlZ3NbaV0ucnhfaXNyO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmM6MTY0NjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VycmRfcmluZ1tpXS5uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jLTE2NDctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjUzLVx0XHRcdGludHJfbWFzayBcdTAwMjY9IH5hdGwxY19xcmVnc1tpXS50eF9pc3I7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYzoxNjU0Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZXRwZF9yaW5nW2ldLm5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY1NS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jPTEyNzc9c3RhdGljIGlycXJldHVybl90IGF0bDFlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYy0xMzQ2LVx0XHRcdFx0ICAgXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYzoxMzQ3Olx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYy0xMzQ4LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYz04MT1zdGF0aWMgdm9pZCBiY21hc3BfaW50cjJfaGFuZGxpbmcoc3RydWN0IGJjbWFzcF9pbnRmICppbnRmLCB1MzIgc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMtODUtXHRcdFx0YmNtYXNwX2VuYWJsZV9yeF9pcnEoaW50ZiwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jOjg2Olx0XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2aW50Zi1cdTAwM2VyeF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmMtODctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTkyLVx0XHRcdGJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYzo5MzpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmludGYtXHUwMDNldHhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9ODg3PXN0YXRpYyBpcnFyZXR1cm5fdCBiNDRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy05MTctXHRcdFx0X19iNDRfZGlzYWJsZV9pbnRzKGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jOjkxODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYy05MTktXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM9MTEwND1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtX3N5c3BvcnRfcnhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNC1cdFx0XHRpbnRybDJfMF9tYXNrX3NldChwcml2LCBJTlRSTDJfMF9SRE1BX01CRE9ORSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTEyNTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNi1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTQ2LVx0XHRcdGludHJsMl8wX21hc2tfc2V0KHByaXYsIHJpbmdfYml0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYzoxMTQ3Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZ0eHItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTE0OC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYz0xMTU1PXN0YXRpYyBpcnFyZXR1cm5fdCBiY21fc3lzcG9ydF90eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTc4LVx0XHRcdGludHJsMl8xX21hc2tfc2V0KHByaXYsIEJJVChyaW5nKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTE3OTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnR4ci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTgwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jPTMzNjI9Ym54Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzkzLVx0XHRibmFwaS1cdTAwM2VsYXN0X3N0YXR1c19pZHggPSBzYmxrLVx1MDAzZXN0YXR1c19pZHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmM6MzM5NDpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmJuYXBpLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jLTMzOTUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYz0zMjEyPXN0YXRpYyBpcnFyZXR1cm5fdCBiY21nZW5ldF9pc3IxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyMzgtXHRcdFx0YmNtZ2VuZXRfcnhfcmluZ19pbnRfZGlzYWJsZShyeF9yaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzIzOTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnJ4X3JpbmctXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNDAtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTEtXHRcdFx0YmNtZ2VuZXRfdHhfcmluZ19pbnRfZGlzYWJsZSh0eF9yaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzI1MjpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnR4X3JpbmctXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTMtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MTk2Mz1zdGF0aWMgaXJxcmV0dXJuX3Qgc2JtYWNfaW50cihpbnQgaXJxLHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5MC1cdFx0XHRfX3Jhd193cml0ZXEoMCwgc2MtXHUwMDNlc2JtX2ltcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM6MTk5MTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2c2MtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5Mi1cdFx0XHQvKiBEZXBlbmQgb24gdGhlIGV4aXQgZnJvbSBwb2xsIHRvIHJlZW5hYmxlIGludHIgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmM9NzQxPWJuYWRfbmV0aWZfcnhfc2NoZWR1bGVfcG9sbChzdHJ1Y3QgYm5hZCAqYm5hZCwgc3RydWN0IGJuYV9jY2IgKmNjYilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ2LVx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSkpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmM6NzQ3Olx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ4LVx0XHRyeF9jdHJsLVx1MDAzZXJ4X3NjaGVkdWxlJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmM9MTY1Mj1pcnFyZXR1cm5fdCB0MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2Mi1cdFx0XHRpZiAocHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwdGVyKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYi9zZ2UuYzoxNjYzOlx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2NC1cdFx0XHRlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jPTQxOD1zdGF0aWMgaXJxcmV0dXJuX3QgZXA5M3h4X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL2VwOTN4eF9ldGguYy00MzEtXHRcdFx0d3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jOjQzMjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2ZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jLTQzMy1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MzE2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgYmVfaW50eChpbnQgaXJxLCB2b2lkICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYy0zMTc4LVx0XHRudW1fZXZ0cyA9IGV2ZW50c19nZXQoZXFvKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM6MzE3OTpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmVxby1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMtMzE4MC1cdFx0aWYgKG51bV9ldnRzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYz04Nz1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTA0LVx0XHRcdC8qIHNjaGVkdWxlIGFmdGVyIG1hc2tpbmcgdG8gYXZvaWQgcmFjZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoxMDU6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlcXVldWVbMF0ubmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTA2LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTExMj1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxX3R4cngoaW50IGlycSwgdm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMTktXHRcdC8qIHNjaGVkdWxlIGFmdGVyIG1hc2tpbmcgdG8gYXZvaWQgcmFjZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYzoxMjA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZxdWV1ZS1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMjEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmM9MjE4PXN0YXRpYyBpcnFyZXR1cm5fdCBucHNfZW5ldF9pcnFfaGFuZGxlcihzMzIgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMtMjI3LVx0XHRcdG5wc19lbmV0X3JlZ19zZXQocHJpdiwgTlBTX0VORVRfUkVHX0JVRl9JTlRfRU5BQkxFLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jOjIyODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jLTIyOS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jPTI0ODk9ZmVjX2VuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0yNTAwLVx0XHRcdHdyaXRlbCgwLCBmZXAtXHUwMDNlaHdwICYjNDM7IEZFQ19JTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzoyNTAxOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZmZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0yNTAyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDgxNj1zdGF0aWMgaW50IGZlY19lbmV0X3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTQ4MzItXHRcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKFx1MDAyNmZlcC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzo0ODMzOlx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZmZXAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy00ODM0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jPTMwMD1mc19lbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMwLVx0XHRcdGlmIChuYXBpX29rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM6MzMxOlx0XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmZlcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTMzMi1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjI1Nz1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9yZWNlaXZlKGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIyNzUtXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3JwLVx1MDAzZWdycGxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MjI3NjpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmdycC1cdTAwM2VuYXBpX3J4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3Ny1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yMjg4PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX3RyYW5zbWl0KGludCBpcnEsIHZvaWQgKmdycF9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jLTIyOTktXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z3JwLVx1MDAzZWdycGxvY2ssIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM6MjMwMDpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmdycC1cdTAwM2VuYXBpX3R4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjMwMS1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzA0Mz1zdGF0aWMgaXJxcmV0dXJuX3QgdWNjX2dldGhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYy0zMDY3LVx0XHRcdG91dF9iZTMyKHVjY2YtXHUwMDNlcF91Y2NtLCB1Y2NtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jOjMwNjg6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnVnZXRoLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzA2OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz01MDY9aGlwMDRfbWFjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTU2My1cdFx0XHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzo1NjQ6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtNTY1LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTY2Nj1zdGF0aWMgaXJxcmV0dXJuX3QgaGlwMDRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTY5NC1cdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6Njk1Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy02OTYtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTcwMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgdHhfZG9uZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtNzEwLVx0XHR3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0sgXHUwMDI2IH5SQ1ZfSU5ULCBwcml2LVx1MDAzZWJhc2UgJiM0MzsgUFBFX0lOVEVOKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzo3MTE6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTcxMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYz0yNjA9c3RhdGljIGlubGluZSB2b2lkIG1hbF9zY2hlZHVsZV9wb2xsKHN0cnVjdCBtYWxfaW5zdGFuY2UgKm1hbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjYtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hbC1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL21hbC5jOjI2NzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNm1hbC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL21hbC5jLTI2OC1cdH0gZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmM9MTU3MD1zdGF0aWMgaXJxcmV0dXJuX3QgaWJtdmV0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTU3OS1cdFx0V0FSTl9PTihscGFyX3JjICE9IEhfU1VDQ0VTUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE1ODA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZldGguYy0xNTgxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmM9NDMzMj1zdGF0aWMgaXJxcmV0dXJuX3QgaWJtdm5pY19pbnRlcnJ1cHRfcngoaW50IGlycSwgdm9pZCAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYy00MzQ2LVx0XHRkaXNhYmxlX3NjcnFfaXJxKGFkYXB0ZXIsIHNjcnEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYzo0MzQ3Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpW3NjcnEtXHUwMDNlc2NycV9udW1dKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmMtNDM0OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmM9MjE5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNC1cdFx0ZTEwMF9kaXNhYmxlX2lycShuaWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjIyMTU6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZuaWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmM9Mzc0Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYy0zNzc4LVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfbWFpbi5jOjM3Nzk6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZhZGFwdGVyLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfbWFpbi5jLTM3ODAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xNzYzPXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaShpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxNy1cdFx0YWRhcHRlci1cdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODE4Olx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTgyOT1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTg5Ni1cdFx0YWRhcHRlci1cdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODk3Olx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTg5OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTk0Nj1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2l4X3J4KGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xOTY1LVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jOjE5NjY6XHRcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXHUwMDI2YWRhcHRlci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xOTY3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jPTg5NT1zdGF0aWMgaXJxcmV0dXJuX3QgaWdidmZfaW50cl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTExLVx0XHRhZGFwdGVyLVx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmM6OTEyOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2YWRhcHRlci1cdTAwM2VyeF9yaW5nLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTEzLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYz0xOTQ9c3RhdGljIHZvaWQgbGliZXRoX3hza19uYXBpX3NjaGVkKHZvaWQgKmluZm8pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMTk1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoxOTY6XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKGluZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jLTE5Ny19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL3hzay5jPTIyMz12b2lkIGxpYmV0aF94c2tfd2FrZXVwKGNhbGxfc2luZ2xlX2RhdGFfdCAqY3NkLCB1MzIgcWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzYtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM6MjM3Olx0XHRfX25hcGlfc2NoZWR1bGUobmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMjM4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaD0zNjM9c3RydWN0IGptZV9yaW5nIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaC0zOTMtI2RlZmluZSBKTUVfUlhfU0NIRURVTEUocHJpdikgXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oOjM5NDpcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvam1lLmgtMzk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYz00NzA9c3RhdGljIGlycXJldHVybl90IHhyeDIwMF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc1LVx0XHRsdHFfZG1hX2Rpc2FibGVfaXJxKFx1MDAyNmNoLVx1MDAzZWRtYSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmM6NDc2Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2Y2gtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc3LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9MzQxNz1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnFfcngoaW50IGlycSwgdm9pZCAqX2V0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjMtXHRcdG10a19yeF9pcnFfZGlzYWJsZShldGgsIGV0aC1cdTAwM2Vzb2MtXHUwMDNlcnguaXJxX2RvbmVfbWFzayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jOjM0MjQ6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZldGgtXHUwMDNlcnhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjUtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz0zNDMwPXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaGFuZGxlX2lycV90eChpbnQgaXJxLCB2b2lkICpfZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQzNi1cdFx0bXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgTVRLX1RYX0RPTkVfSU5UKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM6MzQzNzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmV0aC1cdTAwM2V0eF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQzOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmM9NzY5PXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfc3Rhcl9oYW5kbGVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTc4Ny1cdFx0aWYgKHJ4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjc4ODpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VyeF9uYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy03ODktXHRcdGlmICh0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzo3OTA6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnByaXYtXHUwMDNldHhfbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtNzkxLVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmM9MzA5PXN0YXRpYyBpcnFyZXR1cm5fdCBtb3hhcnRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbW94YS9tb3hhcnRfZXRoZXIuYy0zMjEtXHRcdFx0d3JpdGVsKHByaXYtXHUwMDNlcmVnX2ltciwgcHJpdi1cdTAwM2ViYXNlICYjNDM7IFJFR19JTlRFUlJVUFRfTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jOjMyMjpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmMtMzIzLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmM9MjE4Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEwLVx0XHRuYXRzZW1pX2lycV9kaXNhYmxlKGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYzoyMjExOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEyLVx0fSBlbHNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTM2NjA9c3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEoaW50IGZvbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4Mi1cdFx0d3JpdGVsKDAsIGJhc2UgJiM0MzsgTnZSZWdJcnFNYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYzozNjgzOlx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9MzY5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vcHRpbWl6ZWQoaW50IGZvbywgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNS1cdFx0d3JpdGVsKDAsIGJhc2UgJiM0MzsgTnZSZWdJcnFNYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYzozNzE2Olx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2bnAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNy1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jPTk4Nj1zdGF0aWMgaXJxcmV0dXJuX3QgX19scGNfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy05OTktXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZwbGRhdC1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jOjEwMDA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwbGRhdC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtMTAwMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jPTEyNTg9c3RhdGljIGlycXJldHVybl90IHBjaF9nYmVfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L29raS1zZW1pL3BjaF9nYmUvcGNoX2diZV9tYWluLmMtMTMxNy1cdFx0XHQvKiBTdGFydCBwb2xsaW5nIGZvciBOQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jOjEzMTg6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmFkYXB0ZXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jLTEzMTktXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jPTIxOTk9c3RhdGljIGlycXJldHVybl90IHFsM3h4eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmMtMjI0NS1cdFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXHUwMDI2cWRldi1cdTAwM2VuYXBpKSkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jOjIyNDY6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnFkZXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDctXHR9IGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYz0xMjU9c3RhdGljIGlycXJldHVybl90IGVtYWNfaXNyKGludCBfaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL2VtYWMvZW1hYy5jLTE1NC1cdFx0XHRpcnEtXHUwMDNlbWFzayBcdTAwMjY9IH5yeF9xLVx1MDAzZWludHI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYzoxNTU6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnJ4X3EtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYy0xNTYtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYz02NDc9c3RhdGljIGlycXJldHVybl90IHI2MDQwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjc5LVx0XHRcdG1pc3IgXHUwMDI2PSB+KFJYX0lOVFMgfCBUWF9JTlRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jOjY4MDpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNmxwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjgxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz01Njg9c3RhdGljIGlycXJldHVybl90IGNwX2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA1LVx0XHRcdGNwdzE2X2YoSW50ck1hc2ssIGNwX25vcnhfaW50cl9tYXNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6NjA2Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZjcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA3LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MjEzOT1zdGF0aWMgaXJxcmV0dXJuX3QgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgwLVx0XHRcdFJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjE4MTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgyLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM9MTAzMz1zdGF0aWMgaXJxcmV0dXJuX3QgcnRhc2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQ2LVx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZpdmVjLVx1MDAzZW5hcGkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA0NzpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNml2ZWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDQ4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwNTU9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX3FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDY4LVx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcdTAwMjZpdmVjLVx1MDAzZW5hcGkpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA2OTpcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNml2ZWMtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYy0xMDcwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM9MTIwMj1zdGF0aWMgYm9vbCByYXZiX3F1ZXVlX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xMjIwLVx0XHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmM6MTIyMTpcdFx0XHRfX25hcGlfc2NoZWR1bGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpW3FdKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMTIyMi1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jPTk2MT1zdGF0aWMgdm9pZCByc3dpdGNoX3F1ZXVlX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTk2OS1cdFx0c3Bpbl91bmxvY2soXHUwMDI2cmRldi1cdTAwM2Vwcml2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYzo5NzA6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZyZGV2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NzEtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9NDgzPXN0YXRpYyBpcnFyZXR1cm5fdCBydHNuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNDk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM6NDk5Olx0XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNTAwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYz0xODM4PXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4NzMtXHRcdFx0XHQgICAgIEVFU0lQUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjE4NzQ6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNm1kcC1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMtMTg3NS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xNjY5PXN0YXRpYyBpcnFyZXR1cm5fdCBzeGdiZV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jLTE2ODAtXHRcdHByaXYtXHUwMDNlaHctXHUwMDNlZG1hLVx1MDAzZWRpc2FibGVfZG1hX2lycShwcml2LVx1MDAzZWlvYWRkciwgcnhxLVx1MDAzZXF1ZXVlX25vKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jOjE2ODE6XHRcdF9fbmFwaV9zY2hlZHVsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYz0xMDY3PXN0YXRpYyBpcnFyZXR1cm5fdCBlcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5Mi1cdFx0XHRlcGljX25hcGlfaXJxX29mZihkZXYsIGVwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvZXBpYzEwMC5jOjEwOTM6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNmVwLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYz0xNTMwPXN0YXRpYyBpcnFyZXR1cm5fdCBzbXNjOTExeF9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTU4MC1cdFx0XHQvKiBTY2hlZHVsZSBhIE5BUEkgcG9sbCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jOjE1ODE6XHRcdFx0X19uYXBpX3NjaGVkdWxlKFx1MDAyNnBkYXRhLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTE1ODItXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jPTE0Mzc9c3RhdGljIGlycXJldHVybl90IGVtYWNfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYy0xNDc0LVx0XHRcdGVtYWNfZGlzYWJsZV9pbnRlcnJ1cHQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM6MTQ3NTpcdFx0XHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTQ3Ni1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzA2Nz1zdGF0aWMgaW50IHN0bW1hY19uYXBpX2NoZWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGNoYW4sIHUzMiBkaXIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMDg1LVx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2gtXHUwMDNlbG9jaywgZmxhZ3MpO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTAyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBzb21ldGhpbmcgdGhhdCB0cmlnZ2VyZWQgYSBmbGFnLiBJIHRob3VnaHQgYF9fbmFwaV9zY2hlZHVsZWAgd2FzIGludGVybmFsLCBidXQgbm93IEkmIzM5O20gc2VlaW5nIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBleHBsaWNpdGx5IGNoZWNrIGlmIGBuYXBpX3NjaGVkdWxlYCBpdHNlbGYgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCYjMzk7cyB0aGUga2V5IG5vdy4gR290dGEgY29uZmlybSB0aGlzIGFzc3VtcHRpb24gb3IgcmVhc3Nlc3MgdGhlIHNpdHVhdGlvbi4gVGhpcyBjb3VsZCBoYXZlIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IHRoaXMgbW9kdWxlIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTi1BUEkuIFRoaXMgaXMgbGlrZWx5IGFuIG92ZXJzaWdodCB0aGF0IG5lZWRzIGZ1cnRoZXIgc2NydXRpbnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5hcGlfc2NoZWR1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NjcyND12b2lkIF9fbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNjczMS19XG5uZXQvY29yZS9kZXYuYzo2NzMyOkVYUE9SVF9TWU1CT0woX19uYXBpX3NjaGVkdWxlKTtcbm5ldC9jb3JlL2Rldi5jLTY3MzMtXG4tLVxubmV0L2NvcmUvZGV2LmM9Njc0Mz1ib29sIG5hcGlfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNjc2My19XG5uZXQvY29yZS9kZXYuYzo2NzY0OkVYUE9SVF9TWU1CT0wobmFwaV9zY2hlZHVsZV9wcmVwKTtcbm5ldC9jb3JlL2Rldi5jLTY3NjUtXG4tLVxubmV0L2NvcmUvZGV2LmM9Njc3Nj12b2lkIF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTY3ODItfVxubmV0L2NvcmUvZGV2LmM6Njc4MzpFWFBPUlRfU1lNQk9MKF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYpO1xubmV0L2NvcmUvZGV2LmMtNjc4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTkFQSSBUaHJlYWRpbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGluc3RydW1lbnQgdGhlIHRocmVhZGVkIE5BUEkgbG9vcCB3aXRoIG15IHRvb2xzLiBJIHNlZSB0aGF0IGBfX25hcGlfc2NoZWR1bGVgIGlzIGV4cG9ydGVkLCBidXQgdGhhdCYjMzk7cyByZWFsbHkganVzdCB0aGUgKnN0YXJ0aW5nKiBwb2ludDsgdGhlIGxvb3AgaXRzZWxmIGlzIGRyaXZlbiBieSBuZXR3b3JrIHRyYWZmaWMsIHNvIHRoYXQmIzM5O3Mgbm90IHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIG1hbmlwdWxhdGUuIE15IGdvYWwgaXMgdG8gZ2V0ICp0aHJlYWRlZCogTkFQSSBnb2luZy4KCkhtbSwgbGV0JiMzOTtzIHNlZS4gSWYgSSB3YW50IHRvIGRpcmVjdGx5IGNvbnRyb2wgdGhlIHRocmVhZGVkIGxvb3AsIGBuYXBpX3RocmVhZGVkX3BvbGxgIGxvb2tzIHByb21pc2luZy4gVGhhdCYjMzk7cyAqdGhlKiBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4gZm9yIHRoZSB0aHJlYWRlZCBwYXJ0LCBvciBwb3RlbnRpYWxseSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIOKAkyB0aGF0IG9uZSBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgKmVuYWJsaW5nKiB0aHJlYWRlZCBOQVBJLiBPaCwgd2FpdCwgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLiBUaGF0IHByZXNlbnRzIGEgY2hhbGxlbmdlIGZvciBzeXprYWxsZXI7IEkgbmVlZCBzb21ldGhpbmcgY2FsbGFibGUuIElzIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgYSBzdWl0YWJsZSBmb2N1cyBwb2ludCwgdGhlbj8gWWVzLCBhYnNvbHV0ZWx5ISBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gaXQgaXMgaG93IHN5emthbGxlciBjYW4gZW5hYmxlIHRocmVhZGVkIE5BUEkuCgpBbHNvLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIGVhcmx5IHNldHVwIHBhcmFtcy4gVGhlcmUmIzM5O3MgYHNldHVwX2JhY2tsb2dfbmFwaV90aHJlYWRzYCwgYnV0IEkgY2FuIGRlYWwgd2l0aCB0aGF0IGxhdGVyLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGlzIGFjY2Vzc2libGUuIEdvb2QsIGl0JiMzOTtzIGEgbmV0bGluayBoYW5kbGVyOyB0aGF0JiMzOTtzIHJlYWNoYWJsZS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gZm9jdXMgb24gYG5hcGlfdGhyZWFkZWRfcG9sbGA/IFllcywgaXQmIzM5O3MgdGhlIGt0aHJlYWQgZnVuY3Rpb24sIHNvIEkgY2FuIGF0IGxlYXN0IHJlYWNoIGl0LiBUaG91Z2gsIHNpbmNlIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHN0YXRpYywgc3l6a2FsbGVyIG1pZ2h0IGhhdmUgdHJvdWJsZSBmb2N1c2luZyAqZGlyZWN0bHkqIG9uIGl0LiBJdCYjMzk7cyBiZXR0ZXIgaWYgSSBwcm92aWRlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byB0YXJnZXQuCgpIb2xkIG9uLCBidXQgd2FpdC4uLiBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSXQmIzM5O3MganVzdCAqYmV0dGVyKiB0byBnaXZlIGl0IGEgbm9uLXN0YXRpYyBvbmUuIE9rYXksIGxldCYjMzk7cyBzZWUgaWYgYG5hcGlfc2V0X3RocmVhZGVkYCBpcyBub24tc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzE2MT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzE5OC1cbm5ldC9jb3JlL2Rldi5jOjcxOTk6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cdFx0XHRcdCAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkX21vZGUpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIwOC1cbm5ldC9jb3JlL2Rldi5jOjcyMDk6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyMTAtXHRcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtNzIzNC1cdFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XG5uZXQvY29yZS9kZXYuYzo3MjM1Olx0XHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYy03MjM2LVx0fVxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNjQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFx1MDAyNmRldi1cdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxubmV0L2NvcmUvZGV2LmM6NzI2NTpcdFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03MjY2LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTc0ODY9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwNS1cbm5ldC9jb3JlL2Rldi5jOjc1MDY6XHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cdTAwM2Vjb25maWctXHUwMDNldGhyZWFkZWQpKTtcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiBJIHNlZSB0aGF0IGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBhbmQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3MgYWRkIHRob3NlLCBhbG9uZyB3aXRoIGBfX25hcGlfc2NoZWR1bGVgIGFuZCBgX19uYXBpX3NjaGVkdWxlX2lycW9mZmAg4oCTIHRoZXkgc2VlbSByZWxldmFudCBhcyB3ZWxsLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIGBDT05GSUdfTkVUYCBpcyB0aGUgYmFzZWxpbmUsIG9mIGNvdXJzZSwgYnV0IGFueXRoaW5nIGVsc2U/IE5vcGUsIG5vdGhpbmcgc3RhbmRzIG91dC4KCkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGlzIGRvd246IFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIGxvb3AsIHdoZXJlIHRoZSBzY2hlZHVsaW5nIGlzIG1vZGlmaWVkIGJ5IGZvcmNpbmcgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwgb24gKmV2ZXJ5KiBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgQ1BVIHRpbWUuCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqUmVhc29uaW5nOioqIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBOQVBJIHRocmVhZCBDUFUgeWllbGRpbmcgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAsIGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBgX19uYXBpX3NjaGVkdWxlYCwgYF9fbmFwaV9zY2hlZHVsZV9pcnFvZmZgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFsgXSAoaS5lLiBub3RoaW5nIHNwZWNpYWwpCgpIb2xkIG9uIGEgc2VjLi4uIGBuYXBpX3NldF90aHJlYWRlZGAgaXNuJiMzOTt0IGV4cG9ydGVkLCBldmVuIHRob3VnaCBpdCYjMzk7cyBub24tc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgbm90IGEgcHJvYmxlbS4gKkhtbSwqIGF0IGxlYXN0IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgYWxzbyBub24tc3RhdGljLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayBpZiBgbmV0aWZfc2V0X3RocmVhZGVkYCBpcyBleHBvcnRlZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKm5ldGlmX3NldF90aHJlYWRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgVmlzaWJpbGl0eSBvZiBOLUFQSSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggRm9jdXNTeW1ib2xzIGhlcmUsIGFuZCB0aGUgZmFjdCB0aGF0IHNvbWV0aGluZyBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCBhbHNvIGlzbiYjMzk7dCBzdGF0aWMsIGRvZXNuJiMzOTt0IHByZXNlbnQgYSBwcm9ibGVtLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgTi1BUEkgZnVuY3Rpb25zIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlaXIgc2NvcGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY29kZS4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGF0IGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIG5vbi1zdGF0aWMuIE5vcGUsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgb25lIGNoZWNrIGRvbmUuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYHJ1bl9iYWNrbG9nX25hcGlgLiBBbHJpZ2h0LCB0aGF0IG9uZSBpcyBhbHNvIHN0YXRpYy4gUmlnaHQsIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIHdlaXJkbmVzcyBJJiMzOTt2ZSBvdmVybG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldGRldi1nZW5sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzYyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NzcKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKlRoZSBOYXR1cmUgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgc2l0dWF0aW9uIGNsZWFybHkgaXNuJiMzOTt0IHN0YXRpYy4gSXQmIzM5O3MgZHluYW1pYywgY2hhbmdpbmcsIG9yIGF0IGxlYXN0IGNhcGFibGUgb2YgY2hhbmdlLiBJIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdC4gVGhlIGtleSBoZXJlIGlzIHRvIGVtYnJhY2UgdGhlIG5vbi1zdGF0aWMgZWxlbWVudC4gVGhpcyByZXF1aXJlcyBhIHNoaWZ0IGluIG15IHRoaW5raW5nLCBhbmQgYXBwcm9hY2guIE5vdyB0aGF0IEkga25vdyB0aGlzLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuIEkgd2lsbCBkaWN0YXRlIHdoYXQgdGhlIG91dGNvbWUgbXVzdCBiZS4gVGhlIG91dGNvbWUgY2Fubm90IGJlIHNldCwgb3IgbGVmdCB0byBjaGFuY2UsIG9yIHJhbmRvbW5lc3MuCgpZb3VyIFN1bW1hcnk6CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7X19uYXBpX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZV9pcnFvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7LAogICAgJiMzNDtuZXRpZl9zZXRfdGhyZWFkZWQmIzM0OywKICAgICYjMzQ7X19uYXBpX3NjaGVkdWxlJiMzNDssCiAgICAmIzM0O19fbmFwaV9zY2hlZHVsZV9pcnFvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODY1OGM1NzJmMTg5OTU5MjU5YWZhNTZhNDkyZTIzZTc3ZWZlOGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03ODc2LDExICYjNDM7Nzg3NiwxNCBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczoKJiM0MzsJCSAqIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28gYSB0aHJlYWQKJiM0MzsJCSAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS4KJiM0MzsJCSAqLwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJaWYgKCFyZXBvbGwpCiAJCQlicmVhazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODAKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2Rldi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgLiBJdCYjMzk7cyBub3cgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keS4KCk15IGluaXRpYWwgdGhvdWdodD8gVGhpcyBpcyBhIENQVSBob2cgZml4LCBwbGFpbiBhbmQgc2ltcGxlLiBXZSYjMzk7cmUgcHJldmVudGluZyBhIHRocmVhZCBmcm9tIG1vbm9wb2xpemluZyB0aGUgQ1BVIHdoZW4gaXQmIzM5O3MgY29uc3RhbnRseSBmaW5kaW5nIHdvcmssIGV2ZW4gd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCBkZWNpZGVzIG5vdCB0byBzY2hlZHVsZSByaWdodCBhd2F5LiBUaGUgZ29hbCBpcyB0byBlbnN1cmUgdGhlIHRocmVhZCB5aWVsZHMgYmFjayB0byB0aGUgc2NoZWR1bGVyLgoKSeKAmW0gcGxlYXNlZCB0byBzZWUgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGVpdGhlci4gQmFzZWQgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEtNU0FOIGlzIGNvbXBsZXRlbHkgaXJyZWxldmFudCBoZXJlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRocmVhZCBzY2hlZHVsaW5nLCBhbmQgd2UmIzM5O2xsIGNhdGNoIGFueSBwcm9ibGVtcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogS0FTQU4sIExPQ0tERVAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHdhdGNoZG9nLiBUaGUgd2F0Y2hkb2cgaXMgdGhlIHJlYWwgaGVybyBoZXJlLCBzaW5jZSBpdCBjYW4gZmxhZyB0aGUgQ1BVIGhvZ2dpbmcgYmVoYXZpb3IuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIE5BUEkgdGhyZWFkIGdyYWNlZnVsbHkgeWllbGRzIHRoZSBDUFUgYWZ0ZXIgZWFjaCBsb29wIGl0ZXJhdGlvbiwgZXZlbiBpZiBpdCBpbW1lZGlhdGVseSBmaW5kcyBtb3JlIHdvcmsuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiBjb250aW51b3VzIGV4ZWN1dGlvbiB3aXRob3V0IHlpZWxkaW5nIGlzIGEgcmVjaXBlIGZvciB3YXRjaGRvZyB0aW1lb3V0cyBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBvbGxpbmcgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGxgIG9yIGBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBwcmV2ZW50cyB0aGUgTkFQSSB0aHJlYWQgZnJvbSBob2dnaW5nIHRoZSBDUFUgYW5kIHRyaWdnZXJpbmcgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBpdCBjb250aW51b3VzbHkgZmluZHMgd29yayBidXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuIFRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIHRocmVhZCBzY2hlZHVsaW5nIGFuZCBDUFUgeWllbGRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgQ1BVIHN0YWxscyBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgd2F0Y2hkb2dzIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0MS44MjkyMDY4MjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIzMzkwNDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgbG9vcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBjaGFuZ2luZyB0aGUgc2NoZWR1bGluZyBiZWhhdmlvciBieSB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyBjb25kX3Jlc2NoZWQoKSBvbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgTkFQSSB0aHJlYWRzIHlpZWxkIHRoZSBDUFUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjQxLjgyOTIxNDA5NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNTQ1OTMwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTQ6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03ODc2LDExICs3ODc2LDE0IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG4gXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbi1cXHRcXHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xcbi1cXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XFxuK1xcdFxcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXFxuIFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxcbitcXHRcXHQgKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIGEgdGhyZWFkXFxuK1xcdFxcdCAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXBvbGwpXFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0My4yNTU0OTg0ODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzYyMTgzMzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2NThjNTcyZjE4OTk1OTI1OWFmYTU2YTQ5MmUyM2U3N2VmZThlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE0OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggZWNlNjcwMDUzNmQ5Yi4uODg0YWEyZGNhZGJlYyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc4NzYsMTEgKzc4NzYsMTQgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4rXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXG4gXHRcdFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XG4tXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdH1cbitcbitcdFx0LyogWWllbGQgb24gZXZlcnkgZXhpdCBmcm9tIHRoZSBsb29wLCBub3Qgb25seSB3aGVuIGl0IGl0ZXJhdGVzOlxuK1x0XHQgKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIGEgdGhyZWFkXG4rXHRcdCAqIHRoYXQga2VlcHMgZmluZGluZyB3b3JrIHdvdWxkIG5ldmVyIGdpdmUgdXAgdGhlIENQVS5cbitcdFx0ICovXG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRpZiAoIXJlcG9sbClcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjQzLjI1NTQ5OTgzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjMyMDg2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQVBJIFRocmVhZGVkIFBvbGxpbmcgTG9vcCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9jb3JlL2Rldi5jYC4gSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBhYm91dCBtb3ZpbmcgYGNvbmRfcmVzY2hlZCgpYCBvdXRzaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2sgdGllZCB0byBgcmVwb2xsYCBhbmQgYGJ1c3lfcG9sbF9sYXN0X3FzYC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIHRoZSBpbnRlbnQgaXMgdG8gaGF2ZSBpdCBleGVjdXRlIG9uICpldmVyeSogaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBvciB3aGVuIGV4aXRpbmcgdGhlIGxvb3AsIHJhdGhlciB0aGFuIGp1c3QgY29uZGl0aW9uYWxseS5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBOQVBJIHRocmVhZGVkIHBvbGxpbmcgcGFydCwgb3BlcmF0ZXMuIEl0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBOQVBJIHRocmVhZHMgYXJlIHNjaGVkdWxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiBDUFUgdXRpbGl6YXRpb24gYW5kIGxhdGVuY3kgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgYXNzb2NpYXRlZCBjb250ZXh0IHdpdGhpbiB0aGUgZGV2aWNlIGRyaXZlciBhbmQgc2VlIGhvdyB0aGlzIGNoYW5nZSBpcyBleHBlY3RlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpZiBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNDo0Ni42Nzg3MTIzMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODk1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV90aHJlYWRlZF9wb2xsX2xvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzgxNz1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg0MC1cXG5uZXQvY29yZS9kZXYuYzo3ODQxOnN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5uZXQvY29yZS9kZXYuYy03ODQyLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc4OTY9c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MTYtXFxubmV0L2NvcmUvZGV2LmM6NzkxNzpcXHRcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFxcdTAwMjZsYXN0X3FzIDogTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtNzkxOC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzIxNT1zdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzIxOC1cXG5uZXQvY29yZS9kZXYuYzoxMzIxOTpcXHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2csIE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMjIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NDYuNzI0NjExNDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MjgzMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRoaXMgU2NoZWR1bGluZyBDaGFuZ2U6IEEgU3RyYXRlZ2ljIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCB3aGljaCBpcyBjYWxsZWQgYnkgYm90aCBgbmFwaV90aHJlYWRlZF9wb2xsYCBhbmQgYHJ1bl9iYWNrbG9nX25hcGlgLiBJdCdzIGEga2V5IG5ldHdvcmtpbmcgZnVuY3Rpb24sIHNvIGltbWVkaWF0ZWx5IG15IGV4cGVydCBpbnN0aW5jdCBraWNrcyBpbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5TY2hlZHVsaW5nIGNoYW5nZXMgYXJlICpub3RvcmlvdXMqIHRvIGZ1enouIFRoZXkncmUgaGFyZCB0byB0cmlnZ2VyIGluIGEgbWVhbmluZ2Z1bCB3YXkuIEhvd2V2ZXIsIHRoaXMgaXMgdGllZCB0byBOQVBJIHBvbGxpbmcsIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldHdvcmsgdHJhZmZpYy4gVGhhdCdzIGEgZ29vZCBzaWduLiBUaGUgdmVyeSBmYWN0IHRoYXQgdGhpcyB0b3VjaGVzIG9uIE5BUEkgaXMgZW50aWNpbmcgYmVjYXVzZSBOQVBJIGlzIHRoZSBuZXR3b3JraW5nIGtlcm5lbCBBUEkuXG5cblRoZW4gSSBwYXVzZWQuIFdhaXQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyBhICpjb3JlKiBrZXJuZWwgZnVuY3Rpb24uIFRoYXQgY2hhbmdlcyB0aGluZ3MuIEV2ZW4gdGhvdWdoIHRoZSBwYXRjaCBpcyBzbWFsbCwgaXQncyBmaXhpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBhIHdhdGNoZG9nIHdhcm5pbmcgb3IgQ1BVIGhvZ2dpbmcgaXNzdWUuIFRoYXQncyBhIGJpZyBkZWFsLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgYSBkZW5pYWwgb2Ygc2VydmljZSBhdCB0aGUgdmVyeSBsZWFzdC5cblxuQWxyaWdodCwgc28gdGhlIG5leHQgdGhpbmcgSSdtIGFza2luZyBteXNlbGYgaXMsIHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGZvY3VzIG9uPyBgbmFwaV90aHJlYWRlZF9wb2xsYCBvciBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIChzaW5jZSBpdCdzIGBzdGF0aWNgKT8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGlmIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIGFsc28gYHN0YXRpY2AuIFllcCwgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgYWxzbyBgc3RhdGljYC4gV2FpdCBhIHNlY29uZCwgYW5kIGBydW5fYmFja2xvZ19uYXBpYCBpcyBhbHNvIHN0YXRpYz9cblxuT2theSwgdGltZSB0byBjaGVjayB3aGVyZSBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyB1c2VkLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgcHJvbWlzaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjUyLjA5NzQ0Nzg2MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjczMzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTY0ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xcbm5ldC9jb3JlL2Rldi5jLTE2NDUtXFxubmV0L2NvcmUvZGV2LmM6MTY0NjpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKTtcXG5uZXQvY29yZS9kZXYuYy0xNjQ3LVxcbm5ldC9jb3JlL2Rldi5jPTE2NDg9c3RhdGljIGludCBuYXBpX2t0aHJlYWRfY3JlYXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE2NTUtXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6MTY1NjpcXHRuLVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIG4sIFxcXCJuYXBpLyVzLSVkXFxcIixcXG5uZXQvY29yZS9kZXYuYy0xNjU3LVxcdFxcdFxcdFxcdG4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgbi1cXHUwMDNlbmFwaV9pZCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MjkyPXN0YXRpYyB2b2lkIG5hcGlfc2NoZWR1bGVfcnBzKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTMwNS1cXG5uZXQvY29yZS9kZXYuYzo1MzA2OlxcdFxcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcXG5uZXQvY29yZS9kZXYuYy01MzA3LVxcdFxcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXFxubmV0L2NvcmUvZGV2LmMtNTMwOC1cXHRcXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo1MzA5OlxcdFxcdGlmICghbXlzZC1cXHUwMDNlaW5fbmV0X3J4X2FjdGlvbiBcXHUwMDI2XFx1MDAyNiAhbXlzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsKVxcbm5ldC9jb3JlL2Rldi5jLTUzMTAtXFx0XFx0XFx0X19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03ODE3PXN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03ODQwLVxcbm5ldC9jb3JlL2Rldi5jOjc4NDE6c3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTc4NDItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg1NS1cXHRcXHRzZCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhKTtcXG5uZXQvY29yZS9kZXYuYzo3ODU2OlxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xcbm5ldC9jb3JlL2Rldi5jLTc4NTctXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03ODYxLVxcbm5ldC9jb3JlL2Rldi5jOjc4NjI6XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbm5ldC9jb3JlL2Rldi5jLTc4NjMtXFx0XFx0YmFycmllcigpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg5NS1cXG5uZXQvY29yZS9kZXYuYzo3ODk2OnN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXFxubmV0L2NvcmUvZGV2LmMtNzg5Ny17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy03OTE2LVxcbm5ldC9jb3JlL2Rldi5jOjc5MTc6XFx0XFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AobmFwaSwgd2FudF9idXN5X3BvbGwgPyBcXHUwMDI2bGFzdF9xcyA6IE5VTEwpO1xcbm5ldC9jb3JlL2Rldi5jLTc5MTgtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMyMTU9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMyMTgtXFxubmV0L2NvcmUvZGV2LmM6MTMyMTk6XFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoXFx1MDAyNnNkLVxcdTAwM2ViYWNrbG9nLCBOVUxMKTtcXG5uZXQvY29yZS9kZXYuYy0xMzIyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjUyLjE0NDE4NjcxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTI1NTU1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsYCBLZXJuZWwgVGhyZWFkKipcblxuQWxyaWdodCwgc28gYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgZGVmaW5pdGVseSBhIGt0aHJlYWQgZnVuY3Rpb24sIHRoYXQncyBjbGVhciBlbm91Z2guIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhIGJpdCBiZXR0ZXIuIFRoZSBjbHVlIGlzIHRoYXQgYG5hcGlfa3RocmVhZF9jcmVhdGVgIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgY3JlYXRpb24uIFRoYXQncyBteSBzdGFydGluZyBwb2ludC4gTm93IEkgd2FudCB0byBzZWUgKndoZXJlKiB0aGlzIGBuYXBpX2t0aHJlYWRfY3JlYXRlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBpbnZva2VkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhpcyB0aHJlYWRlZCBwb2xsaW5nIG1lY2hhbmlzbSBpcyBzZXQgdXAgYW5kIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjU0LjkzNjc0NTE2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA2NjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX2t0aHJlYWRfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE2NDY9c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XFxubmV0L2NvcmUvZGV2LmMtMTY0Ny1cXG5uZXQvY29yZS9kZXYuYzoxNjQ4OnN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxubmV0L2NvcmUvZGV2LmMtMTY0OS17XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03MjA5PWludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjEzLVxcdFxcdGlmICghbmFwaS1cXHUwMDNldGhyZWFkKSB7XFxubmV0L2NvcmUvZGV2LmM6NzIxNDpcXHRcXHRcXHRpbnQgZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTtcXG5uZXQvY29yZS9kZXYuYy03MjE1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzI0MT1pbnQgbmV0aWZfc2V0X3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjUxLVxcdFxcdFxcdGlmICghbmFwaS1cXHUwMDNldGhyZWFkKSB7XFxubmV0L2NvcmUvZGV2LmM6NzI1MjpcXHRcXHRcXHRcXHRlcnIgPSBuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpO1xcbm5ldC9jb3JlL2Rldi5jLTcyNTMtXFx0XFx0XFx0XFx0aWYgKGVycikge1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MDMtXFx0aWYgKG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhkZXYsIG5hcGkpKVxcbm5ldC9jb3JlL2Rldi5jOjc2MDQ6XFx0XFx0aWYgKG5hcGlfa3RocmVhZF9jcmVhdGUobmFwaSkpXFxubmV0L2NvcmUvZGV2LmMtNzYwNS1cXHRcXHRcXHRkZXYtXFx1MDAzZXRocmVhZGVkID0gTkVUREVWX05BUElfVEhSRUFERURfRElTQUJMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE0OjU0Ljk4MjgxNjQ5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDYzOTcxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVGhyZWFkZWQgTkFQSSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhyZWFkZWQgTkFQSS4uLiB0aGF0J3MgYSBrZXkgZmVhdHVyZSwgcmlnaHQ/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGN1cnJlbnQgc3RhdGUuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgdGhpbmcgZW5hYmxlZCBieSBkZWZhdWx0PyBJIGNhbid0IGp1c3QgYXNzdW1lIGFueXRoaW5nLiBCZXN0IHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBjaGVja2luZyB0aGlzIGNvbmZpZyBpcyB3aXRoIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjdXJyZW50bHkgc2V0dXAuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSdsbCBjaGVjay4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NTcuODI5MjE2MzM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX2dldF90aHJlYWRlZF9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzU2ND12b2lkIG5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc2MDItXFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NzYwMzpcXHRpZiAobmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKGRldiwgbmFwaSkpXFxubmV0L2NvcmUvZGV2LmMtNzYwNC1cXHRcXHRpZiAobmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTQ6NTcuODc0MzgzMjA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTk1ODk3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqVHJhY2luZyBEb3duIGBuYXBpX2dldF90aHJlYWRlZF9jb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyBwcm9kdWN0aXZlIHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGhlYWRlcnMgYW5kIHNvdXJjZSBmaWxlcyBmb3IgdGhlIE5vZGUuanMgYWRkLW9uIEFQSSAoTi1BUEkpLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBOLUFQSSBsaWJyYXJ5LCBidXQgaXQncyBhbHdheXMgYmVzdCB0byB2ZXJpZnkuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBuYXZpZ2F0aW5nIHRoZSBOb2RlLmpzIHNvdXJjZSB0cmVlIG9yIHBvc3NpYmx5IGEgZGVkaWNhdGVkIE4tQVBJIGhlYWRlciBmaWxlLiBMZXQncyBzdGFydCBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTowMC43NzM5NzY0MTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjUxMDU0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03NTY0PXZvaWQgbmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzYwMi1cXHQgKi9cXG5uZXQvY29yZS9kZXYuYzo3NjAzOlxcdGlmIChuYXBpX2dldF90aHJlYWRlZF9jb25maWcoZGV2LCBuYXBpKSlcXG5uZXQvY29yZS9kZXYuYy03NjA0LVxcdFxcdGlmIChuYXBpX2t0aHJlYWRfY3JlYXRlKG5hcGkpKVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MzY4PXN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZFxcbm5ldC9jb3JlL2Rldi5oOjM2OTpuYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbm5ldC9jb3JlL2Rldi5oLTM3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjAyLjU5OTA4ODI4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU5ODc1MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnYCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZ2AgYW5kLCBmcmFua2x5LCBJIG5lZWQgdG8gam9nIG15IG1lbW9yeSBvbiBleGFjdGx5IHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGNvcmUuIFNwZWNpZmljYWxseSwgSSBrbm93IGl0IGlzIGEgZnVuY3Rpb24sIGFuZCBJIHdpbGwgYmUgbG9va2luZyB0byBnZXQgdGhlIHRocmVhZGVkIGNvbmZpZ3VyYXRpb24uIEdpdmVuIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZSBtb3N0IHJlbGV2YW50IGRlZmluaXRpb24gd2lsbCBiZSBpbiBgbmV0L2NvcmUvZGV2LmhgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aGVyZS4gSSB3aWxsIGhhdmUgdG8gbG9vayB0byBnZXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjExLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MDUuMzU4OTY1NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY4OlxcdHN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZFxcbiAzNjk6XFx0bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4gMzcwOlxcdHtcXG4gMzcxOlxcdFxcdGlmIChuLVxcdTAwM2Vjb25maWcpXFxuIDM3MjpcXHRcXHRcXHRyZXR1cm4gbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZDtcXG4gMzczOlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZXRocmVhZGVkO1xcbiAzNzQ6XFx0fVxcbiAzNzU6XFx0XFxuIDM3NjpcXHRpbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxcbiAzNzc6XFx0XFx0XFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjA1LjM1OTA0ODA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDc5NjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQncyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRocmVhZGVkIE5BUEkgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgdGhyZWFkZWQgTkFQSSwgdGhhdCdzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMsIGdvb2QgdG8ga25vdy5cIiBCdXQgdGhlbiBJIHNlZSBzb21ldGhpbmcgdGhhdCB0cmlnZ2VycyBhIGRlZXBlciBkaXZlLiBgcnVuX2JhY2tsb2dfbmFwaWAg4oCTIHRoYXQgcmluZ3MgYSBiZWxsISBJdCBhbHNvIGNhbGxzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIGFuZCB0aGF0J3MgdGhlIGNydWNpYWwgbGluay4gTm93IHRoYXQgdGhlIGBydW5fYmFja2xvZ19uYXBpYCBmdW5jdGlvbiBpcyBwcmVzZW50LCB0aGUga2V5IHF1ZXN0aW9ucyBzdGFydCBmb3JtaW5nOiBJcyBgcnVuX2JhY2tsb2dfbmFwaWAgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0/IElzIHRoZXJlIGEgcmVhc29uIGl0IGlzIHRoZXJlPyBMZXQgbWUgZGlnIGludG8gdGhhdCBgcnVuX2JhY2tsb2dfbmFwaWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBmbG93IGJldHRlciB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTowOC42NjcwMTU2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3Mjk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnVuX2JhY2tsb2dfbmFwaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz0xMzIwNz1zdGF0aWMgaW50IGJhY2tsb2dfbmFwaV9zaG91bGRfcnVuKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMzIxNC1cXG5uZXQvY29yZS9kZXYuYzoxMzIxNTpzdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXFxubmV0L2NvcmUvZGV2LmMtMTMyMTYte1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMyMzE9c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMyMzMtXFx0LnRocmVhZF9zaG91bGRfcnVuXFx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcXG5uZXQvY29yZS9kZXYuYzoxMzIzNDpcXHQudGhyZWFkX2ZuXFx0XFx0PSBydW5fYmFja2xvZ19uYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTEzMjM1LVxcdC50aHJlYWRfY29tbVxcdFxcdD0gXFxcImJhY2tsb2dfbmFwaS8ldVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjA4LjcxMzc1MDc1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg2MTUxMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBiYWNrbG9nX3RocmVhZHNgJ3MgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYGJhY2tsb2dfdGhyZWFkc2AgaXMgaWRlbnRpZmllZCBhcyBhbiBgc21wX2hvdHBsdWdfdGhyZWFkYC4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIHNwZWNpZmljIGNoYXJhY3RlcmlzdGljcyBhbmQgaW1wbGljYXRpb25zIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWdnaW5nIHdpdGhpbiB0aGUga2VybmVsJ3MgU01QIChTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZykgZnJhbWV3b3JrLiBLbm93aW5nIGl0J3Mgb2YgdGhpcyB0eXBlLCBJIHdhbnQgdG8gcGluIGRvd24gZXhhY3RseSB3aGVyZSB0aGlzIHRocmVhZCBpcyByZWdpc3RlcmVkLiBVbmRlcnN0YW5kaW5nIGl0cyByZWdpc3RyYXRpb24gcG9pbnQgaXMgY3J1Y2lhbCBmb3IgdHJhY2luZyBpdHMgbGlmZWN5Y2xlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdHMgZW50cnkgcG9pbnQgaXMgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0IHV0aWxpemVzIGF0IGluaXRpYWxpemF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgaG90cGx1ZyBldmVudCBoYW5kbGluZyBhbmQgc2NoZWR1bGluZy4gSXQgd2lsbCBsaWtlbHkgcmV2ZWFsIGNyaXRpY2FsIGRldGFpbHMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHJlc3BvbnNpYmlsaXRpZXMgd2l0aGluIHRoZSBzeXN0ZW0ncyBydW50aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MTEuNzk5OTA1NjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc1OTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWNrbG9nX3RocmVhZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MjAxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKmRldl9pbmRleF9oYXNoKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0yMDctXFxubmV0L2NvcmUvZGV2LmM6MjA4OnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9GQUxTRSh1c2VfYmFja2xvZ190aHJlYWRzX2tleSk7XFxubmV0L2NvcmUvZGV2LmMtMjA5LVxcbm5ldC9jb3JlL2Rldi5jPTIxMD1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyhjaGFyICphcmcpXFxubmV0L2NvcmUvZGV2LmMtMjExLXtcXG5uZXQvY29yZS9kZXYuYzoyMTI6XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNnVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy0yMTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0yMTU9ZWFybHlfcGFyYW0oXFxcInRocmVhZF9iYWNrbG9nX25hcGlcXFwiLCBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkcyk7XFxubmV0L2NvcmUvZGV2LmMtMjE2LVxcbm5ldC9jb3JlL2Rldi5jOjIxNzpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMjE4LXtcXG5uZXQvY29yZS9kZXYuYzoyMTk6XFx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVzZV9iYWNrbG9nX3RocmVhZHNfa2V5KTtcXG5uZXQvY29yZS9kZXYuYy0yMjAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjIzLVxcbm5ldC9jb3JlL2Rldi5jOjIyNDpzdGF0aWMgYm9vbCB1c2VfYmFja2xvZ190aHJlYWRzKHZvaWQpXFxubmV0L2NvcmUvZGV2LmMtMjI1LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTIzMT1zdGF0aWMgaW5saW5lIHZvaWQgYmFja2xvZ19sb2NrX2lycV9zYXZlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMjM3LVxcdFxcdGxvY2FsX2lycV9zYXZlKCpmbGFncyk7XFxubmV0L2NvcmUvZGV2LmM6MjM4OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yMzktXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX2xvY2tfaXJxX2Rpc2FibGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxubmV0L2NvcmUvZGV2LmMtMjQ0LXtcXG5uZXQvY29yZS9kZXYuYzoyNDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JQUykgfHwgdXNlX2JhY2tsb2dfdGhyZWFkcygpKVxcbm5ldC9jb3JlL2Rldi5jLTI0Ni1cXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjUxPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfcmVzdG9yZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTI1Ni1cXHR9IGVsc2Uge1xcbm5ldC9jb3JlL2Rldi5jOjI1NzpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUlBTKSB8fCB1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmMtMjU4LVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MjYzPXN0YXRpYyBpbmxpbmUgdm9pZCBiYWNrbG9nX3VubG9ja19pcnFfZW5hYmxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkKVxcbm5ldC9jb3JlL2Rldi5jLTI2NC17XFxubmV0L2NvcmUvZGV2LmM6MjY1OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SUFMpIHx8IHVzZV9iYWNrbG9nX3RocmVhZHMoKSlcXG5uZXQvY29yZS9kZXYuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZC1cXHUwMDNlaW5wdXRfcGt0X3F1ZXVlLmxvY2spO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NDk2NT1zdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00OTgwLVxcdFxcdGlmICh0aHJlYWQpIHtcXG5uZXQvY29yZS9kZXYuYzo0OTgxOlxcdFxcdFxcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkgXFx1MDAyNlxcdTAwMjYgdGhyZWFkID09IHJhd19jcHVfcmVhZChiYWNrbG9nX25hcGkpKVxcbm5ldC9jb3JlL2Rldi5jLTQ5ODItXFx0XFx0XFx0XFx0Z290byB1c2VfbG9jYWxfbmFwaTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTUyOTI9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01Mjk3LVxcdGlmIChzZCAhPSBteXNkKSB7XFxubmV0L2NvcmUvZGV2LmM6NTI5ODpcXHRcXHRpZiAodXNlX2JhY2tsb2dfdGhyZWFkcygpKSB7XFxubmV0L2NvcmUvZGV2LmMtNTI5OS1cXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz01MzE3PXZvaWQga2lja19kZWZlcl9saXN0X3B1cmdlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy01MzIxLVxcbm5ldC9jb3JlL2Rldi5jOjUzMjI6XFx0aWYgKHVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xcbm5ldC9jb3JlL2Rldi5jLTUzMjMtXFx0XFx0YmFja2xvZ19sb2NrX2lycV9zYXZlKHNkLCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NjYzMj1zdGF0aWMgdm9pZCBuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTY2MzYtXFxubmV0L2NvcmUvZGV2LmM6NjYzNzpcXHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcXHUwMDI2XFx1MDAyNiByZW1zZCkge1xcbm5ldC9jb3JlL2Rldi5jLTY2MzgtXFx0XFx0c2QtXFx1MDAzZXJwc19pcGlfbGlzdCA9IE5VTEw7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02NjQ5PXN0YXRpYyBib29sIHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02NjUxLSNpZmRlZiBDT05GSUdfUlBTXFxubmV0L2NvcmUvZGV2LmM6NjY1MjpcXHRyZXR1cm4gIXVzZV9iYWNrbG9nX3RocmVhZHMoKSBcXHUwMDI2XFx1MDAyNiBzZC1cXHUwMDNlcnBzX2lwaV9saXN0O1xcbm5ldC9jb3JlL2Rldi5jLTY2NTMtI2Vsc2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyNzIyPXN0YXRpYyBpbnQgZGV2X2NwdV9kZWFkKHVuc2lnbmVkIGludCBvbGRjcHUpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjc2Ny1cXG5uZXQvY29yZS9kZXYuYzoxMjc2ODpcXHRpZiAoIXVzZV9iYWNrbG9nX3RocmVhZHMoKSkge1xcbm5ldC9jb3JlL2Rldi5jLTEyNzY5LSNpZmRlZiBDT05GSUdfUlBTXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzIyMj1zdGF0aWMgdm9pZCBiYWNrbG9nX25hcGlfc2V0dXAodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjMwLVxcbm5ldC9jb3JlL2Rldi5jOjEzMjMxOnN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG5uZXQvY29yZS9kZXYuYy0xMzIzMi1cXHQuc3RvcmVcXHRcXHRcXHQ9IFxcdTAwMjZiYWNrbG9nX25hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMzI0Mz1zdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjk5LVxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2Rldi5jOjEzMzAwOlxcdGlmICh1c2VfYmFja2xvZ190aHJlYWRzKCkpXFxubmV0L2NvcmUvZGV2LmM6MTMzMDE6XFx0XFx0c21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKFxcdTAwMjZiYWNrbG9nX3RocmVhZHMpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMzAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNToxMS44NDc2NzI5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU3NDE4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5BUEkgVGhyZWFkaW5nIExvb3AqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGluIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAuIFRoaXMgaXMgdXNlZCBieSBib3RoIHJlZ3VsYXIgTkFQSSB0aHJlYWRzIGFuZCB0aG9zZSB0aGF0IGFyZSBoYW5kbGluZyBiYWNrbG9nLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjaGFuZ2UgdG8gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LCBuYW1lbHkgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbCBsb29wLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZXhwbG9yaW5nIGlmIGZ1enppbmcgaXQgaXMgYSBnb29kIGlkZWEuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncy5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBhIGNvbmZpZyBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2UnbGwgbmVlZCBgQ09ORklHX05FVGAsIGJ1dCB0aGF0J3MgYSBnaXZlbiDigJMgaXQncyBhbHdheXMgZW5hYmxlZCBmb3IgYW55IG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eS4gTm8gc3BlY2lmaWMgTkFQSS1yZWxhdGVkIGNvbmZpZyBvcHRpb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLiBOQVBJIGlzIHNvIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2sgd29ya3MsIHRoZXJlJ3Mgbm90IHVzdWFsbHkgYW55IG1vZHVsYXJpdHkgdG8gaXQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuXG5cbldhaXQsIGxvb2tpbmcgZGVlcGVyIGludG8gdGhpcywgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG5hcGlfdGhyZWFkZWRfcG9sbGAgYW5kIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRocmVhZGVkIE5BUEkgYmVoYXZpb3IgaXMgaW5pdGlhdGVkIGVpdGhlciB3aGVuIHNvbWVvbmUgY2FsbHMgYG5hcGlfc2V0X3RocmVhZGVkYCBvciBgbmV0aWZfc2V0X3RocmVhZGVkYC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGEgY29uZmlnIGZvciB0aHJlYWRlZCBOQVBJLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjE2LjMwNTA5NTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcwODk4NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03MTYxPXN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcxOTgtXFxubmV0L2NvcmUvZGV2LmM6NzE5OTpzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cXHRcXHRcXHRcXHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIwOC1cXG5uZXQvY29yZS9kZXYuYzo3MjA5OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIxMC1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIzNC1cXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG5uZXQvY29yZS9kZXYuYzo3MjM1OlxcdFxcdG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYy03MjM2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzI2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFxcdTAwMjZkZXYtXFx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpXFxubmV0L2NvcmUvZGV2LmM6NzI2NTpcXHRcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03MjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzQ4Nj1zdGF0aWMgdm9pZCBuYXBpX3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MDUtXFxubmV0L2NvcmUvZGV2LmM6NzUwNjpcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZCkpO1xcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MzY5PW5hcGlfZ2V0X3RocmVhZGVkX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0zNzUtXFxubmV0L2NvcmUvZGV2Lmg6Mzc2OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4sXFxubmV0L2NvcmUvZGV2LmgtMzc3LVxcdFxcdCAgICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWQpO1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzNy1cXHRcXHR0aHJlYWRlZCA9IG5sYV9nZXRfdWludChpbmZvLVxcdTAwM2VhdHRyc1tORVRERVZfQV9OQVBJX1RIUkVBREVEXSk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMzg6XFx0XFx0cmV0ID0gbmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzM5LVxcdFxcdGlmIChyZXQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5PTM1PWRlZiBuYXBpX2xpc3RfY2hlY2sobmYpIC1cXHUwMDNlIE5vbmU6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHk6NTE6ZGVmIG5hcGlfc2V0X3RocmVhZGVkKG5mKSAtXFx1MDAzZSBOb25lOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ubF9uZXRkZXYucHktNTItICAgIFxcXCJcXFwiXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weT0zNjk9ZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weS0zNzUtICAgICAgICAgICAgICBuYXBpX2xpc3RfY2hlY2ssXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25sX25ldGRldi5weTozNzY6ICAgICAgICAgICAgICBuYXBpX3NldF90aHJlYWRlZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmxfbmV0ZGV2LnB5LTM3Ny0gICAgICAgICAgICAgIGRldl9zZXRfdGhyZWFkZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjE4LjA3NTk5OTExNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkxODU2NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBUaHJlYWRlZCBOQVBJKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBUaHJlYWRlZCBOQVBJIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGl0IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHVzaW5nIG5ldGxpbmsgKG5ldGRldi1nZW5sKS4gVGhlIGB0aHJlYWRfYmFja2xvZ19uYXBpYCBib290IHBhcmFtZXRlciBhbHNvIHNlZW1zIHRvIGtpY2sgdGhpbmdzIG9mZiB3aXRoIGB1c2VfYmFja2xvZ190aHJlYWRzKClgLiBObyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG5lZWRlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgLSBpdOKAmXMgY29yZSBuZXR3b3JraW5nLCByaWdodD9cblxuQWxyaWdodCwgbW92aW5nIG9uLCBpdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcsIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIG5ldyBob29rcy4gTGV0J3MgZGlnIGEgYml0IGRlZXBlci4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMuIGBuYXBpX3RocmVhZGVkX3BvbGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBpdCBydW5zIGFzIGEga3RocmVhZC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0J3MgKnN0YXRpYyo/IEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgaGVyZS4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcz8gRG9lcyBgbmFwaV9zZXRfdGhyZWFkZWRgIGdldCBleHBvcnRlZCBhbnl3aGVyZT8gR290dGEgY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBvbiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNToyMi4yNjc4NTg4NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTc3ODQyMjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MjQuNDY1NjUzNjE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njg1NjQzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXRpZl9zZXRfdGhyZWFkZWRgKipcblxuT2theSwgc28gdGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG5ldGlmX3NldF90aHJlYWRlZGAuIEkgd2FudCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKldoeSogYXJlIHdlIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBhIHJlY2VudCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHdlJ3JlIGludmVzdGlnYXRpbmc/IE9yIHBlcmhhcHMgYSBuZXcgZmVhdHVyZSB0aGF0J3MgYmVpbmcgaW50ZWdyYXRlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGluZm9ybSBob3cgZGVlcCBJIG5lZWQgdG8gZGlnLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGlzIGxpa2VseSBvbiBpdHMgY29uY3VycmVuY3kgaW1wbGljYXRpb25zLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRhdGEgc3RydWN0dXJlcywgZXNwZWNpYWxseSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHNlbWFudGljcy4gV2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IEFyZSB0aGV5IHBlci1uZXRkZXYsIGdsb2JhbCwgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gQW55IHBvdGVudGlhbCBmb3IgbG9jayBjb250ZW50aW9uPyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nIHJhY2UgY29uZGl0aW9ucyBhdCB0aGlzIHBvaW50ISBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgdGhyZWFkLXNhZmUuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY29tbW9uIGdvdGNoYXMsIGxpa2UgcG90ZW50aWFsIGRlYWRsb2NrcywgbGl2ZWxvY2tzLCBvciBldmVuIHNpbXBsZSBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW9zLiBJIGtub3cgc29tZSBhcmNoaXRlY3R1cmVzIGhhdmUgc3BlY2lmaWMgbWVtb3J5IG9yZGVyaW5nIHJlcXVpcmVtZW50czsgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGNvZGUgaGFuZGxlcyB0aGVtIGNvcnJlY3RseSwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggcmVsYXhlZCBtZW1vcnkgbW9kZWxzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZCBhbmQgY2FuIHByb3ZpZGUgdGhyZWFkIHNhZmV0eS5cblxuVWx0aW1hdGVseSwgSSdtIGNoZWNraW5nIGlmIHRoaXMgY29kZSBpcyBzb2xpZCBhbmQgaWYgaXQncyBvcGVyYXRpbmcgc2FmZWx5IGFuZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjI4LjAzNDIyMTk4MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMDA4NDcxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmV0aWZfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6MzAuMjU0MzEzOTkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODM3NzI3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBOQVBJIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gbmV0d29yayBkZXZpY2UgTkFQSSBjb25maWd1cmF0aW9uLCBvciBhdCBsZWFzdCBhIHNldHRpbmcgdGhhdCBpbXBhY3RzIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG5ldGxpbmsgaW50ZXJmYWNlIGNvZGUuIEkgc3VzcGVjdCB0aGUgZnVuY3Rpb24gSSdtIGFmdGVyLCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvbmUsIGlzIHByb2JhYmx5IG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGtlcm5lbCBleHBvc2VzIE5BUEkgcmVsYXRlZCBzZXR0aW5ncywgYW5kIEkgYmVsaWV2ZSBuZXRsaW5rIGlzIHRoZSByb3V0ZSBpdCB0YWtlcywgc28gSSdsbCBzdGFydCBkaWdnaW5nIHRoZXJlLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBtYW5hZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjMzLjIzODA5MDAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTM1MzA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfbmFwaV9zZXRfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRkZXYtZ2VubC5jPTMyNj1zdGF0aWMgaW50XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMjc6bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMjgte1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zNjE9aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM3My1cXHRpZiAobmFwaSkge1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6Mzc0OlxcdFxcdGVyciA9IG5ldGRldl9ubF9uYXBpX3NldF9jb25maWcobmFwaSwgaW5mbyk7XFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNzUtXFx0XFx0bmV0ZGV2X3VubG9jayhuYXBpLVxcdTAwM2VkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTozNC44ODk0NDg0MDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMjYyODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YC4gUmlnaHQgYXdheSwgdGhlIG5hbWUgc2NyZWFtcyBcIm5ldGxpbmsgaGFuZGxlcixcIiB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCBmb3Igc29tZXRoaW5nIGRlYWxpbmcgd2l0aCBOQVBJICh0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciBBUEkpIGFuZCBuZXRsaW5rLiBJdCdzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiB0aGF0J3MgZ29pbmcgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgd2hlbiB3ZSByZWNlaXZlIGEgc3BlY2lmaWMgbmV0bGluayBtZXNzYWdlIHJlbGF0ZWQgdG8gTkFQSSBjb25maWd1cmF0aW9uIG9yIG9wZXJhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyB0aGluZyBpcyBzdGF0aWMuIEluIGtlcm5lbCBjb2RlLCB0aGF0IGRldGFpbCBpcyBpbmNyZWRpYmx5IGltcG9ydGFudCBmb3Igc2NvcGUgYW5kIHBvdGVudGlhbCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgbW9kdWxlLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIGdpdmVzIG1lIGEgdmFsdWFibGUgY2x1ZSBhYm91dCBpdHMgaW50ZW5kZWQgdXNlOiBpcyBpdCBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIHdpdGhpbiB0aGUga2VybmVsIG9yIG1heWJlIGV2ZW4gYW5vdGhlciBtb2R1bGU/IFRoYXQnbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXRsaW5rIGFuZCBOQVBJIGluZnJhc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gZGlnIGluIGFuZCBzZWUgaWYgaXQncyBnb3QgYSBgc3RhdGljYCBrZXl3b3JkIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTozOS4yMTIwODAxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzQwMTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM9MTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgbmV0ZGV2X25sX29wc1tdID0ge1xcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmMtMjI2LVxcdFxcdC5jbWRcXHRcXHQ9IE5FVERFVl9DTURfTkFQSV9TRVQsXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwtZ2VuLmM6MjI3OlxcdFxcdC5kb2l0XFx0XFx0PSBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdCxcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uYy0yMjgtXFx0XFx0LnBvbGljeVxcdFxcdD0gbmV0ZGV2X25hcGlfc2V0X25sX3BvbGljeSxcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oPTM3PWludCBuZXRkZXZfbmxfYmluZF9yeF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLWdlbi5oOjM4OmludCBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC1nZW4uaC0zOS1pbnQgbmV0ZGV2X25sX2JpbmRfdHhfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MzI3PW5ldGRldl9ubF9uYXBpX3NldF9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjAtXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozNjE6aW50IG5ldGRldl9ubF9uYXBpX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zNjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo0MC44MDU0ODcyMzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NzY1NTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIE5BUEkgYW5kIE5ldHdvcmsgRHJpdmVyIEludGVyYWN0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgZHJpdmVyIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIG1hcCB0aGVtIG91dCBpbiBteSBoZWFkLiBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGlzIHRoZSBmaXJzdCBvbmUgdGhhdCBqdW1wcyBvdXQuIEl0J3MgKm5vdCogc3RhdGljLCBzbyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBBUEkgdGhhdCBsZXRzIHVzZXJzcGFjZSBpbnRlcmFjdCB3aXRoIE5BUEkgKE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgUG9sbCkgZnJvbSBhIE5ldGxpbmsgY29udGV4dCwgcHJlc3VtYWJseSB0byBtYW5hZ2Ugb3IgY29uZmlndXJlIE5BUEkgc2V0dGluZ3MuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC5cblxuVGhlbiB0aGVyZSdzIHRoZSBjb3JlIHRyaWdnZXI6IE5BUEkgdGhyZWFkZWQgcG9sbGluZyBpcyAqZHJpdmVuKiBieSBpbmNvbWluZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQncyB0aGUgaGVhcnRiZWF0LCB0aGUgcmVhc29uIE5BUEkgZXhpc3RzLiBUcmFmZmljIGFycml2ZXMsIGFuZCBOQVBJJ3MgbWVjaGFuaXNtIGdldHMga2lja2VkIGludG8gYWN0aW9uLlxuXG5Ob3csIGxldCBtZSB0aGluayBhYm91dCBgbmFwaV9zY2hlZHVsZV9ycHNgLiBUaGF0J3Mgc3RhdGljLCBzbyBpdOKAmXMgY2xlYXJseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIFJQUyAtIFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIC0gaXMgYWxsIGFib3V0IGxvYWQgYmFsYW5jaW5nIGFjcm9zcyBDUFVzLiBUaGlzIGlzIGxpa2VseSB1c2VkIGJ5IE5BUEkgdG8gZGlyZWN0IGluY29taW5nIHBhY2tldHMgdG93YXJkcyBhIHBhcnRpY3VsYXIgQ1BVLCBwcmVzdW1hYmx5IGJhc2VkIG9uIGEgaGFzaC4gSSdkIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoYXQncyBwbHVtYmVkIGluLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBzdWdnZXN0cyBpdCdzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBkcml2ZXIsIG9yIGNvcmUgTkFQSSBsb2dpYy5cblxuRmluYWxseSwgdGhlcmUncyBgX19uYXBpX3NjaGVkdWxlYC4gVGhhdOKAmXMgYW5vdGhlciBrZXkgZnVuY3Rpb24uIFRoZSBkb3VibGUgdW5kZXJzY29yZSBwcmVmaXggaXMgYSBjb252ZW50aW9uIHRoYXQgc3VnZ2VzdHMgdGhpcyBpcyBpbnRlbmRlZCBmb3IgKmludGVybmFsKiBkcml2ZXIgdXNlLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGJ5IHVzZXJzcGFjZS4gSXQncyBwcm9iYWJseSB0aGUgY29yZSBzY2hlZHVsaW5nIHByaW1pdGl2ZSwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSAqc2NoZWR1bGluZyogdGhlIE5BUEkgcG9sbCBpbiB0aGUgZmlyc3QgcGxhY2UsIGxpa2VseSBieSBhZGRpbmcgaXQgdG8gYSBydW5xdWV1ZSBvciBzaW1pbGFyLiBJJ2QgZ3Vlc3MgdGhhdCBgbmFwaV9zY2hlZHVsZV9ycHNgIGlzIGEgaGlnaGVyLWxldmVsIHdyYXBwZXIgdGhhdCBjYWxscyBgX19uYXBpX3NjaGVkdWxlYCBhZnRlciBwZXJoYXBzIGRvaW5nIHNvbWUgQ1BVIGFmZmluaXR5IGNhbGN1bGF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGZsb3cgb2YgYSBOQVBJIHBvbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NDUuMzUzMTQ1OTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMTAxNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmFwaV9zY2hlZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3ODYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdD0xMjk9dG8gSVJRIGJlaW5nIGF1dG8tbWFza2VkIGJ5IHRoZSBkZXZpY2UpIHNob3VsZCB1c2UgdGhlIG5hcGlfc2NoZWR1bGVfcHJlcCgpXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0OjEzMDphbmQgX19uYXBpX3NjaGVkdWxlKCkgY2FsbHM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25hcGkucnN0LTEzMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdC0xMzYtICAgICAgLyogc2NoZWR1bGUgYWZ0ZXIgbWFza2luZyB0byBhdm9pZCByYWNlcyAqL1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uYXBpLnJzdDoxMzc6ICAgICAgX19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ2LVxcdTAwM2VuYXBpKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmFwaS5yc3QtMTM4LSAgfVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdD03Mz1uYXBpX2NvbXBsZXRlX2RvbmUoKSDkvJrph4rmlL7lrp7kvovnmoTmiYDmnInmnYPjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3QtMTAxLeaYvuW8j+Wxj+iUveS4reaWreeahOmpseWKqOeoi+W6j++8iOiAjOmdnuiuvuWkh+iHquWKqOWxj+iUvSBJUlHvvInlupTkvb/nlKggbmFwaV9zY2hlZHVsZV9wcmVwKCkg5ZKMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdDoxMDI6X19uYXBpX3NjaGVkdWxlKCkg6LCD55So77yaXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbmV0d29ya2luZy9uYXBpLnJzdC0xMDMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0LTEwOC0gICAgICAvKiDlnKjlsY/olL3lkI7osIPluqbku6Xpgb/lhY3nq57kuokgKi9cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9uZXR3b3JraW5nL25hcGkucnN0OjEwOTogICAgICBfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnYtXFx1MDAzZW5hcGkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL25ldHdvcmtpbmcvbmFwaS5yc3QtMTEwLSAgfVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jPTg0NjI9aXJxcmV0dXJuX3QgcmVjZWl2ZV9jb250ZXh0X2ludGVycnVwdF9uYXBpKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmMtODQ2OS1cXHRcXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChyY2QtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9jaGlwLmM6ODQ3MDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHJjZC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvY2hpcC5jLTg0NzEtXFx0XFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW4uYz0zOTg9c3RhdGljIGlycXJldHVybl90IHJjYXJfY2FuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2Nhbi5jLTQxOC1cXHRcXHRcXHR3cml0ZWIocHJpdi1cXHUwMDNlaWVyLCBcXHUwMDI2cHJpdi1cXHUwMDNlcmVncy1cXHUwMDNlaWVyKTtcXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2Nhbi5jOjQxOTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuLmMtNDIwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYz0xMjY3PXN0YXRpYyB2b2lkIHJjYXJfY2FuZmRfaGFuZGxlX2dsb2JhbF9yZWNlaXZlKHN0cnVjdCByY2FyX2NhbmZkX2dsb2JhbCAqZ3ByaXYsIHUzMiBjaClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9yY2FyL3JjYXJfY2FuZmQuYy0xMjgyLVxcdFxcdFxcdFxcdFxcdCAgICAgUkNBTkZEX1JGQ0NfUkZJRSk7XFxuZHJpdmVycy9uZXQvY2FuL3JjYXIvcmNhcl9jYW5mZC5jOjEyODM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9jYW4vcmNhci9yY2FyX2NhbmZkLmMtMTI4NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdmlydGlvX2Nhbi5jPTgzPXN0YXRpYyB2b2lkIHZpcnRxdWV1ZV9uYXBpX3NjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmMtODctXFx0XFx0dmlydHF1ZXVlX2Rpc2FibGVfY2IodnEpO1xcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmM6ODg6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2Nhbi92aXJ0aW9fY2FuLmMtODktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM9MTc4MD10eXBob29uX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk1LVxcdFxcdHR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKGlvYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmM6MTc5NjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC8zY29tL3R5cGhvb24uYy0xNzk3LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGFwdGVjL3N0YXJmaXJlLmM9MTI5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkYXB0ZWMvc3RhcmZpcmUuYy0xMzE4LVxcdFxcdFxcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKFxcdTAwMjZucC1cXHUwMDNlbmFwaSkpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jOjEzMTk6XFx0XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZucC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRhcHRlYy9zdGFyZmlyZS5jLTEzMjAtXFx0XFx0XFx0XFx0ZW5hYmxlID0gcmVhZGwoaW9hZGRyICsgSW50ckVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM9NTA0PXN0YXRpYyBpcnFyZXR1cm5fdCBhbHRlcmFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVyYS9hbHRlcmFfdHNlX21haW4uYy01MjUtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJ4ZG1hX2lycV9sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlcmEvYWx0ZXJhX3RzZV9tYWluLmM6NTI2OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWx0ZXJhL2FsdGVyYV90c2VfbWFpbi5jLTUyNy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYz0xMDc3PXN0YXRpYyBpcnFyZXR1cm5fdCBhbWQ4MTExZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExMy1cXHRcXHRcXHQvKiBTY2hlZHVsZSBhIHBvbGxpbmcgcm91dGluZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hbWQ4MTExZS5jOjExMTQ6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZscC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMtMTExNS1cXHRcXHR9IGVsc2UgaWYgKGludHJlbjAgXFx1MDAyNiBSSU5URU4wKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jPTI1NTc9cGNuZXQzMl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYy0yNjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmM6MjYxMDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmxwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jLTI2MTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jPTM2Nz1zdGF0aWMgdm9pZCB4Z2JlX2lzcl9iaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNDM3LVxcdFxcdFxcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM6NDM4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTQzOS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz01Mzc9c3RhdGljIGlycXJldHVybl90IHhnYmVfZG1hX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTMtXFx0XFx0LyogVHVybiBvbiBwb2xsaW5nICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYzo1NTQ6XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2Y2hhbm5lbC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYy01NTUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYz01NjY9c3RhdGljIHZvaWQgeGdiZV90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMtNTg3LVxcdFxcdC8qIFR1cm4gb24gcG9sbGluZyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmM6NTg4OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jLTU4OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUtdjIvbWFpbi5jPTEyNz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdlX2lycShjb25zdCBpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzItXFx0XFx0eGdlX2ludHJfZGlzYWJsZShwZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYzoxMzM6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwZGF0YS1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lLXYyL21haW4uYy0xMzQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jPTIxMz1zdGF0aWMgaXJxcmV0dXJuX3QgeGdlbmVfZW5ldF9yeF9pcnEoY29uc3QgaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMTgtXFx0XFx0ZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jOjIxOTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnJ4X3JpbmctXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYy0yMjAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jPTM1ND1zdGF0aWMgaXJxcmV0dXJuX3QgYXJjX2VtYWNfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hcmMvZW1hY19tYWluLmMtMzY5LVxcdFxcdFxcdGFyY19yZWdfY2xyKHByaXYsIFJfRU5BQkxFLCBSWElOVF9NQVNLIHwgVFhJTlRfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXJjL2VtYWNfbWFpbi5jOjM3MDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9lbWFjX21haW4uYy0zNzEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmM9MTYzMz1zdGF0aWMgdm9pZCBhdGwxY19pbnRyX3J4X3R4KHN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyLCB1MzIgc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0NS1cXHRcXHRcXHRpbnRyX21hc2sgXFx1MDAyNj0gfmF0bDFjX3FyZWdzW2ldLnJ4X2lzcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYzoxNjQ2OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcnJkX3JpbmdbaV0ubmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxYy9hdGwxY19tYWluLmMtMTY0Ny1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjUzLVxcdFxcdFxcdGludHJfbWFzayBcXHUwMDI2PSB+YXRsMWNfcXJlZ3NbaV0udHhfaXNyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jOjE2NTQ6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V0cGRfcmluZ1tpXS5uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYy0xNjU1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jPTEyNzc9c3RhdGljIGlycXJldHVybl90IGF0bDFlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jLTEzNDYtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFlL2F0bDFlX21haW4uYzoxMzQ3OlxcdFxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxZS9hdGwxZV9tYWluLmMtMTM0OC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jPTgxPXN0YXRpYyB2b2lkIGJjbWFzcF9pbnRyMl9oYW5kbGluZyhzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYsIHUzMiBzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTg1LVxcdFxcdFxcdGJjbWFzcF9lbmFibGVfcnhfaXJxKGludGYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmM6ODY6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2aW50Zi1cXHUwMDNlcnhfbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYy04Ny1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcC5jLTkyLVxcdFxcdFxcdGJjbWFzcF9lbmFibGVfdHhfaXJxKGludGYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwLmM6OTM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2aW50Zi1cXHUwMDNldHhfbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3AuYy05NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYz04ODc9c3RhdGljIGlycXJldHVybl90IGI0NF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMtOTE3LVxcdFxcdFxcdF9fYjQ0X2Rpc2FibGVfaW50cyhicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6OTE4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YnAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTkxOS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM9MTEwND1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtX3N5c3BvcnRfcnhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTI0LVxcdFxcdFxcdGludHJsMl8wX21hc2tfc2V0KHByaXYsIElOVFJMMl8wX1JETUFfTUJET05FKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTEyNTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTEyNi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmMtMTE0Ni1cXHRcXHRcXHRpbnRybDJfMF9tYXNrX3NldChwcml2LCByaW5nX2JpdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtc3lzcG9ydC5jOjExNDc6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ0eHItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTQ4LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYz0xMTU1PXN0YXRpYyBpcnFyZXR1cm5fdCBiY21fc3lzcG9ydF90eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtc3lzcG9ydC5jLTExNzgtXFx0XFx0XFx0aW50cmwyXzFfbWFza19zZXQocHJpdiwgQklUKHJpbmcpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY21zeXNwb3J0LmM6MTE3OTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZ0eHItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbXN5c3BvcnQuYy0xMTgwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYz0zMzYyPWJueDJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzkzLVxcdFxcdGJuYXBpLVxcdTAwM2VsYXN0X3N0YXR1c19pZHggPSBzYmxrLVxcdTAwM2VzdGF0dXNfaWR4O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYzozMzk0OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2Ym5hcGktXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYy0zMzk1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM9MzIxMj1zdGF0aWMgaXJxcmV0dXJuX3QgYmNtZ2VuZXRfaXNyMShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyMzgtXFx0XFx0XFx0YmNtZ2VuZXRfcnhfcmluZ19pbnRfZGlzYWJsZShyeF9yaW5nKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jOjMyMzk6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihcXHUwMDI2cnhfcmluZy1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vZ2VuZXQvYmNtZ2VuZXQuYy0zMjQwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmMtMzI1MS1cXHRcXHRcXHRiY21nZW5ldF90eF9yaW5nX2ludF9kaXNhYmxlKHR4X3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2dlbmV0L2JjbWdlbmV0LmM6MzI1MjpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZ0eF9yaW5nLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9nZW5ldC9iY21nZW5ldC5jLTMyNTMtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTE5NjM9c3RhdGljIGlycXJldHVybl90IHNibWFjX2ludHIoaW50IGlycSx2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmMtMTk5MC1cXHRcXHRcXHRfX3Jhd193cml0ZXEoMCwgc2MtXFx1MDAzZXNibV9pbXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoxOTkxOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2c2MtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0xOTkyLVxcdFxcdFxcdC8qIERlcGVuZCBvbiB0aGUgZXhpdCBmcm9tIHBvbGwgdG8gcmVlbmFibGUgaW50ciAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZC5jPTc0MT1ibmFkX25ldGlmX3J4X3NjaGVkdWxlX3BvbGwoc3RydWN0IGJuYWQgKmJuYWQsIHN0cnVjdCBibmFfY2NiICpjY2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9jYWRlL2JuYS9ibmFkLmMtNzQ2LVxcdGlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYzo3NDc6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYy03NDgtXFx0XFx0cnhfY3RybC1cXHUwMDNlcnhfc2NoZWR1bGUrKztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYi9zZ2UuYz0xNjUyPWlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jLTE2NjItXFx0XFx0XFx0aWYgKHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlcikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jOjE2NjM6XFx0XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMtMTY2NC1cXHRcXHRcXHRlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmM9NDE4PXN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmMtNDMxLVxcdFxcdFxcdHdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmM6NDMyOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmMtNDMzLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmM9MzE2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgYmVfaW50eChpbnQgaXJxLCB2b2lkICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTMxNzgtXFx0XFx0bnVtX2V2dHMgPSBldmVudHNfZ2V0KGVxbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYzozMTc5OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXFvLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jLTMxODAtXFx0XFx0aWYgKG51bV9ldnRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTg3PXN0YXRpYyBpcnFyZXR1cm5fdCB0c25lcF9pcnEoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTEwNC1cXHRcXHRcXHQvKiBzY2hlZHVsZSBhZnRlciBtYXNraW5nIHRvIGF2b2lkIHJhY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjEwNTpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXF1ZXVlWzBdLm5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL3RzbmVwX21haW4uYy0xMDYtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jPTExMj1zdGF0aWMgaXJxcmV0dXJuX3QgdHNuZXBfaXJxX3R4cngoaW50IGlycSwgdm9pZCAqYXJnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jLTExOS1cXHRcXHQvKiBzY2hlZHVsZSBhZnRlciBtYXNraW5nIHRvIGF2b2lkIHJhY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvdHNuZXBfbWFpbi5jOjEyMDpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnF1ZXVlLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci90c25lcF9tYWluLmMtMTIxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jPTIxOD1zdGF0aWMgaXJxcmV0dXJuX3QgbnBzX2VuZXRfaXJxX2hhbmRsZXIoczMyIGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMtMjI3LVxcdFxcdFxcdG5wc19lbmV0X3JlZ19zZXQocHJpdiwgTlBTX0VORVRfUkVHX0JVRl9JTlRfRU5BQkxFLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lemNoaXAvbnBzX2VuZXQuYzoyMjg6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lemNoaXAvbnBzX2VuZXQuYy0yMjktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9MjQ4OT1mZWNfZW5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMjUwMC1cXHRcXHRcXHR3cml0ZWwoMCwgZmVwLVxcdTAwM2Vod3AgKyBGRUNfSU1BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jOjI1MDE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZmZXAtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTI1MDItXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9NDgxNj1zdGF0aWMgaW50IGZlY19lbmV0X3hza193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBxdWV1ZSwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDgzMi1cXHRcXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2ZmVwLVxcdTAwM2VuYXBpKSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6NDgzMzpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtNDgzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYz0zMDA9ZnNfZW5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMwLVxcdFxcdFxcdGlmIChuYXBpX29rKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jOjMzMTpcXHRcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMtMzMyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmM9MjI1Nz1zdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9yZWNlaXZlKGludCBpcnEsIHZvaWQgKmdycF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3NS1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncnAtXFx1MDAzZWdycGxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIyNzY6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZncnAtXFx1MDAzZW5hcGlfcngpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI3Ny1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYz0yMjg4PXN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX3RyYW5zbWl0KGludCBpcnEsIHZvaWQgKmdycF9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjI5OS1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZncnAtXFx1MDAzZWdycGxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jOjIzMDA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZncnAtXFx1MDAzZW5hcGlfdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMtMjMwMS1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzA0Mz1zdGF0aWMgaXJxcmV0dXJuX3QgdWNjX2dldGhfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTMwNjctXFx0XFx0XFx0b3V0X2JlMzIodWNjZi1cXHUwMDNlcF91Y2NtLCB1Y2NtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozMDY4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2dWdldGgtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jLTMwNjktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTUwNj1oaXAwNF9tYWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy01NjMtXFx0XFx0XFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6NTY0OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTU2NS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM9NjY2PXN0YXRpYyBpcnFyZXR1cm5fdCBoaXAwNF9tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy02OTQtXFx0XFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6Njk1OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTY5Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM9NzAxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB0eF9kb25lKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTcxMC1cXHRcXHR3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0sgXFx1MDAyNiB+UkNWX0lOVCwgcHJpdi1cXHUwMDNlYmFzZSArIFBQRV9JTlRFTik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjcxMTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy03MTItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvbWFsLmM9MjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBtYWxfc2NoZWR1bGVfcG9sbChzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjYtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1hbC1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvbWFsLmM6MjY3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2bWFsLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9tYWwuYy0yNjgtXFx0fSBlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jPTE1NzA9c3RhdGljIGlycXJldHVybl90IGlibXZldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12ZXRoLmMtMTU3OS1cXHRcXHRXQVJOX09OKGxwYXJfcmMgIT0gSF9TVUNDRVNTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jOjE1ODA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdmV0aC5jLTE1ODEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2libXZuaWMuYz00MzMyPXN0YXRpYyBpcnFyZXR1cm5fdCBpYm12bmljX2ludGVycnVwdF9yeChpbnQgaXJxLCB2b2lkICppbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmMtNDM0Ni1cXHRcXHRkaXNhYmxlX3NjcnFfaXJxKGFkYXB0ZXIsIHNjcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9pYm12bmljLmM6NDM0NzpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGlbc2NycS1cXHUwMDNlc2NycV9udW1dKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vaWJtdm5pYy5jLTQzNDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jPTIxOTM9c3RhdGljIGlycXJldHVybl90IGUxMDBfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwLmMtMjIxNC1cXHRcXHRlMTAwX2Rpc2FibGVfaXJxKG5pYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMC5jOjIyMTU6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZuaWMtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAuYy0yMjE2LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYz0zNzQ2PXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmMtMzc3OC1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmM6Mzc3OTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYy0zNzgwLVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTc2Mz1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2koaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxNy1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTgxODpcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTgxOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM9MTgyOT1zdGF0aWMgaXJxcmV0dXJuX3QgZTEwMDBfaW50cihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xODk2LVxcdFxcdGFkYXB0ZXItXFx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYzoxODk3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYy0xODk4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYz0xOTQ2PXN0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaXhfcngoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTk2NS1cXHRcXHRhZGFwdGVyLVxcdTAwM2V0b3RhbF9yeF9wYWNrZXRzID0gMDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmM6MTk2NjpcXHRcXHRfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMtMTk2Ny1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYz04OTU9c3RhdGljIGlycXJldHVybl90IGlnYnZmX2ludHJfbXNpeF9yeChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdidmYvbmV0ZGV2LmMtOTExLVxcdFxcdGFkYXB0ZXItXFx1MDAzZXRvdGFsX3J4X3BhY2tldHMgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jOjkxMjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJ4X3JpbmctXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jLTkxMy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmM9MTk0PXN0YXRpYyB2b2lkIGxpYmV0aF94c2tfbmFwaV9zY2hlZCh2b2lkICppbmZvKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0xOTUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoxOTY6XFx0X19uYXBpX3NjaGVkdWxlX2lycW9mZihpbmZvKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgveHNrLmMtMTk3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYz0yMjM9dm9pZCBsaWJldGhfeHNrX3dha2V1cChjYWxsX3NpbmdsZV9kYXRhX3QgKmNzZCwgdTMyIHFpZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYzoyMzc6XFx0XFx0X19uYXBpX3NjaGVkdWxlKG5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC94c2suYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvam1lLmg9MzYzPXN0cnVjdCBqbWVfcmluZyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuaC0zOTMtI2RlZmluZSBKTUVfUlhfU0NIRURVTEUocHJpdikgXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oOjM5NDpcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5oLTM5NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYz00NzA9c3RhdGljIGlycXJldHVybl90IHhyeDIwMF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB0cilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2xhbnRpcV94cngyMDAuYy00NzUtXFx0XFx0bHRxX2RtYV9kaXNhYmxlX2lycShcXHUwMDI2Y2gtXFx1MDAzZWRtYSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX3hyeDIwMC5jOjQ3NjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNmNoLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfeHJ4MjAwLmMtNDc3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmM9MzQxNz1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnFfcngoaW50IGlycSwgdm9pZCAqX2V0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMtMzQyMy1cXHRcXHRtdGtfcnhfaXJxX2Rpc2FibGUoZXRoLCBldGgtXFx1MDAzZXNvYy1cXHUwMDNlcnguaXJxX2RvbmVfbWFzayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzozNDI0OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXRoLVxcdTAwM2VyeF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MjUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYz0zNDMwPXN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaGFuZGxlX2lycV90eChpbnQgaXJxLCB2b2lkICpfZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYy0zNDM2LVxcdFxcdG10a190eF9pcnFfZGlzYWJsZShldGgsIE1US19UWF9ET05FX0lOVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYzozNDM3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2ZXRoLVxcdTAwM2V0eF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jLTM0MzgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jPTc2OT1zdGF0aWMgaXJxcmV0dXJuX3QgbXRrX3N0YXJfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jLTc4Ny1cXHRcXHRpZiAocngpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3N0YXJfZW1hYy5jOjc4ODpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNnByaXYtXFx1MDAzZXJ4X25hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYy03ODktXFx0XFx0aWYgKHR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zdGFyX2VtYWMuYzo3OTA6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9uYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfc3Rhcl9lbWFjLmMtNzkxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21veGEvbW94YXJ0X2V0aGVyLmM9MzA5PXN0YXRpYyBpcnFyZXR1cm5fdCBtb3hhcnRfbWFjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jLTMyMS1cXHRcXHRcXHR3cml0ZWwocHJpdi1cXHUwMDNlcmVnX2ltciwgcHJpdi1cXHUwMDNlYmFzZSArIFJFR19JTlRFUlJVUFRfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbW94YS9tb3hhcnRfZXRoZXIuYzozMjI6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tb3hhL21veGFydF9ldGhlci5jLTMyMy1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYz0yMTgzPXN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmMtMjIxMC1cXHRcXHRuYXRzZW1pX2lycV9kaXNhYmxlKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmM6MjIxMTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25hdHNlbWkuYy0yMjEyLVxcdH0gZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jPTM2NjA9c3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEoaW50IGZvbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy0zNjgyLVxcdFxcdHdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6MzY4MzpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzY4NC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM9MzY5Mz1zdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vcHRpbWl6ZWQoaW50IGZvbywgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYy0zNzE1LVxcdFxcdHdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmM6MzcxNjpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm5wLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMtMzcxNy1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jPTk4Nj1zdGF0aWMgaXJxcmV0dXJuX3QgX19scGNfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jLTk5OS1cXHRpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2cGxkYXQtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jOjEwMDA6XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwbGRhdC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy0xMDAxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYz0xMjU4PXN0YXRpYyBpcnFyZXR1cm5fdCBwY2hfZ2JlX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29raS1zZW1pL3BjaF9nYmUvcGNoX2diZV9tYWluLmMtMTMxNy1cXHRcXHRcXHQvKiBTdGFydCBwb2xsaW5nIGZvciBOQVBJICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYzoxMzE4OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2YWRhcHRlci1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvcGNoX2diZS9wY2hfZ2JlX21haW4uYy0xMzE5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGEzeHh4LmM9MjE5OT1zdGF0aWMgaXJxcmV0dXJuX3QgcWwzeHh4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDUtXFx0XFx0aWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoXFx1MDAyNnFkZXYtXFx1MDAzZW5hcGkpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jOjIyNDY6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZxZGV2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxhM3h4eC5jLTIyNDctXFx0fSBlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYz0xMjU9c3RhdGljIGlycXJldHVybl90IGVtYWNfaXNyKGludCBfaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLmMtMTU0LVxcdFxcdFxcdGlycS1cXHUwMDNlbWFzayBcXHUwMDI2PSB+cnhfcS1cXHUwMDNlaW50cjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYzoxNTU6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZyeF9xLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMuYy0xNTYtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM9NjQ3PXN0YXRpYyBpcnFyZXR1cm5fdCByNjA0MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmMtNjc5LVxcdFxcdFxcdG1pc3IgXFx1MDAyNj0gfihSWF9JTlRTIHwgVFhfSU5UUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM6NjgwOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNmxwLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYy02ODEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz01Njg9c3RhdGljIGlycXJldHVybl90IGNwX2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYy02MDUtXFx0XFx0XFx0Y3B3MTZfZihJbnRyTWFzaywgY3Bfbm9yeF9pbnRyX21hc2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6NjA2OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2Y3AtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmMtNjA3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIxMzk9c3RhdGljIGlycXJldHVybl90IHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMTgwLVxcdFxcdFxcdFJUTF9XMTZfRiAoSW50ck1hc2ssIHJ0bDgxMzlfbm9yeF9pbnRyX21hc2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIxODE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMjE4Mi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYz0xMDMzPXN0YXRpYyBpcnFyZXR1cm5fdCBydGFzZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0Ni1cXHRpZiAobmFwaV9zY2hlZHVsZV9wcmVwKFxcdTAwMjZpdmVjLVxcdTAwM2VuYXBpKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX21haW4uYzoxMDQ3OlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2aXZlYy1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMtMTA0OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jPTEwNTU9c3RhdGljIGlycXJldHVybl90IHJ0YXNlX3FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEwNjgtXFx0aWYgKG5hcGlfc2NoZWR1bGVfcHJlcChcXHUwMDI2aXZlYy1cXHUwMDNlbmFwaSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmM6MTA2OTpcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNml2ZWMtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jLTEwNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jPTEyMDI9c3RhdGljIGJvb2wgcmF2Yl9xdWV1ZV9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xMjIwLVxcdFxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjEyMjE6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpW3FdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTEyMjItXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM9OTYxPXN0YXRpYyB2b2lkIHJzd2l0Y2hfcXVldWVfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NjktXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnJkZXYtXFx1MDAzZXByaXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM6OTcwOlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cmRldi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy05NzEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9NDgzPXN0YXRpYyBpcnFyZXR1cm5fdCBydHNuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYy00OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM6NDk5OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtNTAwLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTgzOD1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZXRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTE4NzMtXFx0XFx0XFx0XFx0ICAgICBFRVNJUFIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM6MTg3NDpcXHRcXHRcXHRfX25hcGlfc2NoZWR1bGUoXFx1MDAyNm1kcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0xODc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYz0xNjY5PXN0YXRpYyBpcnFyZXR1cm5fdCBzeGdiZV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4MC1cXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlZG1hLVxcdTAwM2VkaXNhYmxlX2RtYV9pcnEocHJpdi1cXHUwMDNlaW9hZGRyLCByeHEtXFx1MDAzZXF1ZXVlX25vKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zYW1zdW5nL3N4Z2JlL3N4Z2JlX21haW4uYzoxNjgxOlxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMtMTY4Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYz0xMDY3PXN0YXRpYyBpcnFyZXR1cm5fdCBlcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL2VwaWMxMDAuYy0xMDkyLVxcdFxcdFxcdGVwaWNfbmFwaV9pcnFfb2ZmKGRldiwgZXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvZXBpYzEwMC5jOjEwOTM6XFx0XFx0XFx0X19uYXBpX3NjaGVkdWxlKFxcdTAwMjZlcC1cXHUwMDNlbmFwaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9lcGljMTAwLmMtMTA5NC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM9MTUzMD1zdGF0aWMgaXJxcmV0dXJuX3Qgc21zYzkxMXhfaXJxaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTU4MC1cXHRcXHRcXHQvKiBTY2hlZHVsZSBhIE5BUEkgcG9sbCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYzoxNTgxOlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZShcXHUwMDI2cGRhdGEtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYy0xNTgyLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM9MTQzNz1zdGF0aWMgaXJxcmV0dXJuX3QgZW1hY19pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTQ3NC1cXHRcXHRcXHRlbWFjX2Rpc2FibGVfaW50ZXJydXB0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYzoxNDc1OlxcdFxcdFxcdF9fbmFwaV9zY2hlZHVsZV9pcnFvZmYoXFx1MDAyNnByaXYtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NwYWNlbWl0L2sxX2VtYWMuYy0xNDc2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzA2Nz1zdGF0aWMgaW50IHN0bW1hY19uYXBpX2NoZWNrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGNoYW4sIHUzMiBkaXIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMwODUtXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y2gtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NDYuOTc0MjUxOTA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTA2ODAzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBFeHBvcnRlZCBTeW1ib2xzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyBzb21ldGhpbmcgdGhhdCB0cmlnZ2VyZWQgYSBmbGFnLiBJIHRob3VnaHQgYF9fbmFwaV9zY2hlZHVsZWAgd2FzIGludGVybmFsLCBidXQgbm93IEknbSBzZWVpbmcgdGhhdCBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgaWYgYG5hcGlfc2NoZWR1bGVgIGl0c2VsZiBpcyBhbHNvIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGtleSBub3cuIEdvdHRhIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIG9yIHJlYXNzZXNzIHRoZSBzaXR1YXRpb24uIFRoaXMgY291bGQgaGF2ZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGlzIG1vZHVsZSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIE4tQVBJLiBUaGlzIGlzIGxpa2VseSBhbiBvdmVyc2lnaHQgdGhhdCBuZWVkcyBmdXJ0aGVyIHNjcnV0aW55LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE1OjUwLjE4NDkzNTY5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxNTI1ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5hcGlfc2NoZWR1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTY3MjQ9dm9pZCBfX25hcGlfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjczMS19XFxubmV0L2NvcmUvZGV2LmM6NjczMjpFWFBPUlRfU1lNQk9MKF9fbmFwaV9zY2hlZHVsZSk7XFxubmV0L2NvcmUvZGV2LmMtNjczMy1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY3NDM9Ym9vbCBuYXBpX3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjc2My19XFxubmV0L2NvcmUvZGV2LmM6Njc2NDpFWFBPUlRfU1lNQk9MKG5hcGlfc2NoZWR1bGVfcHJlcCk7XFxubmV0L2NvcmUvZGV2LmMtNjc2NS1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTY3NzY9dm9pZCBfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTY3ODItfVxcbm5ldC9jb3JlL2Rldi5jOjY3ODM6RVhQT1JUX1NZTUJPTChfX25hcGlfc2NoZWR1bGVfaXJxb2ZmKTtcXG5uZXQvY29yZS9kZXYuYy02Nzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo1Mi4zNTY0NzEyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTg3NDY5NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5BUEkgVGhyZWFkaW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgaW5zdHJ1bWVudCB0aGUgdGhyZWFkZWQgTkFQSSBsb29wIHdpdGggbXkgdG9vbHMuIEkgc2VlIHRoYXQgYF9fbmFwaV9zY2hlZHVsZWAgaXMgZXhwb3J0ZWQsIGJ1dCB0aGF0J3MgcmVhbGx5IGp1c3QgdGhlICpzdGFydGluZyogcG9pbnQ7IHRoZSBsb29wIGl0c2VsZiBpcyBkcml2ZW4gYnkgbmV0d29yayB0cmFmZmljLCBzbyB0aGF0J3Mgbm90IHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIG1hbmlwdWxhdGUuIE15IGdvYWwgaXMgdG8gZ2V0ICp0aHJlYWRlZCogTkFQSSBnb2luZy5cblxuSG1tLCBsZXQncyBzZWUuIElmIEkgd2FudCB0byBkaXJlY3RseSBjb250cm9sIHRoZSB0aHJlYWRlZCBsb29wLCBgbmFwaV90aHJlYWRlZF9wb2xsYCBsb29rcyBwcm9taXNpbmcuIFRoYXQncyAqdGhlKiBmdW5jdGlvbiBJJ20gaW50ZXJlc3RlZCBpbiBmb3IgdGhlIHRocmVhZGVkIHBhcnQsIG9yIHBvdGVudGlhbGx5IGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAg4oCTIHRoYXQgb25lIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciAqZW5hYmxpbmcqIHRocmVhZGVkIE5BUEkuIE9oLCB3YWl0LCBgbmFwaV90aHJlYWRlZF9wb2xsYCBpcyBzdGF0aWMuIFRoYXQgcHJlc2VudHMgYSBjaGFsbGVuZ2UgZm9yIHN5emthbGxlcjsgSSBuZWVkIHNvbWV0aGluZyBjYWxsYWJsZS4gSXMgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhIHN1aXRhYmxlIGZvY3VzIHBvaW50LCB0aGVuPyBZZXMsIGFic29sdXRlbHkhIFRoYXQncyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gaXQgaXMgaG93IHN5emthbGxlciBjYW4gZW5hYmxlIHRocmVhZGVkIE5BUEkuXG5cbkFsc28sIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgZWFybHkgc2V0dXAgcGFyYW1zLiBUaGVyZSdzIGBzZXR1cF9iYWNrbG9nX25hcGlfdGhyZWFkc2AsIGJ1dCBJIGNhbiBkZWFsIHdpdGggdGhhdCBsYXRlci5cblxuTGV0J3MgbWFrZSBzdXJlIGBuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdGAgaXMgYWNjZXNzaWJsZS4gR29vZCwgaXQncyBhIG5ldGxpbmsgaGFuZGxlcjsgdGhhdCdzIHJlYWNoYWJsZS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gZm9jdXMgb24gYG5hcGlfdGhyZWFkZWRfcG9sbGA/IFllcywgaXQncyB0aGUga3RocmVhZCBmdW5jdGlvbiwgc28gSSBjYW4gYXQgbGVhc3QgcmVhY2ggaXQuIFRob3VnaCwgc2luY2UgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgc3RhdGljLCBzeXprYWxsZXIgbWlnaHQgaGF2ZSB0cm91YmxlIGZvY3VzaW5nICpkaXJlY3RseSogb24gaXQuIEl0J3MgYmV0dGVyIGlmIEkgcHJvdmlkZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdG8gdGFyZ2V0LlxuXG5Ib2xkIG9uLCBidXQgd2FpdC4uLiBTeXprYWxsZXIgY2FuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSdyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCdzIGp1c3QgKmJldHRlciogdG8gZ2l2ZSBpdCBhIG5vbi1zdGF0aWMgb25lLiBPa2F5LCBsZXQncyBzZWUgaWYgYG5hcGlfc2V0X3RocmVhZGVkYCBpcyBub24tc3RhdGljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTU6NTguOTQzOTQzNTg5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXBpX3NldF90aHJlYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03MTYxPXN0YXRpYyB2b2lkIG5hcGlfc3RvcF9rdGhyZWFkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcxOTgtXFxubmV0L2NvcmUvZGV2LmM6NzE5OTpzdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIwMC1cXHRcXHRcXHRcXHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIwOC1cXG5uZXQvY29yZS9kZXYuYzo3MjA5OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxubmV0L2NvcmUvZGV2LmMtNzIxMC1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzIzNC1cXHRcXHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcXG5uZXQvY29yZS9kZXYuYzo3MjM1OlxcdFxcdG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYy03MjM2LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTcyNDE9aW50IG5ldGlmX3NldF90aHJlYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzI2NC1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG5hcGksIFxcdTAwMjZkZXYtXFx1MDAzZW5hcGlfbGlzdCwgZGV2X2xpc3QpXFxubmV0L2NvcmUvZGV2LmM6NzI2NTpcXHRcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobmFwaSwgdGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03MjY2LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzQ4Nj1zdGF0aWMgdm9pZCBuYXBpX3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MDUtXFxubmV0L2NvcmUvZGV2LmM6NzUwNjpcXHRXQVJOX09OX09OQ0UobmFwaV9zZXRfdGhyZWFkZWQobiwgbi1cXHUwMDNlY29uZmlnLVxcdTAwM2V0aHJlYWRlZCkpO1xcbm5ldC9jb3JlL2Rldi5jLTc1MDctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNTo1OC45ODk4MjQxMDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ1NDkyMjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOQVBJIFRocmVhZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlOiBJIHNlZSB0aGF0IGBuYXBpX3NldF90aHJlYWRlZGAsIGBuZXRpZl9zZXRfdGhyZWFkZWRgLCBhbmQgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBhcmUgYWxsIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLiBMZXQncyBhZGQgdGhvc2UsIGFsb25nIHdpdGggYF9fbmFwaV9zY2hlZHVsZWAgYW5kIGBfX25hcGlfc2NoZWR1bGVfaXJxb2ZmYCDigJMgdGhleSBzZWVtIHJlbGV2YW50IGFzIHdlbGwuXG5cbkkgc2hvdWxkIGRvdWJsZS1jaGVjayBmb3IgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBgQ09ORklHX05FVGAgaXMgdGhlIGJhc2VsaW5lLCBvZiBjb3Vyc2UsIGJ1dCBhbnl0aGluZyBlbHNlPyBOb3BlLCBub3RoaW5nIHN0YW5kcyBvdXQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGlzIGRvd246IFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGUgTkFQSSB0aHJlYWRlZCBwb2xsaW5nIGxvb3AsIHdoZXJlIHRoZSBzY2hlZHVsaW5nIGlzIG1vZGlmaWVkIGJ5IGZvcmNpbmcgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwgb24gKmV2ZXJ5KiBsb29wIGl0ZXJhdGlvbi4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlIGFuZCBkaXJlY3RseSBpbXBhY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgQ1BVIHRpbWUuXG5cblNvLCBoZXJlJ3MgbXkgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKlJlYXNvbmluZzoqKiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgTkFQSSB0aHJlYWQgQ1BVIHlpZWxkaW5nIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCwgYG5hcGlfc2V0X3RocmVhZGVkYCwgYG5ldGlmX3NldF90aHJlYWRlZGAsIGBfX25hcGlfc2NoZWR1bGVgLCBgX19uYXBpX3NjaGVkdWxlX2lycW9mZmBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFxbIF0gKGkuZS4gbm90aGluZyBzcGVjaWFsKVxuXG5Ib2xkIG9uIGEgc2VjLi4uIGBuYXBpX3NldF90aHJlYWRlZGAgaXNuJ3QgZXhwb3J0ZWQsIGV2ZW4gdGhvdWdoIGl0J3Mgbm9uLXN0YXRpYy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBub3QgYSBwcm9ibGVtLiAqSG1tLCogYXQgbGVhc3QgYG5ldGRldl9ubF9uYXBpX3NldF9kb2l0YCBpcyBhbHNvIG5vbi1zdGF0aWMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGBuZXRpZl9zZXRfdGhyZWFkZWRgIGlzIGV4cG9ydGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA0LjQ0NDc1MDUxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NDE1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTY6MDQuNDkxMzAwMjI5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzQ0Nzk1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIFZpc2liaWxpdHkgb2YgTi1BUEkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBGb2N1c1N5bWJvbHMgaGVyZSwgYW5kIHRoZSBmYWN0IHRoYXQgc29tZXRoaW5nIGlzbid0IGV4cG9ydGVkLCBidXQgYWxzbyBpc24ndCBzdGF0aWMsIGRvZXNuJ3QgcHJlc2VudCBhIHByb2JsZW0uIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIE4tQVBJIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZWlyIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNvZGUuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoYXQgYG5hcGlfdGhyZWFkZWRfcG9sbGAgaXMgbm9uLXN0YXRpYy4gTm9wZSwgaXQncyBzdGF0aWMuIE9rYXksIG9uZSBjaGVjayBkb25lLiBOb3csIGxldCdzIGxvb2sgYXQgYHJ1bl9iYWNrbG9nX25hcGlgLiBBbHJpZ2h0LCB0aGF0IG9uZSBpcyBhbHNvIHN0YXRpYy4gUmlnaHQsIGxldCdzIGRvdWJsZSBjaGVjayBgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXRgIGFuZCBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSB3ZWlyZG5lc3MgSSd2ZSBvdmVybG9va2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxOSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA3Ljc2NTc4MjYzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MzMwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl9ubF9uYXBpX3NldF9kb2l0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldGRldi1nZW5sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM2MC1cXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jOjM2MTppbnQgbmV0ZGV2X25sX25hcGlfc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTM2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE2OjA3Ljk5MTExOTYyNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg2MTc3ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2VzcyBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIE5hdHVyZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHNpdHVhdGlvbiBjbGVhcmx5IGlzbid0IHN0YXRpYy4gSXQncyBkeW5hbWljLCBjaGFuZ2luZywgb3IgYXQgbGVhc3QgY2FwYWJsZSBvZiBjaGFuZ2UuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGUga2V5IGhlcmUgaXMgdG8gZW1icmFjZSB0aGUgbm9uLXN0YXRpYyBlbGVtZW50LiBUaGlzIHJlcXVpcmVzIGEgc2hpZnQgaW4gbXkgdGhpbmtpbmcsIGFuZCBhcHByb2FjaC4gTm93IHRoYXQgSSBrbm93IHRoaXMsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cy4gSSB3aWxsIGRpY3RhdGUgd2hhdCB0aGUgb3V0Y29tZSBtdXN0IGJlLiBUaGUgb3V0Y29tZSBjYW5ub3QgYmUgc2V0LCBvciBsZWZ0IHRvIGNoYW5jZSwgb3IgcmFuZG9tbmVzcy5cblxuWW91ciBTdW1tYXJ5OlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg3NywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44NzczMDExWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfbmxfbmFwaV9zZXRfZG9pdFwiLFxuICAgIFwibmFwaV9zZXRfdGhyZWFkZWRcIixcbiAgICBcIm5ldGlmX3NldF90aHJlYWRlZFwiLFxuICAgIFwiX19uYXBpX3NjaGVkdWxlXCIsXG4gICAgXCJfX25hcGlfc2NoZWR1bGVfaXJxb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5BUEkgdGhyZWFkZWQgcG9sbGluZyBsb29wIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIGNoYW5naW5nIHRoZSBzY2hlZHVsaW5nIGJlaGF2aW9yIGJ5IHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpIG9uIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyBOQVBJIHRocmVhZHMgeWllbGQgdGhlIENQVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTY6MTAuODc3MzM0NTdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODU3NjU5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44Nzc3OTk2N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTg1Mjk2MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBwb2xsaW5nIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgcHJldmVudHMgdGhlIE5BUEkgdGhyZWFkIGZyb20gaG9nZ2luZyB0aGUgQ1BVIGFuZCB0cmlnZ2VyaW5nIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gaXQgY29udGludW91c2x5IGZpbmRzIHdvcmsgYnV0IGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLiBUaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyB0aHJlYWQgc2NoZWR1bGluZyBhbmQgQ1BVIHlpZWxkaW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB2YXJpYWJsZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIENQVSBzdGFsbHMgb3IgZGVhZGxvY2tzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHdhdGNoZG9ncyBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4NjU4YzU3MmYxODk5NTkyNTlhZmE1NmE0OTJlMjNlNzdlZmU4ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGVjZTY3MDA1MzZkOWIuLjg4NGFhMmRjYWRiZWMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03ODc2LDExICs3ODc2LDE0IEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRncm9fZmx1c2hfbm9ybWFsKFx1MDAyNm5hcGktXHUwMDNlZ3JvLCBIWiBcdTAwM2U9IDEwMDApO1xuIFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiBcbi1cdFx0LyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi9cbi1cdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykge1xuK1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4rXG4rXHRcdC8qIFlpZWxkIG9uIGV2ZXJ5IGV4aXQgZnJvbSB0aGUgbG9vcCwgbm90IG9ubHkgd2hlbiBpdCBpdGVyYXRlczpcbitcdFx0ICogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyBhIHRocmVhZFxuK1x0XHQgKiB0aGF0IGtlZXBzIGZpbmRpbmcgd29yayB3b3VsZCBuZXZlciBnaXZlIHVwIHRoZSBDUFUuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxMC44Nzc4MDAyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODUyNzMwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5BUEkgVGhyZWFkaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2Rldi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0IGNoZWNrcyBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgLiBJdCdzIG5vdyB1bmNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5LlxuXG5NeSBpbml0aWFsIHRob3VnaHQ/IFRoaXMgaXMgYSBDUFUgaG9nIGZpeCwgcGxhaW4gYW5kIHNpbXBsZS4gV2UncmUgcHJldmVudGluZyBhIHRocmVhZCBmcm9tIG1vbm9wb2xpemluZyB0aGUgQ1BVIHdoZW4gaXQncyBjb25zdGFudGx5IGZpbmRpbmcgd29yaywgZXZlbiB3aGVuIGBuYXBpX3RocmVhZF93YWl0KClgIGRlY2lkZXMgbm90IHRvIHNjaGVkdWxlIHJpZ2h0IGF3YXkuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGUgdGhyZWFkIHlpZWxkcyBiYWNrIHRvIHRoZSBzY2hlZHVsZXIuXG5cbknigJltIHBsZWFzZWQgdG8gc2VlIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgY29tcGxleGl0aWVzIGluIHRlcm1zIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIFRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZWl0aGVyLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgS01TQU4gaXMgY29tcGxldGVseSBpcnJlbGV2YW50IGhlcmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aHJlYWQgc2NoZWR1bGluZywgYW5kIHdlJ2xsIGNhdGNoIGFueSBwcm9ibGVtcyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogS0FTQU4sIExPQ0tERVAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHdhdGNoZG9nLiBUaGUgd2F0Y2hkb2cgaXMgdGhlIHJlYWwgaGVybyBoZXJlLCBzaW5jZSBpdCBjYW4gZmxhZyB0aGUgQ1BVIGhvZ2dpbmcgYmVoYXZpb3IuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgTkFQSSB0aHJlYWQgZ3JhY2VmdWxseSB5aWVsZHMgdGhlIENQVSBhZnRlciBlYWNoIGxvb3AgaXRlcmF0aW9uLCBldmVuIGlmIGl0IGltbWVkaWF0ZWx5IGZpbmRzIG1vcmUgd29yay4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IGNvbnRpbnVvdXMgZXhlY3V0aW9uIHdpdGhvdXQgeWllbGRpbmcgaXMgYSByZWNpcGUgZm9yIHdhdGNoZG9nIHRpbWVvdXRzIGFuZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjoxOTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNjoxOS4wNjMwNzcwNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IGF0IHRoZSBlbmQgb2YgdGhlIHBvbGxpbmcgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGxgIG9yIGBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBwcmV2ZW50cyB0aGUgTkFQSSB0aHJlYWQgZnJvbSBob2dnaW5nIHRoZSBDUFUgYW5kIHRyaWdnZXJpbmcgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBpdCBjb250aW51b3VzbHkgZmluZHMgd29yayBidXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuIFRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIHRocmVhZCBzY2hlZHVsaW5nIGFuZCBDUFUgeWllbGRpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHZhcmlhYmxlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgQ1BVIHN0YWxscyBvciBkZWFkbG9ja3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgd2F0Y2hkb2dzIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgcG9sbGluZyBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIHByZXZlbnRzIHRoZSBOQVBJIHRocmVhZCBmcm9tIGhvZ2dpbmcgdGhlIENQVSBhbmQgdHJpZ2dlcmluZyB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGl0IGNvbnRpbnVvdXNseSBmaW5kcyB3b3JrIGJ1dCBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy4gVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgdGhyZWFkIHNjaGVkdWxpbmcgYW5kIENQVSB5aWVsZGluZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdmFyaWFibGVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBDUFUgc3RhbGxzIG9yIGRlYWRsb2Nrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB3YXRjaGRvZ3Mgb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[1] Phase: Succeeded StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-14 21:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-14 21:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2] Phase: Succeeded StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-14 21:16:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 21:16:30 +0000 UTC FinishedAt: 2026-08-14 21:16:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgszgb/series-workflowgszgb-convert-artifact-3472966422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 21:16:40 +0000 UTC FinishedAt: 2026-08-14 21:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 21:16:40 +0000 UTC FinishedAt: 2026-08-14 21:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8cadc0c5-b3f5-45ad-a822-428e3c782898,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-workflowgszgb/series-workflowgszgb-convert-artifact-3472966422/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": "0a259ea2-38a4-4691-8bf0-5709d5be650b", "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-workflowgszgb/series-workflowgszgb-build-action-4158419628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 21:16:40 +0000 UTC FinishedAt: 2026-08-14 21:33:12 +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:*8cadc0c5-b3f5-45ad-a822-428e3c782898,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-workflowgszgb/series-workflowgszgb-convert-artifact-3472966422/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": "0a259ea2-38a4-4691-8bf0-5709d5be650b", "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-workflowgszgb/series-workflowgszgb-build-action-4158419628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 21:33:22 +0000 UTC FinishedAt: 2026-08-14 21:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 21:33:22 +0000 UTC FinishedAt: 2026-08-14 21:33:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 21:33:22 +0000 UTC FinishedAt: 2026-08-14 21:33:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 21:33:22 +0000 UTC FinishedAt: 2026-08-14 21:33:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgszgb/series-workflowgszgb-convert-artifact-18425513/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 21:33:32 +0000 UTC FinishedAt: 2026-08-14 21:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 21:33:32 +0000 UTC FinishedAt: 2026-08-14 21:35:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0a259ea2-38a4-4691-8bf0-5709d5be650b,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-workflowgszgb/series-workflowgszgb-build-action-4158419628/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-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 21:35:34 +0000 UTC FinishedAt: 2026-08-14 21:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 21:35:34 +0000 UTC FinishedAt: 2026-08-14 21:35:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 21:35:34 +0000 UTC FinishedAt: 2026-08-14 21:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 21:35:34 +0000 UTC FinishedAt: 2026-08-14 21:52:52 +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:*8cadc0c5-b3f5-45ad-a822-428e3c782898,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-workflowgszgb/series-workflowgszgb-convert-artifact-18425513/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": "b4d6bac9-aa73-48d5-a77a-80d74c780aba", "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-workflowgszgb/series-workflowgszgb-build-action-1874881413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 21:35:34 +0000 UTC FinishedAt: 2026-08-14 21:52:42 +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:*8cadc0c5-b3f5-45ad-a822-428e3c782898,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-workflowgszgb/series-workflowgszgb-convert-artifact-18425513/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": "b4d6bac9-aa73-48d5-a77a-80d74c780aba", "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-workflowgszgb/series-workflowgszgb-build-action-1874881413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 21:52:52 +0000 UTC FinishedAt: 2026-08-14 21:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 21:52:52 +0000 UTC FinishedAt: 2026-08-14 21:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 21:52:52 +0000 UTC FinishedAt: 2026-08-14 21:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 21:52:52 +0000 UTC FinishedAt: 2026-08-14 21:55:00 +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:*b4d6bac9-aa73-48d5-a77a-80d74c780aba,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-workflowgszgb/series-workflowgszgb-build-action-1874881413/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-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"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:*0a259ea2-38a4-4691-8bf0-5709d5be650b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4d6bac9-aa73-48d5-a77a-80d74c780aba,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-workflowgszgb/series-workflowgszgb-build-action-4158419628/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-workflowgszgb/series-workflowgszgb-build-action-1874881413/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-14 21:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-14 21:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"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-workflowgszgb/series-workflowgszgb-convert-artifact-3761938430/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-14 21:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 21:55:10 +0000 UTC FinishedAt: 2026-08-14 21:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 21:55:11 +0000 UTC FinishedAt: 2026-08-14 21:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 21:55:21 +0000 UTC FinishedAt: 2026-08-15 00:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgszgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_nl_napi_set_doit","napi_set_threaded","netif_set_threaded","__napi_schedule","__napi_schedule_irqoff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","series_id":"487214de-81d2-4e88-b406-d47e0cbd81fa","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 21:55:21 +0000 UTC FinishedAt: 2026-08-15 00:57:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0a259ea2-38a4-4691-8bf0-5709d5be650b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b4d6bac9-aa73-48d5-a77a-80d74c780aba,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-workflowgszgb/series-workflowgszgb-build-action-4158419628/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-workflowgszgb/series-workflowgszgb-build-action-1874881413/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-workflowgszgb/series-workflowgszgb-convert-artifact-3761938430/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,}