Name: series-workflowtgl7t Phase: Succeeded StartedAt: 2026-08-29 14:52:14 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[0] Phase: Succeeded StartedAt: 2026-08-29 14:52:14 +0000 UTC FinishedAt: 2026-08-29 15:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 14:52:14 +0000 UTC FinishedAt: 2026-08-29 15:51:40 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "4ac35d81-33dd-4d36-8c5f-660f6f051c2b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_cmsg_recv_offset" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5pbmRleCBhNTVlZjMyN2VjOTMyLi4wMWQyNjRlOGYzNGVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuQEAgLTE3NCw2ICYjNDM7MTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFmbGFncylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG4gXHRcdGlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9jbXNnX3JlY3Zfb2Zmc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGlwX2Ntc2dfcmVjdl9vZmZzZXQoKSB0byB2ZXJpZnkgdGhhdCB0aGUgSVAgaGVhZGVyIHZlcnNpb24gbWF0Y2hlcyBJUFZFUlNJT04gKElQdjQpIGJlZm9yZSBwYXJzaW5nIElQdjQgY29udHJvbCBtZXNzYWdlcyAoY21zZykgZnJvbSB0aGUgc2tiLiBUaGlzIGFmZmVjdHMgc29ja2V0IHJlY3Ztc2cgcHJvY2Vzc2luZyBhY3Jvc3MgSVB2NCBhbmQgZHVhbC1zdGFjayBJUHY2IHNvY2tldHMgYW5kIHByZXZlbnRzIG1hbGZvcm1lZCBvciBjcm9zcy1wcm90b2NvbCBoZWFkZXIgbWlzaW50ZXJwcmV0YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NGE1ZWVjMTU2ZmRmY2Q2MGVjZWNlYzc0ODVkNzNjY2ViNGU0NWY1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTU6NDQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBhNTVlZjMyN2VjOTMyLi4wMWQyNjRlOGYzNGVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAogCWlmICghZmxhZ3MpCiAJCXJldHVybjsKIAomIzQzOwlpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktJmd0O3ZlcnNpb24gIT0gSVBWRVJTSU9OKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBPcmRlcmVkIGJ5IHN1cHBvc2VkIHVzYWdlIGZyZXF1ZW5jeSAqLwogCWlmIChmbGFncyAmYW1wOyBJUF9DTVNHX1BLVElORk8pIHsKIAkJaXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTb2NrZXQgR2x1ZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFuZCBpdHMgY29udGV4dC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXBfY21zZ19yZWN2X29mZnNldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLSZndDt2ZXJzaW9uICE9IElQVkVSU0lPTikpIHJldHVybjtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNydWNpYWwgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IG1lYXN1cmUgcmVsYXRlZCB0byBJUHY0IHBhY2tldCBoYW5kbGluZywgcHJvYmFibHkgZGVzaWduZWQgdG8gYXZvaWQgcHJvY2Vzc2luZyBtYWxmb3JtZWQgcGFja2V0cy4gSXQmIzM5O3MgYSBjb25kaXRpb25hbCBjaGVjayBvbiB0aGUgSVAgaGVhZGVyIHZlcnNpb24sIGVuc3VyaW5nIGl0JiMzOTtzIHRoZSBleHBlY3RlZCB2ZXJzaW9uIChgSVBWRVJTSU9OYCwgcHJlc3VtYWJseSA0KS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGVycm9yIGNvbmRpdGlvbiB3YXMgYWRkcmVzc2VkIHdoZXJlIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCBJUCBwYWNrZXQgd2FzIHNvbWVob3cgZ2V0dGluZyB0aHJvdWdoLgoKSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBkb2VzIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hlY2suIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbnRyb2wgbWVzc2FnZSBmbGFncyBsaWtlIGBJUF9DTVNHX1BLVElORk9gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBuZXcgY2hlY2sgcHJldmVudHMgc29tZSBzb3J0IG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGxpa2UgYSBjcmFzaCwgb3IgYW4gaW5mb3JtYXRpb24gbGVhaywgaWYgYW4gaW52YWxpZCBwYWNrZXQgd2l0aCBhIG5vbi1JUHY0IElQIHZlcnNpb24gd2VyZSBzb21laG93IHJlY2VpdmVkIGJ5IHRoZSBzb2NrZXQuIFNvLCB0aGUgZ29hbCBpcyB0byBzZWUgd2hhdCBraW5kIG9mIGRhbWFnZSBjb3VsZCBiZSBjYXVzZWQgYnkgYmFkIHBhY2tldHMgbWFraW5nIHRoZWlyIHdheSBpbnRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiAxNjI6XHRcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAxNjM6XHRcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xuIDE2NDpcdFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xuIDE2NTpcdFxuIDE2NjpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXHUwMDI2c2luKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIDE3MDpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbiAxNzE6XHR7XG4gMTcyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKTtcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICghZmxhZ3MpXG4gMTc1Olx0XHRcdHJldHVybjtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4gMTc4Olx0XHRcdHJldHVybjtcbiAxNzk6XHRcbiAxODA6XHRcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gMTgxOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIDE4MjpcdFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4gMTgzOlx0XG4gMTg0Olx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfUEtUSU5GTztcbiAxODU6XHRcdFx0aWYgKCFmbGFncylcbiAxODY6XHRcdFx0XHRyZXR1cm47XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG4gMTkwOlx0XHRcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RUTDtcbiAxOTM6XHRcdFx0aWYgKCFmbGFncylcbiAxOTQ6XHRcdFx0XHRyZXR1cm47XG4gMTk1Olx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVE9TKSB7XG4gMTk4Olx0XHRcdGlwX2Ntc2dfcmVjdl90b3MobXNnLCBza2IpO1xuIDE5OTpcdFxuIDIwMDpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RPUztcbiAyMDE6XHRcdFx0aWYgKCFmbGFncylcbiAyMDI6XHRcdFx0XHRyZXR1cm47XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcbiAyMDY6XHRcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xuIDIwNzpcdFxuIDIwODpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFQ1ZPUFRTO1xuIDIwOTpcdFx0XHRpZiAoIWZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaXBfY21zZ19yZWN2X29mZnNldGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBmdW5jdGlvbmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuLCBjcnVjaWFsbHksIHdoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBmb3IuIElzIGl0IGhhbmRsaW5nIGFuY2lsbGFyeSBkYXRhPyBBcmUgd2UgZGVhbGluZyB3aXRoIElQIG9wdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgY29udGV4dCBpcyBrZXkgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSB3aWxsIGluZm9ybSBteSBhc3N1bXB0aW9ucyBhcm91bmQgcG90ZW50aWFsIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgc2VhcmNoIGFuZCBzZWUgd2hhdCB0aGUgaW1tZWRpYXRlIGxhbmRzY2FwZSBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2Ntc2dfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcC5oPTgxNT12b2lkIGlwdjRfcGt0aW5mb19wcmVwYXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBkcm9wX2RzdCk7XG5pbmNsdWRlL25ldC9pcC5oOjgxNjp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9pcC5oLTgxNy1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbmV0L2lwLmg9ODM1PXZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCxcbi0tXG5pbmNsdWRlL25ldC9pcC5oLTgzNy1cbmluY2x1ZGUvbmV0L2lwLmg6ODM4OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvaXAuaC04Mzkte1xuaW5jbHVkZS9uZXQvaXAuaDo4NDA6XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2tiLVx1MDAzZXNrLCBza2IsIDAsIDApO1xuaW5jbHVkZS9uZXQvaXAuaC04NDEtfVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjU0OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9wa3RpbmZvKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTUte1xuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjItXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYzOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NC17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02OC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6Njk6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3RvcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTcwLXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTczLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo3NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfb3B0cyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTc1LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTgzLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo4NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcmV0b3B0cyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtODUtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTAyOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMy17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMTItXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjExMzpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfY2hlY2tzdW0oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMTQtXHRcdFx0XHQgIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTI4LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjk6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3NlY3VyaXR5KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTMwLXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0Ni1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ4LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE2OC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTY5OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwLVx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE4MS1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE4MjpcdFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODMtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODktXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE5MDpcdFx0aXBfY21zZ19yZWN2X3R0bChtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5MS1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5Ny1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19UT1MpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTk4Olx0XHRpcF9jbXNnX3JlY3ZfdG9zKG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTk5LVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjA1LVx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX1JFQ1ZPUFRTKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjIwNjpcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMDctXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTMtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVUT1BUUykge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMTQ6XHRcdGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHNvY2tfbmV0KHNrKSwgbXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTUtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMjEtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEFTU1NFQykge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMjI6XHRcdGlwX2Ntc2dfcmVjdl9zZWN1cml0eShtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyMy1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyOS1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzA6XHRcdGlwX2Ntc2dfcmVjdl9kc3RhZGRyKG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjMxLVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM3LVx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX0NIRUNLU1VNKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzg6XHRcdGlwX2Ntc2dfcmVjdl9jaGVja3N1bShtc2csIHNrYiwgdGxlbiwgb2Zmc2V0KTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM5LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDAtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVkZSQUdTSVpFKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDE6XHRcdGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0Mi19XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjI0MzpFWFBPUlRfU1lNQk9MKGlwX2Ntc2dfcmVjdl9vZmZzZXQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDQtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz01MjY9aW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01NzMtXHRcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo1NzQ6XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTc1LVx0fVxuLS1cbm5ldC9pcHY0L3BpbmcuYz04NDI9aW50IHBpbmdfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3BpbmcuYy04ODgtXHRcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaXNrKSlcbm5ldC9pcHY0L3BpbmcuYzo4ODk6XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY0L3BpbmcuYy04OTAtXG4tLVxubmV0L2lwdjQvcGluZy5jLTkxNS1cdFx0XHQgaW5ldF9jbXNnX2ZsYWdzKGlzaykpXG5uZXQvaXB2NC9waW5nLmM6OTE2Olx0XHRcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XG5uZXQvaXB2NC9waW5nLmMtOTE3LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3Jhdy5jPTc0OT1zdGF0aWMgaW50IHJhd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3Jhdy5jLTc5MC1cdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXG5uZXQvaXB2NC9yYXcuYzo3OTE6XHRcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XG5uZXQvaXB2NC9yYXcuYy03OTItXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMDMzPWludCB1ZHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIxMTEtXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2lwdjQvdWRwLmM6MjExMjpcdFx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrLCBza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcbm5ldC9pcHY0L3VkcC5jLTIxMTMtXG4tLVxubmV0L2lwdjYvZGF0YWdyYW0uYz00NTU9aW50IGlwdjZfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTUyNy1cdFx0XHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKSlcbm5ldC9pcHY2L2RhdGFncmFtLmM6NTI4Olx0XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtNTI5LVx0XHR9XG4tLVxubmV0L2lwdjYvdWRwLmM9NDY0PWludCB1ZHB2Nl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY2L3VkcC5jLTU2MS1cdFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcbm5ldC9pcHY2L3VkcC5jOjU2MjpcdFx0XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYixcbm5ldC9pcHY2L3VkcC5jLTU2My1cdFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcbi0tXG5uZXQvbDJ0cC9sMnRwX2lwLmM9NTM5PXN0YXRpYyBpbnQgbDJ0cF9pcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9sMnRwL2wydHBfaXAuYy01NzUtXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2wydHAvbDJ0cF9pcC5jOjU3NjpcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9sMnRwL2wydHBfaXAuYy01NzctXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00ODI9c3RhdGljIHZvaWQgc3ZjX3RjcF9oYW5kc2hha2Uoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0My0vKlxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTQ0OiAqIFNlZSBuZXQvaXB2Ni9pcF9zb2NrZ2x1ZS5jIDogaXBfY21zZ19yZWN2X3BrdGluZm9cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0NS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgY29kZSBzbmlwcGV0IGNoZWNrcyB0aGUgSVAgdmVyc2lvbiBvZiBhIHJlY2VpdmVkIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjb250cm9sIG1lc3NhZ2VzIChjbXNncykgb24gc29ja2V0cyB0aGF0IG1pZ2h0IGJlIHJlY2VpdmluZyBJUHY2IHBhY2tldHMsIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgc3BlY2lmaWMgbGluZSwgYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YCwgaXMgdGhlIGtleS4gSXQgc2VlbXMgbGlrZSBzb21lb25lIGFkZGVkIHRoaXMgY2hlY2sgdG8gcHJldmVudCBhY2Nlc3NpbmcgSVB2NCBoZWFkZXIgZmllbGRzIChsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzLCBUVEwsIFRPUykgb24gYW4gYHNrYmAgdGhhdCAqaXNuJiMzOTt0KiBhY3R1YWxseSBhbiBJUHY0IHBhY2tldC4gQWNjZXNzaW5nIHRoZXNlIGZpZWxkcyBvbiBhIG5vbi1JUHY0IHBhY2tldCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IGJlc3QsIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBvZiBkYXRhLgoKR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBmaXggd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgaXBfY21zZ19yZWN2X29mZnNldGAgd2hpY2ggZG9lcyB0aGUgY21zZyBwcm9jZXNzaW5nLCBpcyBjYWxsZWQgZHVyaW5nIGByZWN2bXNnYCB3aGVuIGNvbnRyb2wgbWVzc2FnZXMgYXJlIGVuYWJsZWQgb24gc29ja2V0cyBhbmQgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NC9JUHY2IHNvY2tldCBjbXNnIHByb2Nlc3NpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBJcyBpdCBjb3JlIG5ldHdvcmtpbmc/IFllcCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIHN0YW5kYXJkIGBBRl9JTkVUYC9gQUZfSU5FVDZgIHNvY2tldHMgdXNpbmcgYHJlY3Ztc2dgIHdpdGggY21zZyBmbGFncyBsaWtlIGBJUF9QS1RJTkZPYCwgYElQX1RUTGAsIGV0Yy4gSXMgaXQgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgb3IgY3Jvc3MtcHJvdG9jb2wgY21zZyBwYXJzaW5nIGVycm9ycy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaXBfY21zZ19yZWN2X29mZnNldGAuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBJdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGByZWN2bXNnYCB3aXRoIGNtc2cgb3B0aW9ucyBlbmFibGVkIG9uIHRoZSBzb2NrZXQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3JlY3Ztc2dgLCBgdWRwX3JlY3Ztc2dgLCBgcmF3X3JlY3Ztc2dgLCBgcGluZ19yZWN2bXNnYC4gQW5kIGNyaXRpY2FsbHksIGl0IGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC1wcmlvcml0eSB0YXJnZXQuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc29ja2dsdWVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4Olx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGF0IGJ1aWxkIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQnVpbGQgU3lzdGVtKioKCk9rYXksIHNvIGBpcF9zb2NrZ2x1ZS5vYCBpcyBiZWluZyBidWlsdC4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIGJ1aWx0LiBUaGUgYnVpbGQgc3lzdGVtIHRlbGxzIG1lIGl0JiMzOTtzIGxpbmtlZCBpbiB2aWEgYG9iai15YCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHN0YXRpY2FsbHkgY29tcGlsZWQgaW50byB0aGUgSVB2NCBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgaW5jbHVkZWQgaW4gdGhlIGxhcmdlciBidWlsZC4gTGV0IG1lIGp1bXAgYmFjayB1cCB0aGUgaGllcmFyY2h5IGFuZCBleGFtaW5lIGBuZXQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2sgYnVpbGQgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIHJvb3QgbWFrZSBmaWxlIGlmIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgcGljdHVyZSBvZiB0aGUgYnVpbGQgb3JkZXIgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkyOTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9LY29uZmlnPTExND1jb25maWcgSU5FVFxuLS1cbm5ldC9LY29uZmlnLTEzMC1cdCAgYmVoYXZpb3Igb2YgdGhlIFRDUC9JUCBjb2RlIGJ5IHdyaXRpbmcgdG8gdGhlICh2aXJ0dWFsKSBmaWxlcyBpblxubmV0L0tjb25maWc6MTMxOlx0ICAvcHJvYy9zeXMvbmV0L2lwdjQvKjsgdGhlIG9wdGlvbnMgYXJlIGV4cGxhaW5lZCBpbiB0aGUgZmlsZVxubmV0L0tjb25maWctMTMyLVx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XHUwMDNlLlxuLS1cbm5ldC9LY29uZmlnPTEzNj1pZiBJTkVUXG5uZXQvS2NvbmZpZzoxMzc6c291cmNlIFwmIzM0O25ldC9pcHY0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTEzOC1zb3VyY2UgXCYjMzQ7bmV0L2lwdjYvS2NvbmZpZ1wmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTI0Nz1zb3VyY2UgXCYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNDg6c291cmNlIFwmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNDktc291cmNlIFwmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG4tLVxubmV0L2F0bS9icjI2ODQuYz0zMz1zdGF0aWMgdm9pZCBza2JfZGVidWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYXRtL2JyMjY4NC5jLTUyLVxubmV0L2F0bS9icjI2ODQuYzo1MzpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NFtdID0geyBFVEhFUlRZUEVfSVBWNCB9O1xubmV0L2F0bS9icjI2ODQuYy01NC1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NltdID0geyBFVEhFUlRZUEVfSVBWNiB9O1xuLS1cbm5ldC9hdG0vYnIyNjg0LmM9NTc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkW10gPSB7IFBBRF9CUklER0VEIH07XG5uZXQvYXRtL2JyMjY4NC5jOjU4OnN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxsY19vdWlfaXB2NFtdID0geyBMTEMsIFNOQVBfUk9VVEVELCBFVEhFUlRZUEVfSVBWNCB9O1xubmV0L2F0bS9icjI2ODQuYy01OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsbGNfb3VpX2lwdjZbXSA9IHsgTExDLCBTTkFQX1JPVVRFRCwgRVRIRVJUWVBFX0lQVjYgfTtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTIwMj1zdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9hdG0vYnIyNjg0LmMtMjA4LVx0XHQoKGJyZGV2LVx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/XG5uZXQvYXRtL2JyMjY4NC5jOjIwOTpcdFx0XHRzaXplb2YobGxjX291aV9waWRfcGFkKSA6IHNpemVvZihsbGNfb3VpX2lwdjQpKSA6XG5uZXQvYXRtL2JyMjY4NC5jLTIxMC1cdFx0KChicmRldi1cdTAwM2VwYXlsb2FkID09IHBfYnJpZGdlZCkgPyBCUjI2ODRfUEFEX0xFTiA6IDApO1xuLS1cbm5ldC9hdG0vYnIyNjg0LmMtMjMwLVxubmV0L2F0bS9icjI2ODQuYzoyMzE6XHRcdFx0c2tiX3B1c2goc2tiLCBzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTIzMi1cdFx0XHRzd2l0Y2ggKHByb3QpIHtcbm5ldC9hdG0vYnIyNjg0LmMtMjMzLVx0XHRcdGNhc2UgRVRIX1BfSVA6XG5uZXQvYXRtL2JyMjY4NC5jOjIzNDpcdFx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbGxjX291aV9pcHY0LFxubmV0L2F0bS9icjI2ODQuYzoyMzU6XHRcdFx0XHRcdFx0XHRzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTIzNi1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9hdG0vYnIyNjg0LmM9NDIyPXN0YXRpYyB2b2lkIGJyMjY4NF9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9icjI2ODQuYy00NTEtXHRcdC8qIGFjY2VwdCBwYWNrZXRzIHRoYXQgaGF2ZSBcJiMzNDtpcHZbNDZdXCYjMzQ7IGluIHRoZSBzbmFwIGhlYWRlciAqL1xubmV0L2F0bS9icjI2ODQuYzo0NTI6XHRcdGlmICgoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IChzaXplb2YobGxjX291aV9pcHY0KSkpIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9icjI2ODQuYzo0NTM6XHRcdCAgICAobWVtY21wKHNrYi1cdTAwM2VkYXRhLCBsbGNfb3VpX2lwdjQsXG5uZXQvYXRtL2JyMjY4NC5jOjQ1NDpcdFx0XHQgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHtcbm5ldC9hdG0vYnIyNjg0LmMtNDU1LVx0XHRcdGlmIChtZW1jbXAoc2tiLVx1MDAzZWRhdGEgJiM0MzsgNiwgZXRoZXJ0eXBlX2lwdjYsXG4tLVxubmV0L2F0bS9icjI2ODQuYy00NTctXHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbm5ldC9hdG0vYnIyNjg0LmM6NDU4Olx0XHRcdGVsc2UgaWYgKG1lbWNtcChza2ItXHUwMDNlZGF0YSAmIzQzOyA2LCBldGhlcnR5cGVfaXB2NCxcbm5ldC9hdG0vYnIyNjg0LmM6NDU5Olx0XHRcdFx0XHRzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKVxubmV0L2F0bS9icjI2ODQuYy00NjAtXHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4tLVxubmV0L2F0bS9icjI2ODQuYy00NjItXHRcdFx0XHRnb3RvIGVycm9yO1xubmV0L2F0bS9icjI2ODQuYzo0NjM6XHRcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTQ2NC1cdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTY0NT1zdGF0aWMgdm9pZCBicjI2ODRfc2V0dXBfcm91dGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxubmV0L2F0bS9icjI2ODQuYy02NDktXHRicmRldi1cdTAwM2VuZXRfZGV2ID0gbmV0ZGV2O1xubmV0L2F0bS9icjI2ODQuYzo2NTA6XHRuZXRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKGxsY19vdWlfaXB2NCk7IC8qIHdvcnN0IGNhc2UgKi9cbm5ldC9hdG0vYnIyNjg0LmMtNjUxLVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZicjI2ODRfbmV0ZGV2X29wc19yb3V0ZWQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9Mzk5PWJhdGFkdl9kYXRfZW50cnlfaGFzaF9maW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00MzktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDA6ICogQGlwOiBpcHY0IHRvIGFkZC9lZGl0XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDE6ICogQG1hY19hZGRyOiBtYWMgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIGdpdmVuIGlwdjRcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTQ0Mi0gKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz02Mzk9c3RhdGljIHZvaWQgYmF0YWR2X2Nob29zZV9uZXh0X2NhbmRpZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTY5OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjY5OTogKiBAaXBfZHN0OiBpcHY0IHRvIGxvb2sgdXAgaW4gdGhlIERIVFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNzAwLSAqIEB2aWQ6IFZMQU4gaWRlbnRpZmllclxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTEwODI9c3RhdGljIHUxNiBiYXRhZHZfYXJwX2dldF90eXBlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTEyNi1cdGlwX2RzdCA9IGJhdGFkdl9hcnBfaXBfZHN0KHNrYiwgaGRyX3NpemUpO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyNzpcdGlmIChpcHY0X2lzX2xvb3BiYWNrKGlwX3NyYykgfHwgaXB2NF9pc19tdWx0aWNhc3QoaXBfc3JjKSB8fFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyODpcdCAgICBpcHY0X2lzX2xvb3BiYWNrKGlwX2RzdCkgfHwgaXB2NF9pc19tdWx0aWNhc3QoaXBfZHN0KSB8fFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyOTpcdCAgICBpcHY0X2lzX3plcm9uZXQoaXBfc3JjKSB8fCBpcHY0X2lzX2xiY2FzdChpcF9zcmMpIHx8XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMTMwOlx0ICAgIGlwdjRfaXNfemVyb25ldChpcF9kc3QpIHx8IGlwdjRfaXNfbGJjYXN0KGlwX2RzdCkpXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTMxLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MTg5PWludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMTUtXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3Qud2FudF9hbGxfdW5zbm9vcGFibGVzX2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIxNjpcdElOSVRfSExJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC53YW50X2FsbF9pcHY0X2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIxNy1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC53YW50X2FsbF9pcHY2X2xpc3QpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYz0zOTI9dm9pZCBiYXRhZHZfc2tiX3NldF9wcmlvcml0eShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjUtXHRcdFx0cmV0dXJuO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjQyNjpcdFx0cHJpbyA9IChpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcikgXHUwMDI2IDB4ZmMpIFx1MDAzZVx1MDAzZSA1O1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTQyNy1cdFx0YnJlYWs7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz03OTE9c3RhdGljIGludCBiYXRhZHZfbWVzaGlmX2luaXRfbGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODIxLVx0YXRvbWljX3NldChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfdW5zbm9vcGFibGVzLCAwKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODIyOlx0YXRvbWljX3NldChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfaXB2NCwgMCk7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMy1cdGF0b21pY19zZXQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjYsIDApO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTg0PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYmF0YWR2X21jYXN0X2dldF9icmlkZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTktLyoqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMDA6ICogYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KCkgLSBnZXQgbWNhc3Qgcm91dGVyIGZsYWdzIGZyb21cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMS0gKiAgbm9kZSBmb3IgSVB2NFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwOS0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMDpzdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTEte1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2ND1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE3MS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE3MjpcdGZsYWdzIHw9IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NChkZXYpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTczLVx0ZmxhZ3MgfD0gYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KGRldik7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9Mjc0PWJhdGFkdl9tY2FzdF9tbGFfZmxhZ3NfZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMjk1LVx0bWxhX2ZsYWdzLmJyaWRnZWQgPSAxO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mjk2Olx0cXI0ID0gXHUwMDI2bWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NDtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5Ny1cdHFyNiA9IFx1MDAyNm1sYV9mbGFncy5xdWVyaWVyX2lwdjY7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MzQwPXN0YXRpYyBib29sIGJhdGFkdl9tY2FzdF9tbGFfaXNfZHVwbGljYXRlKHU4ICptY2FzdF9hZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1Mi0vKipcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjM1MzogKiBiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NCgpIC0gZ2V0IG1lc2hpZiBJUHY0IG11bHRpY2FzdCBsaXN0ZW5lcnNcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1NC0gKiBAZGV2OiB0aGUgZGV2aWNlIHRvIGNvbGxlY3QgbXVsdGljYXN0IGFkZHJlc3NlcyBmcm9tXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MzY2PXN0YXRpYyBpbnRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjM2NzpiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzY4LVx0XHRcdFx0IHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5MC1cdFx0aWYgKGZsYWdzLVx1MDAzZXR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9VTlNOT09QQUJMRVMgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozOTE6XHRcdCAgICBpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXHUwMDNlbXVsdGlhZGRyKSlcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5Mi1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0zOTQtXHRcdGlmICghKGZsYWdzLVx1MDAzZXR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjQpIFx1MDAyNlx1MDAyNlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mzk1Olx0XHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KHBtYy1cdTAwM2VtdWx0aWFkZHIpKVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk2LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTUyMD1iYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy01MzAtXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo1MzE6XHRyZXQ0ID0gYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoZGV2LCBtY2FzdF9saXN0LCBmbGFncyk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy01MzItXHRpZiAocmV0NCBcdTAwM2MgMClcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz01ODU9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfbWxhX2JyaWRnZV9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MDktXHRcdFx0aWYgKHR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9VTlNOT09QQUJMRVMgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo2MTA6XHRcdFx0ICAgIGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGJyX2lwX2VudHJ5LVx1MDAzZWFkZHIuZHN0LmlwNCkpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MTMtXHRcdFx0aWYgKCEodHZsdl9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNCkgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo2MTQ6XHRcdFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChicl9pcF9lbnRyeS1cdTAwM2VhZGRyLmRzdC5pcDQpKVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjE1LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9ODA3PWJhdGFkdl9tY2FzdF9icmlkZ2VfbG9nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtODIwLVx0XHRiYXRhZHZfbWNhc3RfcXVlcmllcl9sb2coYmF0X3ByaXYsIFwmIzM0O0lHTVBcJiMzNDssXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo4MjE6XHRcdFx0XHRcdCBcdTAwMjZvbGRfZmxhZ3MtXHUwMDNlcXVlcmllcl9pcHY0LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6ODIyOlx0XHRcdFx0XHQgXHUwMDI2bmV3X2ZsYWdzLVx1MDAzZXF1ZXJpZXJfaXB2NCk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy04MjMtXHRcdGJhdGFkdl9tY2FzdF9xdWVyaWVyX2xvZyhiYXRfcHJpdiwgXCYjMzQ7TUxEXCYjMzQ7LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTkzOT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTUzLS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTU0OiAqIGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NCgpIC3igK9jaGVjayBmb3IgSUdNUCByZXBvcnRzXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05NTUtICogQHNrYjogdGhlIGV0aGVybmV0IGZyYW1lIGRlc3RpbmVkIGZvciB0aGUgbWVzaFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2NS0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk2NjpzdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfaXNfcmVwb3J0X2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2Ny17XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTgxLS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTgyOiAqIGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NCgpIC0gY2hlY2sgZm9yIG9wdGltaXplZCBmb3J3YXJkaW5nXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05ODMtICogIHBvdGVudGlhbFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5NC0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk5NTpzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTk2LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTAwNS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDY6XHRpZiAoYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY0KHNrYikpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDEzLVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMDE0Olx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwaGRyLVx1MDAzZWRhZGRyKSlcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMTUtXHRcdCppc191bnNub29wYWJsZSA9IHRydWU7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTEwND1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTE1LVx0Y2FzZSBFVEhfUF9JUDpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMTY6XHRcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd19tb2RlX2NoZWNrX2lwdjQoYmF0X3ByaXYsIHNrYixcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExMTctXHRcdFx0XHRcdFx0XHQgaXNfdW5zbm9vcGFibGUsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTE0MT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwX2NvdW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0NS1cdGNhc2UgRVRIX1BfSVA6XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTQ2Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0Ny1cdGNhc2UgRVRIX1BfSVBWNjpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMzE0PWJhdGFkdl9tY2FzdF9mb3J3X3R0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0Ni0vKipcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNDc6ICogYmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfaXB2NCgpIC0gZm9yd2FyZCB0byBub2RlcyB3aXRoIHdhbnQtYWxsLWlwdjRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNDgtICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTM1OT1zdGF0aWMgaW50XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzYwOmJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwdjQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNjEtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM2OC1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzY5Olx0XHRcdFx0IFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjRfbGlzdCxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNzA6XHRcdFx0XHQgbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlKSB7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzcxLVx0XHRuZXdza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0MzU9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGwoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDM5LVx0Y2FzZSBFVEhfUF9JUDpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE0NDA6XHRcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY0KGJhdF9wcml2LCBza2IsIHZpZCk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDQxLVx0Y2FzZSBFVEhfUF9JUFY2OlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2MTI9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X3dhbnRfdW5zbm9vcF91cGRhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ2LS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY0NzogKiBiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZSgpIC0gdXBkYXRlIHdhbnQtYWxsLWlwdjQgY291bnRlciBhbmQgbGlzdFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY0OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjU2LSAqL1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY1NzpzdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1OC1cdFx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZyxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjYwLXtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjE6XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjRfbGlzdDtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjI6XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSA9IFx1MDAyNm9yaWctXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY2My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjY4LVx0ICAgICEob3JpZy1cdTAwM2VtY2FzdF9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpKSB7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjY5Olx0XHRhdG9taWNfaW5jKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0Lm51bV93YW50X2FsbF9pcHY0KTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NzAtXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY3OS1cdFx0ICAgb3JpZy1cdTAwM2VtY2FzdF9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpIHtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2ODA6XHRcdGF0b21pY19kZWMoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY4MS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xODkwPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF90dmx2X29nbV9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTkxNC1cdGJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBtY2FzdF9mbGFncyk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTE1Olx0YmF0YWR2X21jYXN0X3dhbnRfaXB2NF91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIG1jYXN0X2ZsYWdzKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5MTYtXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgbWNhc3RfZmxhZ3MpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE5NTA9aW50IGJhdGFkdl9tY2FzdF9tZXNoX2luZm9fcHV0KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTk1OC1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE5NTk6XHRcdGlmIChiYXRfcHJpdi1cdTAwM2VtY2FzdC5tbGFfZmxhZ3MucXVlcmllcl9pcHY0LmV4aXN0cylcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjAtXHRcdFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY0X0VYSVNUUztcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xOTYyLVx0XHRcdGZsYWdzX3ByaXYgfD0gQkFUQURWX01DQVNUX0ZMQUdTX1FVRVJJRVJfSVBWNl9FWElTVFM7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTYzOlx0XHRpZiAoYmF0X3ByaXYtXHUwMDNlbWNhc3QubWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NC5zaGFkb3dpbmcpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xOTY0LVx0XHRcdGZsYWdzX3ByaXYgfD0gQkFUQURWX01DQVNUX0ZMQUdTX1FVRVJJRVJfSVBWNF9TSEFET1dJTkc7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MjE4OT12b2lkIGJhdGFkdl9tY2FzdF9wdXJnZV9vcmlnKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnKVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTUtXHRiYXRhZHZfbWNhc3Rfd2FudF91bnNub29wX3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjIxOTY6XHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTctXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTExND1iYXRhZHZfbWNhc3RfZm9yd19vcmlnX2VudHJ5KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTE4LVx0c3dpdGNoIChlbnRyeV9vZmZzZXQpIHtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTE5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSwgbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlKTpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTIwLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSwgbWNhc3Rfd2FudF9hbGxfaXB2Nl9ub2RlKTpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTI3Mz1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19wdXNoX3dhbnRfYWxsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODQtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6Mjg1Olx0XHRoZWFkID0gXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0O1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODYtXHRcdG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlLFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoyODc6XHRcdFx0XHQgIG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZSk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTI4OC1cdFx0YnJlYWs7XG4tLVxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jPTk0Nz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X29yaWdfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtOTg4LVx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNm9yaWdfbm9kZS1cdTAwM2VtY2FzdF93YW50X2FsbF91bnNub29wYWJsZXNfbm9kZSk7XG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM6OTg5Olx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNm9yaWdfbm9kZS1cdTAwM2VtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTk5MC1cdElOSVRfSExJU1RfTk9ERShcdTAwMjZvcmlnX25vZGUtXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2Nl9ub2RlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTQxMT1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC00NTEtXHQvKipcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6NDUyOlx0ICogQG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZTogYSBsaXN0IG5vZGUgZm9yIHRoZSBtY2FzdC53YW50X2FsbF9pcHY0XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1My1cdCAqICBsaXN0XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1NC1cdCAqL1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDo0NTU6XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtY2FzdF93YW50X2FsbF9pcHY0X25vZGU7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1Ni1cdC8qKlxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTIyMT1zdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyB7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjI6XHQvKiogQHF1ZXJpZXJfaXB2NDogdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gSUdNUCBxdWVyaWVyIGluIHRoZSBtZXNoICovXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjM6XHRzdHJ1Y3QgYmF0YWR2X21jYXN0X3F1ZXJpZXJfc3RhdGUgcXVlcmllcl9pcHY0O1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMjI0LVxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTI0MT1zdHJ1Y3QgYmF0YWR2X3ByaXZfbWNhc3Qge1xuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1NC1cdC8qKlxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjU1Olx0ICogQHdhbnRfYWxsX2lwdjRfbGlzdDogYSBsaXN0IG9mIG9yaWdfbm9kZXMgd2FudGluZyBhbGwgSVB2NCBtdWx0aWNhc3Rcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1Ni1cdCAqICB0cmFmZmljXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTctXHQgKi9cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI1ODpcdHN0cnVjdCBobGlzdF9oZWFkIHdhbnRfYWxsX2lwdjRfbGlzdDtcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1OS1cbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTMtXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyOTQ6XHQvKiogQG51bV93YW50X2FsbF9pcHY0OiBjb3VudGVyIGZvciBpdGVtcyBpbiB3YW50X2FsbF9pcHY0X2xpc3QgKi9cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI5NTpcdGF0b21pY190IG51bV93YW50X2FsbF9pcHY0O1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMjk2LVxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTMxMy1cdCAqIEB3YW50X2xpc3RzX2xvY2s6IGxvY2sgZm9yIHByb3RlY3RpbmcgbW9kaWZpY2F0aW9ucyB0byBtY2FzdHNcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTMxNDpcdCAqICB3YW50X2FsbF97dW5zbm9vcGFibGVzLGlwdjQsaXB2Nn1fbGlzdCAodHJhdmVyc2FscyBhcmUgcmN1LWxvY2tlZClcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTMxNS1cdCAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MTI1PXZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE1Ni1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTU3Olx0aWYgKGlwdjRfaXNfbG9vcGJhY2sodGlwKSB8fFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNTg6XHQgICAgaXB2NF9pc19tdWx0aWNhc3QodGlwKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTU5LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz02Njk9c3RhdGljIGJvb2wgaXNfdmFsaWRfbWRiX3NvdXJjZShzdHJ1Y3QgbmxhdHRyICphdHRyLCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy02NzctXHRcdH1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6Njc4Olx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QobmxhX2dldF9pbl9hZGRyKGF0dHIpKSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy02NzktXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SVB2NCBtdWx0aWNhc3Qgc291cmNlIGFkZHJlc3MgaXMgbm90IGFsbG93ZWRcJiMzNDspO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTIzMT1zdGF0aWMgaW50IGJyX21kYl9jb25maWdfaW5pdChzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3Ny1cdGlmIChjZmctXHUwMDNlZW50cnktXHUwMDNlYWRkci5wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNzg6XHQgICAgaXB2NF9pc196ZXJvbmV0KGNmZy1cdTAwM2VlbnRyeS1cdTAwM2VhZGRyLnUuaXA0KSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy0xMjc5LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtJUHY0IGVudHJ5IGdyb3VwIGFkZHJlc3MgMC4wLjAuMCBpcyBub3QgYWxsb3dlZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzU1PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NDpcdFx0aWYgKGlwdjRfaXNfemVyb25ldChzcmNfaXAtXHUwMDNlc3JjLmlwNCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NTpcdFx0ICAgIGlwdjRfaXNfbXVsdGljYXN0KHNyY19pcC1cdTAwM2VzcmMuaXA0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM2Ni1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1Njk9c3RhdGljIGludCBicl9pcDRfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3OC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU3OTpcdGlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1ODAtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzgxOD1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODI2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODI3Olx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGdyb3VwKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgyOC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzkxOD1zdGF0aWMgaW50IGJyX2lwNF9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzkzMzpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9pcHY0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTM0LVx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0NS1cdGlmIChlcnIgPT0gLUVOT01TRykge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ2Olx0XHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTQ3LVx0XHRcdEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZW1yb3V0ZXJzX29ubHkgPSAxO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ4Olx0XHR9IGVsc2UgaWYgKHBpbV9pcHY0X2FsbF9waW1fcm91dGVycyhpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcikpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0OS1cdFx0XHRpZiAoaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19QSU0pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTAtXHRcdFx0XHRicl9tdWx0aWNhc3RfcGltKGJybWN0eCwgcG1jdHgsIHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5NTE6XHRcdH0gZWxzZSBpZiAoaXB2NF9pc19hbGxfc25vb3BlcnMoaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTItXHRcdFx0YnJfaXA0X211bHRpY2FzdF9tcmRfcmN2KGJybWN0eCwgcG1jdHgsIHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MDU3PWludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICoqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA5MS1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDkyOlx0XHRyZXQgPSBicl9tdWx0aWNhc3RfaXB2NF9yY3YoKmJybWN0eCwgKnBtY3R4LCBza2IsIHZpZCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTMtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDczMD1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3Mi1cdCAqIGJyX211bHRpY2FzdF9yY3YgZmlyc3QgY2hlY2tzIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVELCBhbmRcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc3MzpcdCAqIHJldHVybnMgd2l0aG91dCBjYWxsaW5nIGJyX211bHRpY2FzdF9pcHY0LzZfcmN2IGlmIGl0JiMzOTtzIG5vdFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc0LVx0ICogZW5hYmxlZC4gTW92ZWQgYm90aCBmdW5jdGlvbnMgb3V0IGp1c3QgZm9yIHN5bW1ldHJ5LlxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjUtI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjY6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXHUwMDNlXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xOTM9c3RhdGljIGlubGluZSB2b2lkIG5mX2JyaWRnZV9wdWxsX2VuY2FwX2hlYWRlcl9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyMDY6c3RhdGljIGludCBicl92YWxpZGF0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTMzMD1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzMxOmJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMzMy17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjMzNDpcdHJldHVybiBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkciAhPSBuZl9icmlkZ2UtXHUwMDNlaXB2NF9kYWRkcjtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzM1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTM3Nj1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5Ni1cdG5mX2JyaWRnZS1cdTAwM2Vpbl9wcmVyb3V0aW5nID0gMDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzk3Olx0aWYgKGJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoc2tiLCBuZl9icmlkZ2UpKSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5OC1cdFx0cmVhc29uID0gaXBfcm91dGVfaW5wdXQoc2tiLCBpcGgtXHUwMDNlZGFkZHIsIGlwaC1cdTAwM2VzYWRkcixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQ4Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNTpcdGlmIChicl92YWxpZGF0ZV9pcHY0KHN0YXRlLVx1MDAzZW5ldCwgc2tiKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI2LVx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTMzLVx0bmZfYnJpZGdlID0gbmZfYnJpZGdlX2luZm9fZ2V0KHNrYik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzNDpcdG5mX2JyaWRnZS1cdTAwM2VpcHY0X2RhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzNS1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNC1cdGlmIChwZiA9PSBORlBST1RPX0lQVjQpIHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzA1Olx0XHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNi1cdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9ODM1PXN0YXRpYyBpbnQgYnJfbmZfZGV2X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzAtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjg3MTpcdFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQobmV0LCBza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzItXHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXHUwMDNlXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEyMDQ9c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF9pc19zdGFyX2coY29uc3Qgc3RydWN0IGJyX2lwICppcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMjA3LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMjA4Olx0XHRyZXR1cm4gaXB2NF9pc196ZXJvbmV0KGlwLVx1MDAzZXNyYy5pcDQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmMtMTgtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JyaWRnZS5jLTIwLVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZnRfcmVqZWN0LmhcdTAwM2Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXHUwMDNlXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfcmVqZWN0X2JyaWRnZS5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaFx1MDAzZVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTM2ND1zdGF0aWMgdm9pZCBjZXBoX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTM3MS1cdCAqIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQgYWdhaW4gdW50aWwgY2VwaF9jb25fdlsxMl1fdHJ5X3dyaXRlKCkgZmlsbHNcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjM3MjpcdCAqIHRoZSBzb2NrZXQgYnVmZmVyLiBTZWUgbmV0L2lwdjQvdGNwX2lucHV0LmM6dGNwX2NoZWNrX3NwYWNlKClcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTM3My1cdCAqIGFuZCBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UoKS5cbi0tXG5uZXQvY29yZS9kZXYuYz0zMzYzPXZvaWQgbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5uZXQvY29yZS9kZXYuYy0zMzY3LVx0XHRuZXRpZl9zZXRfZ3NvX21heF9zaXplKGRldiwgc2l6ZSk7XG5uZXQvY29yZS9kZXYuYzozMzY4Olx0aWYgKHNpemUgXHUwMDNjIFJFQURfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUpKVxubmV0L2NvcmUvZGV2LmM6MzM2OTpcdFx0bmV0aWZfc2V0X2dzb19pcHY0X21heF9zaXplKGRldiwgc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0zMzcwLX1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA5ND1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxNDUtXHRkZXYtXHUwMDNlZ3JvX21heF9zaXplID0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jOjEyMTQ2Olx0ZGV2LVx1MDAzZWdzb19pcHY0X21heF9zaXplID0gR1NPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jOjEyMTQ3Olx0ZGV2LVx1MDAzZWdyb19pcHY0X21heF9zaXplID0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jLTEyMTQ4LVx0ZGV2LVx1MDAzZXRzb19tYXhfc2l6ZSA9IFRTT19MRUdBQ1lfTUFYX1NJWkU7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyOTg9c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzMDYtXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29fbWF4X3NpemUpO1xubmV0L2NvcmUvZGV2LmM6MTMzMDc6XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29faXB2NF9tYXhfc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzMwOC1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfdHgsIGdzb19tYXhfc2Vncyk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzMzktXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3J4LCBncm9fbWF4X3NpemUpO1xubmV0L2NvcmUvZGV2LmM6MTMzNDA6XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3J4LCBncm9faXB2NF9tYXhfc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzM0MS1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIHJ4X2hhbmRsZXIpO1xuLS1cbm5ldC9jb3JlL2Rldi5oPTIwNT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5oLTIxMC1cdGlmIChzaXplIFx1MDAzYz0gR1NPX0xFR0FDWV9NQVhfU0laRSlcbm5ldC9jb3JlL2Rldi5oOjIxMTpcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUsIHNpemUpO1xubmV0L2NvcmUvZGV2LmgtMjEyLX1cbi0tXG5uZXQvY29yZS9kZXYuaD0yMjE9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9ncm9fbWF4X3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuaC0yMjYtXHRpZiAoc2l6ZSBcdTAwM2M9IEdST19MRUdBQ1lfTUFYX1NJWkUpXG5uZXQvY29yZS9kZXYuaDoyMjc6XHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZWdyb19pcHY0X21heF9zaXplLCBzaXplKTtcbm5ldC9jb3JlL2Rldi5oLTIyOC19XG5uZXQvY29yZS9kZXYuaC0yMjktXG5uZXQvY29yZS9kZXYuaDoyMzA6c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZGV2LmgtMjMxLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXG5uZXQvY29yZS9kZXYuaC0yMzIte1xubmV0L2NvcmUvZGV2Lmg6MjMzOlx0LyogZGV2LVx1MDAzZWdzb19pcHY0X21heF9zaXplIGlzIHJlYWQgbG9ja2xlc3NseSBmcm9tIHNrX3NldHVwX2NhcHMoKSAqL1xubmV0L2NvcmUvZGV2Lmg6MjM0Olx0V1JJVEVfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUsIHNpemUpO1xubmV0L2NvcmUvZGV2LmgtMjM1LX1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAxMjIKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGZvciBGdXp6aW5nIENhbmRpZGF0ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgaXBfY21zZ19yZWN2X29mZnNldGAuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYG5ldC9LY29uZmlnYCBhbmQgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyB0aGUgcHJpbWFyeSBmYWN0b3IuIFNwZWNpZmljYWxseSwgbGluZSAxMTQgZGVmaW5lcyBpdC4gVGhlbiwgSSBuZWVkZWQgdG8gc2VlIGlmIGBDT05GSUdfSVBWNmAgd2FzIGFsc28gcmVsZXZhbnQsIHNpbmNlIElQdjYgb2Z0ZW4gaW50ZXJhY3RzIHdpdGggSVB2NCBjb2RlLiBBIGNoZWNrIG9mIGBuZXQvaXB2Ni9LY29uZmlnYCBjb25maXJtZWQgYENPTkZJR19JUFY2YCBjb21waWxlcyBgbmV0L2lwdjYvYCwgYW5kIGBDT05GSUdfSU5FVGAgY29tcGlsZXMgYG5ldC9pcHY0L2AuCgpJIHRoZW4gdHJhY2VkIHRoZSBmdW5jdGlvbiBhbmQgZm91bmQgdGhhdCBgaXBfY21zZ19yZWN2X29mZnNldGAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHdoaWNoIGdldHMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JTkVUPXlgLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIHNlZSBgQ09ORklHX0lQVjZgIG1pZ2h0IGJlIGludm9sdmVkIGJlY2F1c2UgYHVkcHY2X3JlY3Ztc2dgIGFuZCBgaXB2Nl9yZWN2X2Vycm9yYCAqYWxzbyogY2FsbCBgaXBfY21zZ19yZWN2X29mZnNldGAgYW5kIGBpcF9jbXNnX3JlY3ZgIGlmIGBpbmV0X2Ntc2dfZmxhZ3MoaW5ldClgIGlzIG5vbi16ZXJvICh3aGljaCBoYXBwZW5zIHdpdGggSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzIG9yIElQdjYgc29ja2V0cyB3aXRoIElQdjQgY21zZyBlbmFibGVkKS4gVGhpcyB0ZWxscyBtZSBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdGVzdCB3aXRoIElQdjYgZW5hYmxlZCBhcyB3ZWxsLgoKTmV4dCwgSSBsb29rZWQgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZC4gVGhlIGRlZmluaXRpb24gaXM6CmBgYGMKdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAoJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpCmBgYAp3aXRoIGFuIGBFWFBPUlRfU1lNQk9MKGlwX2Ntc2dfcmVjdl9vZmZzZXQpYC4KCkkgdGhlbiBtYWRlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyB3ZXJlIGFsbCBpbiBwbGFjZTogYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBbJiMzNDtpcF9jbXNnX3JlY3Zfb2Zmc2V0JiMzNDtdLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBbJiMzNDtJTkVUJiMzNDssICYjMzQ7SVBWNiYjMzQ7XS4KCkZpbmFsbHksIEkgbm90aWNlZCB0aGVyZSYjMzk7cyBhIHZlcnNpb24gY2hlY2sgYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YCBpbiBgaXBfY21zZ19yZWN2X29mZnNldGAuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQgcHJvdGVjdHMgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbnZhbGlkIGhlYWRlciBhY2Nlc3Mgd2hlbiBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBhcmUgcHJvY2Vzc2VkIGZvciBub24tSVB2NCBwYWNrZXRzIChsaWtlIElQdjYgcGFja2V0cyBvbiBkdWFsLXN0YWNrIG9yIG1hcHBlZCBzb2NrZXRzLCBvciBjb3JydXB0ZWQgc29ja2V0cykuIEl0IHNlZW1zIGxpa2UgaXQgcHJldmVudHMgY29ycnVwdGVkIHBhY2tldHMgb3IgaW52YWxpZCBJUCB2ZXJzaW9uIGluIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHRlc3QgZnV6emluZyBpbnB1dHMuCgpUaGlzIGFsbCBsb29rcyB2ZXJ5IGNsZWFuIGFuZCB3ZWxsLWRlZmluZWQuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfY21zZ19yZWN2X29mZnNldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTmAgYXQgdGhlIGVudHJ5IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHRvIHJldHVybiBlYXJseSBpZiB0aGUgcGFja2V0IGlzIG5vdCBhbiBJUHY0IHBhY2tldCAoZS5nLiB3aGVuIHByb2Nlc3NpbmcgZHVhbC1zdGFjayBvciBJUHY2IHNrYnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggYTU1ZWYzMjdlYzkzMi4uMDFkMjY0ZThmMzRlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0xNzQsNiAmIzQzOzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIWZsYWdzKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLSZndDt2ZXJzaW9uICE9IElQVkVSU0lPTikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi8KIAlpZiAoZmxhZ3MgJmFtcDsgSVBfQ01TR19QS1RJTkZPKSB7CiAJCWlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQIFNvY2tldCBHbHVlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGRpZmYgYW5kIGl0cyBjb250ZXh0LCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhOyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHRhcmdldGluZyB0aGUgdmljaW5pdHkgb2YgbGluZSAxNzQgd2l0aGluIHRoZSBgaXBfc29ja2dsdWUuY2AgZmlsZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZGV0YWlscyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiAxNjI6XHRcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAxNjM6XHRcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xuIDE2NDpcdFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xuIDE2NTpcdFxuIDE2NjpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXHUwMDI2c2luKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIDE3MDpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbiAxNzE6XHR7XG4gMTcyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKTtcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICghZmxhZ3MpXG4gMTc1Olx0XHRcdHJldHVybjtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4gMTc4Olx0XHRcdHJldHVybjtcbiAxNzk6XHRcbiAxODA6XHRcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gMTgxOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIDE4MjpcdFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4gMTgzOlx0XG4gMTg0Olx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfUEtUSU5GTztcbiAxODU6XHRcdFx0aWYgKCFmbGFncylcbiAxODY6XHRcdFx0XHRyZXR1cm47XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG4gMTkwOlx0XHRcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RUTDtcbiAxOTM6XHRcdFx0aWYgKCFmbGFncylcbiAxOTQ6XHRcdFx0XHRyZXR1cm47XG4gMTk1Olx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVE9TKSB7XG4gMTk4Olx0XHRcdGlwX2Ntc2dfcmVjdl90b3MobXNnLCBza2IpO1xuIDE5OTpcdFxuIDIwMDpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RPUztcbiAyMDE6XHRcdFx0aWYgKCFmbGFncylcbiAyMDI6XHRcdFx0XHRyZXR1cm47XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcbiAyMDY6XHRcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xuIDIwNzpcdFxuIDIwODpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFQ1ZPUFRTO1xuIDIwOTpcdFx0XHRpZiAoIWZsYWdzKVxuIDIxMDpcdFx0XHRcdHJldHVybjtcbiAyMTE6XHRcdH1cbiAyMTI6XHRcbiAyMTM6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19SRVRPUFRTKSB7XG4gMjE0Olx0XHRcdGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHNvY2tfbmV0KHNrKSwgbXNnLCBza2IpO1xuIDIxNTpcdFxuIDIxNjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFVE9QVFM7XG4gMjE3Olx0XHRcdGlmICghZmxhZ3MpXG4gMjE4Olx0XHRcdFx0cmV0dXJuO1xuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcbiAyMjI6XHRcdFx0aXBfY21zZ19yZWN2X3NlY3VyaXR5KG1zZywgc2tiKTtcbiAyMjM6XHRcbiAyMjQ6XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+SVBfQ01TR19QQVNTU0VDO1xuIDIyNTpcdFx0XHRpZiAoIWZsYWdzKVxuIDIyNjpcdFx0XHRcdHJldHVybjtcbiAyMjc6XHRcdH1cbiAyMjg6XHRcbiAyMjk6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xuIDIzMDpcdFx0XHRpcF9jbXNnX3JlY3ZfZHN0YWRkcihtc2csIHNrYik7XG4gMjMxOlx0XG4gMjMyOlx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfT1JJR0RTVEFERFI7XG4gMjMzOlx0XHRcdGlmICghZmxhZ3MpXG4gMjM0Olx0XHRcdFx0cmV0dXJuO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX0NIRUNLU1VNKVxuIDIzODpcdFx0XHRpcF9jbXNnX3JlY3ZfY2hlY2tzdW0obXNnLCBza2IsIHRsZW4sIG9mZnNldCk7XG4gMjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBgaXBfY21zZ19yZWN2X29mZnNldGAgY2hhbmdlLiBJIHNlZSBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBoYXMgYmVlbiBhZGRlZDogYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IGlzICp0aGlzKiBjaGVjayBuZWNlc3Nhcnk/IFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYmVpbmcgYWRkcmVzc2VkLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIHJlY29uc3RydWN0IGl0cyBldm9sdXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgR2l0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24uIFdobyBpbnRyb2R1Y2VkIGl0PyBXaGF0IGlzc3VlcyB3ZXJlIGZsYWdnZWQsIGFuZCB3aGF0IHdhcyB0aGUganVzdGlmaWNhdGlvbj8gSWYgdGhlIGNvbW1pdCBoaXN0b3J5IGRvZXNuJiMzOTt0IHByb3ZpZGUgZW5vdWdoIGNvbnRleHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSYjMzk7bGwgZG8gYSBjb2RlYmFzZS13aWRlIGdyZXAgZm9yIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YC4gVGhpcyB3aWxsIHNob3cgbWUgYWxsIHRoZSBjYWxsIHNpdGVzLCBhbGxvd2luZyBtZSB0byBzZWUgaG93IGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIG5ldyBjaGVjayBpcyByZWxldmFudCB0byB0aG9zZSB1c2VzLiBUaGUgc3Vycm91bmRpbmcgY29kZSBpcyBvZnRlbiB0aGUgbW9zdCBpbGx1bWluYXRpbmcuIEkgZXhwZWN0IHRoZSBjYWxsZXJzIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjbHVlcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgZ3VhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXAuaD04MTU9dm9pZCBpcHY0X3BrdGluZm9fcHJlcGFyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZHJvcF9kc3QpO1xuaW5jbHVkZS9uZXQvaXAuaDo4MTY6dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvaXAuaC04MTctXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTgzOD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfY21zZ19yZWN2KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L2lwLmgtODM5LXtcbmluY2x1ZGUvbmV0L2lwLmg6ODQwOlx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCAwLCAwKTtcbmluY2x1ZGUvbmV0L2lwLmgtODQxLX1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0Nz1zdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfZHN0YWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNjgtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE2OTp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MC1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDItfVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDM6RVhQT1JUX1NZTUJPTChpcF9jbXNnX3JlY3Zfb2Zmc2V0KTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjQ0LVxuLS1cbm5ldC9pcHY0L3VkcC5jPTIwMzM9aW50IHVkcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjExMS1cdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXG5uZXQvaXB2NC91ZHAuYzoyMTEyOlx0XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xubmV0L2lwdjQvdWRwLmMtMjExMy1cbi0tXG5uZXQvaXB2Ni91ZHAuYz00NjQ9aW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjYvdWRwLmMtNTYxLVx0XHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2lwdjYvdWRwLmM6NTYyOlx0XHRcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBzaywgc2tiLFxubmV0L2lwdjYvdWRwLmMtNTYzLVx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFVEUCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBkdWFsLXN0YWNrIG9yIElQdjYgc29ja2V0cyBoYW5kbGUgaW5jb21pbmcgSVB2NCBvciBJUHY2IHBhY2tldHMuIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGlzOiBpZiBJJiMzOTttIHJlY2VpdmluZyBhIHBhY2tldCBhbmQgYGluZXRfY21zZ19mbGFncyhpbmV0KWAgaXMgc2V0IOKAkyB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBpbXBsaWVzIElQdjQgY29udHJvbCBtZXNzYWdlIG9wdGlvbnMgd2VyZSB1c2VkIG9uIGFuIEFGX0lORVQ2IG9yIGR1YWwtc3RhY2sgc29ja2V0IOKAkyB0aGUgY29kZSBjYWxscyBgaXBfY21zZ19yZWN2X29mZnNldCgpYC4gVGhlIGlzc3VlIGlzLCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIG9uIGFuIElQdjYgc2tiLCBzbyBgaXBfaGRyKHNrYilgIGlzICphY3R1YWxseSogcG9pbnRpbmcgdG8gYW4gSVB2NiBoZWFkZXIuCgpIZXJlJiMzOTtzIHRoZSBydWI6IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHN1YnNlcXVlbnRseSBjYWxscyBhIGJ1bmNoIG9mIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBpcF9jbXNnX3JlY3Zfb3B0c2AsIGBpcF9jbXNnX3JlY3ZfcGt0aW5mb2AsIGFuZCBzbyBvbi4gVGhlc2UgZnVuY3Rpb25zLCBjcml0aWNhbGx5LCBhbGwgc2VlbSB0byB0cmVhdCBgaXBfaGRyKHNrYilgIGFzIGEgYHN0cnVjdCBpcGhkcmAg4oCTIHRoYXQgaXMsIGFuIElQdjQgaGVhZGVyISBOb3csIGlmIHRoZSBpbmNvbWluZyBwYWNrZXQgaXMgYWN0dWFsbHkgSVB2NiAoYW5kIGB2ZXJzaW9uID09IDZgKSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IG1pc2ludGVycHJldGluZyB0aGUgbWVtb3J5LiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHRoaW5ncy4gV2UmIzM5O3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIsIGFjY2Vzc2luZyBpbnZhbGlkIGZpZWxkcywgb3IganVzdCBnZW5lcmFsbHkgbWFraW5nIGluY29ycmVjdCBkZWNpc2lvbnMgYmFzZWQgb24gbWFsZm9ybWVkIGRhdGEuCgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCB0aG9zZSBgaXBfY21zZ19yZWN2XypgIGZ1bmN0aW9ucyBhcmUgZG9pbmcgaW4gZGV0YWlsLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHR5cGUgY29uZnVzaW9uIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSByYW1pZmljYXRpb25zIGNvdWxkIGJlIHNlcmlvdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGp1c3QgaG93IG11Y2ggY29udHJvbCBhbiBhdHRhY2tlciBjb3VsZCBwb3RlbnRpYWxseSBnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdC8qXG4gIDUxOlx0ICpcdFNPTF9JUCBjb250cm9sIG1lc3NhZ2VzLlxuICA1MjpcdCAqL1xuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9wa3RpbmZvKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgaW5fcGt0aW5mbyBpbmZvID0gKlBLVElORk9fU0tCX0NCKHNrYik7XG4gIDU3Olx0XG4gIDU4Olx0XHRpbmZvLmlwaV9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuICA1OTpcdFxuICA2MDpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1BLVElORk8sIHNpemVvZihpbmZvKSwgXHUwMDI2aW5mbyk7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA2NDpcdHtcbiAgNjU6XHRcdGludCB0dGwgPSBpcF9oZHIoc2tiKS1cdTAwM2V0dGw7XG4gIDY2Olx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfVFRMLCBzaXplb2YoaW50KSwgXHUwMDI2dHRsKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3RvcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4gIDcwOlx0e1xuICA3MTpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1RPUywgMSwgXHUwMDI2aXBfaGRyKHNrYiktXHUwMDNldG9zKTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X29wdHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3NTpcdHtcbiAgNzY6XHRcdGlmIChJUENCKHNrYiktXHUwMDNlb3B0Lm9wdGxlbiA9PSAwKVxuICA3NzpcdFx0XHRyZXR1cm47XG4gIDc4Olx0XG4gIDc5Olx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfUkVDVk9QVFMsIElQQ0Ioc2tiKS1cdTAwM2VvcHQub3B0bGVuLFxuICA4MDpcdFx0XHQgaXBfaGRyKHNrYikgJiM0MzsgMSk7XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdFxuICA4NDpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuICA4NTpcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDg2Olx0e1xuICA4NzpcdFx0dW5zaWduZWQgY2hhciBvcHRidWZbc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MF07XG4gIDg4Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gKHN0cnVjdCBpcF9vcHRpb25zICopb3B0YnVmO1xuICA4OTpcdFxuICA5MDpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VvcHQub3B0bGVuID09IDApXG4gIDkxOlx0XHRcdHJldHVybjtcbiAgOTI6XHRcbiAgOTM6XHRcdGlmIChpcF9vcHRpb25zX2VjaG8obmV0LCBvcHQsIHNrYikpIHtcbiAgOTQ6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfQ1RSVU5DO1xuICA5NTpcdFx0XHRyZXR1cm47XG4gIDk2Olx0XHR9XG4gIDk3Olx0XHRpcF9vcHRpb25zX3VuZG8ob3B0KTtcbiAgOTg6XHRcbiAgOTk6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRVRPUFRTLCBvcHQtXHUwMDNlb3B0bGVuLCBvcHQtXHUwMDNlX19kYXRhKTtcbiAxMDA6XHR9XG4gMTAxOlx0XG4gMTAyOlx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2ZyYWdzaXplKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxMDM6XHR7XG4gMTA0Olx0XHRpbnQgdmFsO1xuIDEwNTpcdFxuIDEwNjpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VmcmFnX21heF9zaXplID09IDApXG4gMTA3Olx0XHRcdHJldHVybjtcbiAxMDg6XHRcbiAxMDk6XHRcdHZhbCA9IElQQ0Ioc2tiKS1cdTAwM2VmcmFnX21heF9zaXplO1xuIDExMDpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFQ1ZGUkFHU0laRSwgc2l6ZW9mKHZhbCksIFx1MDAyNnZhbCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9jaGVja3N1bShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IsXG4gMTE0Olx0XHRcdFx0XHQgIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxuIDExNTpcdHtcbiAxMTY6XHRcdF9fd3N1bSBjc3VtID0gc2tiLVx1MDAzZWNzdW07XG4gMTE3Olx0XG4gMTE4Olx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9DT01QTEVURSlcbiAxMTk6XHRcdFx0cmV0dXJuO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKG9mZnNldCAhPSAwKSB7XG4gMTIyOlx0XHRcdGludCB0ZW5kX29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgdGxlbjtcbiAxMjM6XHRcdFx0Y3N1bSA9IGNzdW1fc3ViKGNzdW0sIHNrYl9jaGVja3N1bShza2IsIHRlbmRfb2ZmLCBvZmZzZXQsIDApKTtcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcbiAxMjY6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9DSEVDS1NVTSwgc2l6ZW9mKF9fd3N1bSksIFx1MDAyNmNzdW0pO1xuIDEyNzpcdH1cbiAxMjg6XHRcbiAxMjk6XHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBsc21fY29udGV4dCBjdHg7XG4gMTMyOlx0XHR1MzIgc2VjaWQ7XG4gMTMzOlx0XHRpbnQgZXJyO1xuIDEzNDpcdFxuIDEzNTpcdFx0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oTlVMTCwgc2tiLCBcdTAwMjZzZWNpZCk7XG4gMTM2Olx0XHRpZiAoZXJyKVxuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XG4gMTM5Olx0XHRlcnIgPSBzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoc2VjaWQsIFx1MDAyNmN0eCk7XG4gMTQwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDE0MTpcdFx0XHRyZXR1cm47XG4gMTQyOlx0XG4gMTQzOlx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgU0NNX1NFQ1VSSVRZLCBjdHgubGVuLCBjdHguY29udGV4dCk7XG4gMTQ0Olx0XHRzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChcdTAwMjZjdHgpO1xuIDE0NTpcdH1cbiAxNDY6XHRcbiAxNDc6XHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfZHN0YWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0X19iZTE2IF9wb3J0c1syXSwgKnBvcnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI5CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIEhlYWRlciBTYW5pdHkgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGF0IHRoZSBzdGFydCBvZiBgaXBfY21zZ19yZWN2X29mZnNldGAuIFRoZSBrZXkgdGhpbmcgaXM6IGBpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktJmd0O3ZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggaXQgc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgZG9lcyBpdCBjcmVhdGUgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGludHJvZHVjZSBhIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlPyBOb3BlLiBgaXBfaGRyKHNrYilgIGFjY2Vzc2VzIHRoZSBJUCBoZWFkZXIgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyLCBhbmQgYHZlcnNpb25gIGlzIGEgZmllbGQgd2l0aGluIHRoYXQgSVAgaGVhZGVyIHN0cnVjdHVyZS4gSWYgdGhlIElQIHZlcnNpb24gaXNuJiMzOTt0IDQgKHdoaWNoIGBJUFZFUlNJT05gIGlzIGRlZmluZWQgYXMpLCBpdCBqdXN0IHJldHVybnMg4oCTIG5vIGNtc2dzIGFyZSB0b3VjaGVkLgoKU2Vjb25kLCBkb2VzIGl0ICpleHBvc2UqIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4gVGhpcyBjaGVjayAqcHJldmVudHMqIHByb2Nlc3Npbmcgb2Ygbm9uLUlQdjQgcGFja2V0cyBpbiB0aGUgSVB2NCBjbXNnIHJlY2VpdmVyLiBUaGF0JiMzOTtzIGEgKmdvb2QqIHRoaW5nLgoKVGhpcmQsIGRvZXMgaXQgbWVzcyB3aXRoIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciBsZWFrZWQ/IE5vcGUuIEl0IGp1c3Qgc2tpcHMgcHJvY2Vzc2luZywgd2hpY2ggbWVhbnMgaXQgc2tpcHMgcG90ZW50aWFsIHByb2JsZW1zLgoKRm91cnRoLCBhcmUgdGhlcmUgYW55IHN0cnVjdHVyZSBmaWVsZHMgb3IgbWVtb3J5IHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vIG5ldyBjbXNncyBhcmUgYmVpbmcgY3JlYXRlZCBvciBjb3BpZWQuIEluIGZhY3QsIGl0IHNraXBzIGNhbGxpbmcgYHB1dF9jbXNnYCBmb3IgcGFja2V0cyB0aGF0IGZhaWwgdGhlIGNoZWNrLgoKU28sIHRoaXMgbG9va3MgcHJldHR5IHNhZmUuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGEgS0FTQU4vS01TQU4gdHlwZSBpc3N1ZTogVGhpcyBjaGVjayBwcmV2ZW50cyBtaXNpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgaGVhZGVycyB3aGVuIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBjYWxsZWQgb24gbm9uLUlQdjQgcGFja2V0cy4gVGhpcyBpcyBwdXJlIGxvZ2ljIHZhbGlkYXRpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBvcmlnaW5hbCBmb3VyIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIG1vZGlmaWNhdGlvbnMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyoqOiBUaGUgY29uZGl0aW9uIGNoZWNrcyB0aGUgSVAgdmVyc2lvbiBmaWVsZCwgd2hpY2ggY29tZXMgZnJvbSB0aGUgcmVjZWl2ZWQgcGFja2V0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbi4KNC4gICoqQm91bmRzIGNoZWNrcy9sb2dpYyoqOiBObyBjaGFuZ2VzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGNsZWFyIGFuZCB1bmFtYmlndW91cy4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaXBfaGRyKHNrYiktXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIGFuIGVhcmx5IHJldHVybiB2YWxpZGF0aW9uIGNoZWNrIG9uIHRoZSBwYWNrZXQgaGVhZGVyIHZlcnNpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGxlbmd0aHMgb3Igc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDozOS40NjUyNjIwNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU4ODA1NjQzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaXBfaGRyKHNrYiktXFx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIGFuIGVhcmx5IHJldHVybiB2YWxpZGF0aW9uIGNoZWNrIG9uIHRoZSBwYWNrZXQgaGVhZGVyIHZlcnNpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGxlbmd0aHMgb3Igc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDQ6MzkuNDY1MjY2NjY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzNzUzNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo0NDozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjAxZDI2NGU4ZjM0ZWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcXG5AQCAtMTc0LDYgKzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aWYgKCFmbGFncylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVxcdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xcbiBcXHRcXHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ0OjQwLjc0OTYzODY1NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg1NDQ5Njk3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9jbXNnX3JlY3Zfb2Zmc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjAxZDI2NGU4ZjM0ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtMTc0LDYgKzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbiBcdGlmICghZmxhZ3MpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDo0MC43NDk2NDAyNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQwODY0NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBTb2NrZXQgR2x1ZSBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFuZCBpdHMgY29udGV4dC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXBfY21zZ19yZWN2X29mZnNldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBzZWN1cml0eSBvciBzdGFiaWxpdHkgbWVhc3VyZSByZWxhdGVkIHRvIElQdjQgcGFja2V0IGhhbmRsaW5nLCBwcm9iYWJseSBkZXNpZ25lZCB0byBhdm9pZCBwcm9jZXNzaW5nIG1hbGZvcm1lZCBwYWNrZXRzLiBJdCdzIGEgY29uZGl0aW9uYWwgY2hlY2sgb24gdGhlIElQIGhlYWRlciB2ZXJzaW9uLCBlbnN1cmluZyBpdCdzIHRoZSBleHBlY3RlZCB2ZXJzaW9uIChgSVBWRVJTSU9OYCwgcHJlc3VtYWJseSA0KS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGVycm9yIGNvbmRpdGlvbiB3YXMgYWRkcmVzc2VkIHdoZXJlIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCBJUCBwYWNrZXQgd2FzIHNvbWVob3cgZ2V0dGluZyB0aHJvdWdoLlxuXG5JIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGRvZXMgYW5kIGhvdyBpdCdzIHVzZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoZWNrLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbnRyb2wgbWVzc2FnZSBmbGFncyBsaWtlIGBJUF9DTVNHX1BLVElORk9gLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIG5ldyBjaGVjayBwcmV2ZW50cyBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbGlrZSBhIGNyYXNoLCBvciBhbiBpbmZvcm1hdGlvbiBsZWFrLCBpZiBhbiBpbnZhbGlkIHBhY2tldCB3aXRoIGEgbm9uLUlQdjQgSVAgdmVyc2lvbiB3ZXJlIHNvbWVob3cgcmVjZWl2ZWQgYnkgdGhlIHNvY2tldC4gU28sIHRoZSBnb2FsIGlzIHRvIHNlZSB3aGF0IGtpbmQgb2YgZGFtYWdlIGNvdWxkIGJlIGNhdXNlZCBieSBiYWQgcGFja2V0cyBtYWtpbmcgdGhlaXIgd2F5IGludG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ0OjQ2LjQ5MDUwNjY2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gMTYyOlxcdFxcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuIDE2MzpcXHRcXHRzaW4uc2luX3BvcnQgPSBwb3J0c1sxXTtcXG4gMTY0OlxcdFxcdG1lbXNldChzaW4uc2luX3plcm8sIDAsIHNpemVvZihzaW4uc2luX3plcm8pKTtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXFx1MDAyNnNpbik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4gMTcwOlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRpZiAoIWZsYWdzKVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktXFx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSlcXG4gMTc4OlxcdFxcdFxcdHJldHVybjtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cXG4gMTgxOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xcbiAxODI6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19QS1RJTkZPO1xcbiAxODU6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMTg2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19UVEwpIHtcXG4gMTkwOlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19UVEw7XFxuIDE5MzpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAxOTQ6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1RPUykge1xcbiAxOTg6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3Rvcyhtc2csIHNrYik7XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1RPUztcXG4gMjAxOlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDIwMjpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcXG4gMjA2OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9vcHRzKG1zZywgc2tiKTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX0NNU0dfUkVDVk9QVFM7XFxuIDIwOTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDo0Ni40OTA3MDk1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY3ODg5MTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBmdW5jdGlvbmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuLCBjcnVjaWFsbHksIHdoYXQgaXQncyBiZWluZyB1c2VkIGZvci4gSXMgaXQgaGFuZGxpbmcgYW5jaWxsYXJ5IGRhdGE/IEFyZSB3ZSBkZWFsaW5nIHdpdGggSVAgb3B0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBjb250ZXh0IGlzIGtleSBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIHdpbGwgaW5mb3JtIG15IGFzc3VtcHRpb25zIGFyb3VuZCBwb3RlbnRpYWwgYnVncywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIHNlYXJjaCBhbmQgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBsYW5kc2NhcGUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDU6MjMuMTY5NjAzMzAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI3NDI4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfY21zZ19yZWN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9ODE1PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KTtcXG5pbmNsdWRlL25ldC9pcC5oOjgxNjp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvaXAuaC04MTctXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9ODM1PXZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtODM3LVxcbmluY2x1ZGUvbmV0L2lwLmg6ODM4OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L2lwLmgtODM5LXtcXG5pbmNsdWRlL25ldC9pcC5oOjg0MDpcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2tiLVxcdTAwM2Vzaywgc2tiLCAwLCAwKTtcXG5pbmNsdWRlL25ldC9pcC5oLTg0MS19XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTUzLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NTQ6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3BrdGluZm8oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTUte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02Mi1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYzOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02OC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjY5OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90b3Moc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNzAte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy03My1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjc0OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9vcHRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTc1LXtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtODMtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo4NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcmV0b3B0cyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTg1LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDEtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMDI6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2ZyYWdzaXplKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMy17XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTExMi1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjExMzpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfY2hlY2tzdW0oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTE0LVxcdFxcdFxcdFxcdCAgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyOC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEyOTpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTMwLXtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OC17XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE2OC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE2OTp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzAtXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODEtXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxODI6XFx0XFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTgzLVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODktXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19UVEwpIHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE5MDpcXHRcXHRpcF9jbXNnX3JlY3ZfdHRsKG1zZywgc2tiKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5MS1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTk3LVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfVE9TKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxOTg6XFx0XFx0aXBfY21zZ19yZWN2X3Rvcyhtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xOTktXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIwNS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1JFQ1ZPUFRTKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMDY6XFx0XFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjA3LVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTMtXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19SRVRPUFRTKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMTQ6XFx0XFx0aXBfY21zZ19yZWN2X3JldG9wdHMoc29ja19uZXQoc2spLCBtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTUtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyMS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjIyMjpcXHRcXHRpcF9jbXNnX3JlY3Zfc2VjdXJpdHkobXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjIzLVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjMwOlxcdFxcdGlwX2Ntc2dfcmVjdl9kc3RhZGRyKG1zZywgc2tiKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIzMS1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM3LVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfQ0hFQ0tTVU0pXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzg6XFx0XFx0aXBfY21zZ19yZWN2X2NoZWNrc3VtKG1zZywgc2tiLCB0bGVuLCBvZmZzZXQpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM5LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjQwLVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVDVkZSQUdTSVpFKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjQxOlxcdFxcdGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDItfVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjQzOkVYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2X29mZnNldCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDQtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTUyNj1pbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTczLVxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NTc0OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01NzUtXFx0fVxcbi0tXFxubmV0L2lwdjQvcGluZy5jPTg0Mj1pbnQgcGluZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC9waW5nLmMtODg4LVxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaXNrKSlcXG5uZXQvaXB2NC9waW5nLmM6ODg5OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XFxubmV0L2lwdjQvcGluZy5jLTg5MC1cXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy05MTUtXFx0XFx0XFx0IGluZXRfY21zZ19mbGFncyhpc2spKVxcbm5ldC9pcHY0L3BpbmcuYzo5MTY6XFx0XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG5uZXQvaXB2NC9waW5nLmMtOTE3LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvcmF3LmM9NzQ5PXN0YXRpYyBpbnQgcmF3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy03OTAtXFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2NC9yYXcuYzo3OTE6XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG5uZXQvaXB2NC9yYXcuYy03OTItXFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1RSVU5DKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjAzMz1pbnQgdWRwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTIxMTEtXFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2NC91ZHAuYzoyMTEyOlxcdFxcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBzaywgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG9mZik7XFxubmV0L2lwdjQvdWRwLmMtMjExMy1cXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9NDU1PWludCBpcHY2X3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTUyNy1cXHRcXHRcXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKSlcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjUyODpcXHRcXHRcXHRcXHRpcF9jbXNnX3JlY3YobXNnLCBza2IpO1xcbm5ldC9pcHY2L2RhdGFncmFtLmMtNTI5LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTQ2ND1pbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTU2MS1cXHRcXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxcbm5ldC9pcHY2L3VkcC5jOjU2MjpcXHRcXHRcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYixcXG5uZXQvaXB2Ni91ZHAuYy01NjMtXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYz01Mzk9c3RhdGljIGludCBsMnRwX2lwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2lwLmMtNTc1LVxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXFxubmV0L2wydHAvbDJ0cF9pcC5jOjU3NjpcXHRcXHRpcF9jbXNnX3JlY3YobXNnLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfaXAuYy01NzctXFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1RSVU5DKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDgyPXN0YXRpYyB2b2lkIHN2Y190Y3BfaGFuZHNoYWtlKHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0My0vKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjU0NDogKiBTZWUgbmV0L2lwdjYvaXBfc29ja2dsdWUuYyA6IGlwX2Ntc2dfcmVjdl9wa3RpbmZvXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNTQ1LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NToyNS4zMDIzNTEwNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjcxMTgwOTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3JlIE5ldHdvcmtpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBjb2RlIHNuaXBwZXQgY2hlY2tzIHRoZSBJUCB2ZXJzaW9uIG9mIGEgcmVjZWl2ZWQgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBpc3N1ZXMgd2hlbiBwcm9jZXNzaW5nIGNvbnRyb2wgbWVzc2FnZXMgKGNtc2dzKSBvbiBzb2NrZXRzIHRoYXQgbWlnaHQgYmUgcmVjZWl2aW5nIElQdjYgcGFja2V0cywgb3IgbWFsZm9ybWVkIHBhY2tldHMuIFRoZSBzcGVjaWZpYyBsaW5lLCBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AsIGlzIHRoZSBrZXkuIEl0IHNlZW1zIGxpa2Ugc29tZW9uZSBhZGRlZCB0aGlzIGNoZWNrIHRvIHByZXZlbnQgYWNjZXNzaW5nIElQdjQgaGVhZGVyIGZpZWxkcyAobGlrZSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcywgVFRMLCBUT1MpIG9uIGFuIGBza2JgIHRoYXQgKmlzbid0KiBhY3R1YWxseSBhbiBJUHY0IHBhY2tldC4gQWNjZXNzaW5nIHRoZXNlIGZpZWxkcyBvbiBhIG5vbi1JUHY0IHBhY2tldCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IGJlc3QsIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBvZiBkYXRhLlxuXG5HaXZlbiBteSBleHBlcnRpc2UsIHRoaXMgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGZpeCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCB3aGljaCBkb2VzIHRoZSBjbXNnIHByb2Nlc3NpbmcsIGlzIGNhbGxlZCBkdXJpbmcgYHJlY3Ztc2dgIHdoZW4gY29udHJvbCBtZXNzYWdlcyBhcmUgZW5hYmxlZCBvbiBzb2NrZXRzIGFuZCBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciBJUHY0L0lQdjYgc29ja2V0IGNtc2cgcHJvY2Vzc2luZy5cblxuTGV0J3MgcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBJcyBpdCBjb3JlIG5ldHdvcmtpbmc/IFllcCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIHN0YW5kYXJkIGBBRl9JTkVUYC9gQUZfSU5FVDZgIHNvY2tldHMgdXNpbmcgYHJlY3Ztc2dgIHdpdGggY21zZyBmbGFncyBsaWtlIGBJUF9QS1RJTkZPYCwgYElQX1RUTGAsIGV0Yy4gSXMgaXQgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgb3IgY3Jvc3MtcHJvdG9jb2wgY21zZyBwYXJzaW5nIGVycm9ycy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGFjY2Vzc2libGUuIEl0J3MgY2FsbGVkIGR1cmluZyBgcmVjdm1zZ2Agd2l0aCBjbXNnIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGUgc29ja2V0LiBTcGVjaWZpY2FsbHksIGl0J3MgY2FsbGVkIGJ5IGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3JlY3Ztc2dgLCBgdWRwX3JlY3Ztc2dgLCBgcmF3X3JlY3Ztc2dgLCBgcGluZ19yZWN2bXNnYC4gQW5kIGNyaXRpY2FsbHksIGl0IGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC1wcmlvcml0eSB0YXJnZXQuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDY6MTguMDE0MTYyMzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjA5NzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zb2NrZ2x1ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4OlxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NjoxOC42OTAyNjQwODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjIxNjM5MzcxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBidWlsZCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQnVpbGQgU3lzdGVtKipcblxuT2theSwgc28gYGlwX3NvY2tnbHVlLm9gIGlzIGJlaW5nIGJ1aWx0LiBUaGF0J3MgYSBrZXkgcGFydCBvZiB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIGJ1aWx0LiBUaGUgYnVpbGQgc3lzdGVtIHRlbGxzIG1lIGl0J3MgbGlua2VkIGluIHZpYSBgb2JqLXlgIGluIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFRoYXQgbWVhbnMgaXQncyBzdGF0aWNhbGx5IGNvbXBpbGVkIGludG8gdGhlIElQdjQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgbmV0L2lwdjQvTWFrZWZpbGVgIGlzIGluY2x1ZGVkIGluIHRoZSBsYXJnZXIgYnVpbGQuIExldCBtZSBqdW1wIGJhY2sgdXAgdGhlIGhpZXJhcmNoeSBhbmQgZXhhbWluZSBgbmV0L01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrIGJ1aWxkIGxvZ2ljIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSByb290IG1ha2UgZmlsZSBpZiBJIHdhbnQgdG8gaGF2ZSBhIGhvbGlzdGljIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIG9yZGVyIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTowMC44NTQyMDM5ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTgxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkyOTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9LY29uZmlnPTExND1jb25maWcgSU5FVFxcbi0tXFxubmV0L0tjb25maWctMTMwLVxcdCAgYmVoYXZpb3Igb2YgdGhlIFRDUC9JUCBjb2RlIGJ5IHdyaXRpbmcgdG8gdGhlICh2aXJ0dWFsKSBmaWxlcyBpblxcbm5ldC9LY29uZmlnOjEzMTpcXHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXFxubmV0L0tjb25maWctMTMyLVxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbi0tXFxubmV0L0tjb25maWc9MTM2PWlmIElORVRcXG5uZXQvS2NvbmZpZzoxMzc6c291cmNlIFxcXCJuZXQvaXB2NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTEzOC1zb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZz0yNDc9c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcXFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjQ5LXNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz0zMz1zdGF0aWMgdm9pZCBza2JfZGVidWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmMtNTItXFxubmV0L2F0bS9icjI2ODQuYzo1MzpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NFtdID0geyBFVEhFUlRZUEVfSVBWNCB9O1xcbm5ldC9hdG0vYnIyNjg0LmMtNTQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZXRoZXJ0eXBlX2lwdjZbXSA9IHsgRVRIRVJUWVBFX0lQVjYgfTtcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NTc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkW10gPSB7IFBBRF9CUklER0VEIH07XFxubmV0L2F0bS9icjI2ODQuYzo1ODpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsbGNfb3VpX2lwdjRbXSA9IHsgTExDLCBTTkFQX1JPVVRFRCwgRVRIRVJUWVBFX0lQVjQgfTtcXG5uZXQvYXRtL2JyMjY4NC5jLTU5LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxsY19vdWlfaXB2NltdID0geyBMTEMsIFNOQVBfUk9VVEVELCBFVEhFUlRZUEVfSVBWNiB9O1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz0yMDI9c3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmMtMjA4LVxcdFxcdCgoYnJkZXYtXFx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/XFxubmV0L2F0bS9icjI2ODQuYzoyMDk6XFx0XFx0XFx0c2l6ZW9mKGxsY19vdWlfcGlkX3BhZCkgOiBzaXplb2YobGxjX291aV9pcHY0KSkgOlxcbm5ldC9hdG0vYnIyNjg0LmMtMjEwLVxcdFxcdCgoYnJkZXYtXFx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/IEJSMjY4NF9QQURfTEVOIDogMCk7XFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTIzMC1cXG5uZXQvYXRtL2JyMjY4NC5jOjIzMTpcXHRcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZihsbGNfb3VpX2lwdjQpKTtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzMi1cXHRcXHRcXHRzd2l0Y2ggKHByb3QpIHtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzMy1cXHRcXHRcXHRjYXNlIEVUSF9QX0lQOlxcbm5ldC9hdG0vYnIyNjg0LmM6MjM0OlxcdFxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbGxjX291aV9pcHY0LFxcbm5ldC9hdG0vYnIyNjg0LmM6MjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihsbGNfb3VpX2lwdjQpKTtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzNi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NDIyPXN0YXRpYyB2b2lkIGJyMjY4NF9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTQ1MS1cXHRcXHQvKiBhY2NlcHQgcGFja2V0cyB0aGF0IGhhdmUgXFxcImlwdls0Nl1cXFwiIGluIHRoZSBzbmFwIGhlYWRlciAqL1xcbm5ldC9hdG0vYnIyNjg0LmM6NDUyOlxcdFxcdGlmICgoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gKHNpemVvZihsbGNfb3VpX2lwdjQpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1MzpcXHRcXHQgICAgKG1lbWNtcChza2ItXFx1MDAzZWRhdGEsIGxsY19vdWlfaXB2NCxcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1NDpcXHRcXHRcXHQgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHtcXG5uZXQvYXRtL2JyMjY4NC5jLTQ1NS1cXHRcXHRcXHRpZiAobWVtY21wKHNrYi1cXHUwMDNlZGF0YSArIDYsIGV0aGVydHlwZV9pcHY2LFxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy00NTctXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbm5ldC9hdG0vYnIyNjg0LmM6NDU4OlxcdFxcdFxcdGVsc2UgaWYgKG1lbWNtcChza2ItXFx1MDAzZWRhdGEgKyA2LCBldGhlcnR5cGVfaXB2NCxcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1OTpcXHRcXHRcXHRcXHRcXHRzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKVxcbm5ldC9hdG0vYnIyNjg0LmMtNDYwLVxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTQ2Mi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbm5ldC9hdG0vYnIyNjg0LmM6NDYzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKGxsY19vdWlfaXB2NCkpO1xcbm5ldC9hdG0vYnIyNjg0LmMtNDY0LVxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz02NDU9c3RhdGljIHZvaWQgYnIyNjg0X3NldHVwX3JvdXRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy02NDktXFx0YnJkZXYtXFx1MDAzZW5ldF9kZXYgPSBuZXRkZXY7XFxubmV0L2F0bS9icjI2ODQuYzo2NTA6XFx0bmV0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2YobGxjX291aV9pcHY0KTsgLyogd29yc3QgY2FzZSAqL1xcbm5ldC9hdG0vYnIyNjg0LmMtNjUxLVxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZicjI2ODRfbmV0ZGV2X29wc19yb3V0ZWQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0zOTk9YmF0YWR2X2RhdF9lbnRyeV9oYXNoX2ZpbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgX19iZTMyIGlwLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNDM5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjQ0MDogKiBAaXA6IGlwdjQgdG8gYWRkL2VkaXRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDE6ICogQG1hY19hZGRyOiBtYWMgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIGdpdmVuIGlwdjRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00NDItICogQHZpZDogVkxBTiBpZGVudGlmaWVyXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz02Mzk9c3RhdGljIHZvaWQgYmF0YWR2X2Nob29zZV9uZXh0X2NhbmRpZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNjk4LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjY5OTogKiBAaXBfZHN0OiBpcHY0IHRvIGxvb2sgdXAgaW4gdGhlIERIVFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTcwMC0gKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTEwODI9c3RhdGljIHUxNiBiYXRhZHZfYXJwX2dldF90eXBlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTI2LVxcdGlwX2RzdCA9IGJhdGFkdl9hcnBfaXBfZHN0KHNrYiwgaGRyX3NpemUpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjExMjc6XFx0aWYgKGlwdjRfaXNfbG9vcGJhY2soaXBfc3JjKSB8fCBpcHY0X2lzX211bHRpY2FzdChpcF9zcmMpIHx8XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyODpcXHQgICAgaXB2NF9pc19sb29wYmFjayhpcF9kc3QpIHx8IGlwdjRfaXNfbXVsdGljYXN0KGlwX2RzdCkgfHxcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMTI5OlxcdCAgICBpcHY0X2lzX3plcm9uZXQoaXBfc3JjKSB8fCBpcHY0X2lzX2xiY2FzdChpcF9zcmMpIHx8XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEzMDpcXHQgICAgaXB2NF9pc196ZXJvbmV0KGlwX2RzdCkgfHwgaXB2NF9pc19sYmNhc3QoaXBfZHN0KSlcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTMxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTE4OT1pbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMTUtXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfdW5zbm9vcGFibGVzX2xpc3QpO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzoyMTY6XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0KTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMjE3LVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjZfbGlzdCk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MzkyPXZvaWQgYmF0YWR2X3NrYl9zZXRfcHJpb3JpdHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjUtXFx0XFx0XFx0cmV0dXJuO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo0MjY6XFx0XFx0cHJpbyA9IChpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcikgXFx1MDAyNiAweGZjKSBcXHUwMDNlXFx1MDAzZSA1O1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTc5MT1zdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfaW5pdF9sYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMS1cXHRhdG9taWNfc2V0KFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX3Vuc25vb3BhYmxlcywgMCk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo4MjI6XFx0YXRvbWljX3NldChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1jYXN0Lm51bV93YW50X2FsbF9pcHY0LCAwKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMy1cXHRhdG9taWNfc2V0KFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjYsIDApO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9ODQ9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpiYXRhZHZfbWNhc3RfZ2V0X2JyaWRnZShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5LS8qKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDogKiBiYXRhZHZfbWNhc3RfbWxhX3J0cl9mbGFnc19tZXNoaWZfZ2V0X2lwdjQoKSAtIGdldCBtY2FzdCByb3V0ZXIgZmxhZ3MgZnJvbVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMS0gKiAgbm9kZSBmb3IgSVB2NFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTA5LSAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMDpzdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTExLXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2ND1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTcxLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE3MjpcXHRmbGFncyB8PSBiYXRhZHZfbWNhc3RfbWxhX3J0cl9mbGFnc19tZXNoaWZfZ2V0X2lwdjQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNzMtXFx0ZmxhZ3MgfD0gYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KGRldik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0yNzQ9YmF0YWR2X21jYXN0X21sYV9mbGFnc19nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5NS1cXHRtbGFfZmxhZ3MuYnJpZGdlZCA9IDE7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mjk2OlxcdHFyNCA9IFxcdTAwMjZtbGFfZmxhZ3MucXVlcmllcl9pcHY0O1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5Ny1cXHRxcjYgPSBcXHUwMDI2bWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NjtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTM0MD1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfbWxhX2lzX2R1cGxpY2F0ZSh1OCAqbWNhc3RfYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1Mi0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozNTM6ICogYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoKSAtIGdldCBtZXNoaWYgSVB2NCBtdWx0aWNhc3QgbGlzdGVuZXJzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzU0LSAqIEBkZXY6IHRoZSBkZXZpY2UgdG8gY29sbGVjdCBtdWx0aWNhc3QgYWRkcmVzc2VzIGZyb21cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTM2Nj1zdGF0aWMgaW50XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MzY3OmJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzY4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqbWNhc3RfbGlzdCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5MC1cXHRcXHRpZiAoZmxhZ3MtXFx1MDAzZXR2bHZfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfTUNBU1RfV0FOVF9BTExfVU5TTk9PUEFCTEVTIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MzkxOlxcdFxcdCAgICBpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXFx1MDAzZW11bHRpYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzkyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk0LVxcdFxcdGlmICghKGZsYWdzLVxcdTAwM2V0dmx2X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozOTU6XFx0XFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXFx1MDAzZW11bHRpYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NTIwPWJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNTMwLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjUzMTpcXHRyZXQ0ID0gYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoZGV2LCBtY2FzdF9saXN0LCBmbGFncyk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNTMyLVxcdGlmIChyZXQ0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTU4NT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjA5LVxcdFxcdFxcdGlmICh0dmx2X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX1VOU05PT1BBQkxFUyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjYxMDpcXHRcXHRcXHQgICAgaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoYnJfaXBfZW50cnktXFx1MDAzZWFkZHIuZHN0LmlwNCkpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjExLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjEzLVxcdFxcdFxcdGlmICghKHR2bHZfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfTUNBU1RfV0FOVF9OT19SVFI0KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjYxNDpcXHRcXHRcXHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGJyX2lwX2VudHJ5LVxcdTAwM2VhZGRyLmRzdC5pcDQpKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTYxNS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTgwNz1iYXRhZHZfbWNhc3RfYnJpZGdlX2xvZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtODIwLVxcdFxcdGJhdGFkdl9tY2FzdF9xdWVyaWVyX2xvZyhiYXRfcHJpdiwgXFxcIklHTVBcXFwiLFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjgyMTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm9sZF9mbGFncy1cXHUwMDNlcXVlcmllcl9pcHY0LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjgyMjpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5ld19mbGFncy1cXHUwMDNlcXVlcmllcl9pcHY0KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy04MjMtXFx0XFx0YmF0YWR2X21jYXN0X3F1ZXJpZXJfbG9nKGJhdF9wcml2LCBcXFwiTUxEXFxcIixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTkzOT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05NTMtLyoqXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTU0OiAqIGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NCgpIC3igK9jaGVjayBmb3IgSUdNUCByZXBvcnRzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTU1LSAqIEBza2I6IHRoZSBldGhlcm5ldCBmcmFtZSBkZXN0aW5lZCBmb3IgdGhlIG1lc2hcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2NS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo5NjY6c3RhdGljIGJvb2wgYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTY3LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk4MS0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo5ODI6ICogYmF0YWR2X21jYXN0X2ZvcndfbW9kZV9jaGVja19pcHY0KCkgLSBjaGVjayBmb3Igb3B0aW1pemVkIGZvcndhcmRpbmdcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05ODMtICogIHBvdGVudGlhbFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTk0LSAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk5NTpzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDA1LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDY6XFx0aWYgKGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NChza2IpKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMDctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDEzLVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMTQ6XFx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwaGRyLVxcdTAwM2VkYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTAxNS1cXHRcXHQqaXNfdW5zbm9vcGFibGUgPSB0cnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTEwND1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExMTUtXFx0Y2FzZSBFVEhfUF9JUDpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTE2OlxcdFxcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd19tb2RlX2NoZWNrX2lwdjQoYmF0X3ByaXYsIHNrYixcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBpc191bnNub29wYWJsZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTExNDE9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcF9jb3VudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0NS1cXHRjYXNlIEVUSF9QX0lQOlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExNDY6XFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExNDctXFx0Y2FzZSBFVEhfUF9JUFY2Olxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTMxND1iYXRhZHZfbWNhc3RfZm9yd190dChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0Ni0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzQ3OiAqIGJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwdjQoKSAtIGZvcndhcmQgdG8gbm9kZXMgd2l0aCB3YW50LWFsbC1pcHY0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzNTk9c3RhdGljIGludFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNjA6YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNjEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM2OC1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19ub2RlLFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNjk6XFx0XFx0XFx0XFx0IFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNzA6XFx0XFx0XFx0XFx0IG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZSkge1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNzEtXFx0XFx0bmV3c2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0MzU9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGwoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE0MzktXFx0Y2FzZSBFVEhfUF9JUDpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNDQwOlxcdFxcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY0KGJhdF9wcml2LCBza2IsIHZpZCk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQ0MS1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xNjEyPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ2LS8qKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NDc6ICogYmF0YWR2X21jYXN0X3dhbnRfaXB2NF91cGRhdGUoKSAtIHVwZGF0ZSB3YW50LWFsbC1pcHY0IGNvdW50ZXIgYW5kIGxpc3RcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ4LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1Ni0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjU3OnN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY2MC17XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY2MTpcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0O1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjI6XFx0c3RydWN0IGhsaXN0X25vZGUgKm5vZGUgPSBcXHUwMDI2b3JpZy1cXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NjMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjY4LVxcdCAgICAhKG9yaWctXFx1MDAzZW1jYXN0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpKSB7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY2OTpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NzAtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjc5LVxcdFxcdCAgIG9yaWctXFx1MDAzZW1jYXN0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpIHtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjgwOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfaXB2NCk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY4MS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE4OTA9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X3R2bHZfb2dtX2hhbmRsZXIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5MTQtXFx0YmF0YWR2X21jYXN0X3dhbnRfdW5zbm9vcF91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIG1jYXN0X2ZsYWdzKTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTE1OlxcdGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBtY2FzdF9mbGFncyk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTkxNi1cXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgbWNhc3RfZmxhZ3MpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTk1MD1pbnQgYmF0YWR2X21jYXN0X21lc2hfaW5mb19wdXQoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NTgtXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTk1OTpcXHRcXHRpZiAoYmF0X3ByaXYtXFx1MDAzZW1jYXN0Lm1sYV9mbGFncy5xdWVyaWVyX2lwdjQuZXhpc3RzKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjAtXFx0XFx0XFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY0X0VYSVNUUztcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjItXFx0XFx0XFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY2X0VYSVNUUztcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTYzOlxcdFxcdGlmIChiYXRfcHJpdi1cXHUwMDNlbWNhc3QubWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NC5zaGFkb3dpbmcpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTk2NC1cXHRcXHRcXHRmbGFnc19wcml2IHw9IEJBVEFEVl9NQ0FTVF9GTEFHU19RVUVSSUVSX0lQVjRfU0hBRE9XSU5HO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MjE4OT12b2lkIGJhdGFkdl9tY2FzdF9wdXJnZV9vcmlnKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMjE5NS1cXHRiYXRhZHZfbWNhc3Rfd2FudF91bnNub29wX3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoyMTk2OlxcdGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBCQVRBRFZfTk9fRkxBR1MpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTctXFx0YmF0YWR2X21jYXN0X3dhbnRfaXB2Nl91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIEJBVEFEVl9OT19GTEFHUyk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTExND1iYXRhZHZfbWNhc3RfZm9yd19vcmlnX2VudHJ5KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTgtXFx0c3dpdGNoIChlbnRyeV9vZmZzZXQpIHtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExOTpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlLCBtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpOlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTIwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUsIG1jYXN0X3dhbnRfYWxsX2lwdjZfbm9kZSk6XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTI3Mz1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19wdXNoX3dhbnRfYWxsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTI4NC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjI4NTpcXHRcXHRoZWFkID0gXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtY2FzdC53YW50X2FsbF9pcHY0X2xpc3Q7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODYtXFx0XFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoyODc6XFx0XFx0XFx0XFx0ICBtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMjg4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jPTk0Nz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X29yaWdfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05ODgtXFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZvcmlnX25vZGUtXFx1MDAzZW1jYXN0X3dhbnRfYWxsX3Vuc25vb3BhYmxlc19ub2RlKTtcXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM6OTg5OlxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2b3JpZ19ub2RlLVxcdTAwM2VtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05OTAtXFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZvcmlnX25vZGUtXFx1MDAzZW1jYXN0X3dhbnRfYWxsX2lwdjZfbm9kZSk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTQxMT1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1MS1cXHQvKipcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjQ1MjpcXHQgKiBAbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlOiBhIGxpc3Qgbm9kZSBmb3IgdGhlIG1jYXN0LndhbnRfYWxsX2lwdjRcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1My1cXHQgKiAgbGlzdFxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtNDU0LVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6NDU1OlxcdHN0cnVjdCBobGlzdF9ub2RlIG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZTtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1Ni1cXHQvKipcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTIyMT1zdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyB7XFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjIyOlxcdC8qKiBAcXVlcmllcl9pcHY0OiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBJR01QIHF1ZXJpZXIgaW4gdGhlIG1lc2ggKi9cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjM6XFx0c3RydWN0IGJhdGFkdl9tY2FzdF9xdWVyaWVyX3N0YXRlIHF1ZXJpZXJfaXB2NDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyMjQtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTEyNDE9c3RydWN0IGJhdGFkdl9wcml2X21jYXN0IHtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1NC1cXHQvKipcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyNTU6XFx0ICogQHdhbnRfYWxsX2lwdjRfbGlzdDogYSBsaXN0IG9mIG9yaWdfbm9kZXMgd2FudGluZyBhbGwgSVB2NCBtdWx0aWNhc3RcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTYtXFx0ICogIHRyYWZmaWNcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTctXFx0ICovXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjU4OlxcdHN0cnVjdCBobGlzdF9oZWFkIHdhbnRfYWxsX2lwdjRfbGlzdDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTMtXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjk0OlxcdC8qKiBAbnVtX3dhbnRfYWxsX2lwdjQ6IGNvdW50ZXIgZm9yIGl0ZW1zIGluIHdhbnRfYWxsX2lwdjRfbGlzdCAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI5NTpcXHRhdG9taWNfdCBudW1fd2FudF9hbGxfaXB2NDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTYtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEzMTMtXFx0ICogQHdhbnRfbGlzdHNfbG9jazogbG9jayBmb3IgcHJvdGVjdGluZyBtb2RpZmljYXRpb25zIHRvIG1jYXN0c1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTMxNDpcXHQgKiAgd2FudF9hbGxfe3Vuc25vb3BhYmxlcyxpcHY0LGlwdjZ9X2xpc3QgKHRyYXZlcnNhbHMgYXJlIHJjdS1sb2NrZWQpXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMzE1LVxcdCAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xNTYtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNTc6XFx0aWYgKGlwdjRfaXNfbG9vcGJhY2sodGlwKSB8fFxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTU4OlxcdCAgICBpcHY0X2lzX211bHRpY2FzdCh0aXApKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTU5LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9NjY5PXN0YXRpYyBib29sIGlzX3ZhbGlkX21kYl9zb3VyY2Uoc3RydWN0IG5sYXR0ciAqYXR0ciwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy02NzctXFx0XFx0fVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6Njc4OlxcdFxcdGlmIChpcHY0X2lzX211bHRpY2FzdChubGFfZ2V0X2luX2FkZHIoYXR0cikpKSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYy02NzktXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIklQdjQgbXVsdGljYXN0IHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBhbGxvd2VkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEyMzE9c3RhdGljIGludCBicl9tZGJfY29uZmlnX2luaXQoc3RydWN0IGJyX21kYl9jb25maWcgKmNmZywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3Ny1cXHRpZiAoY2ZnLVxcdTAwM2VlbnRyeS1cXHUwMDNlYWRkci5wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNzg6XFx0ICAgIGlwdjRfaXNfemVyb25ldChjZmctXFx1MDAzZWVudHJ5LVxcdTAwM2VhZGRyLnUuaXA0KSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3OS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSVB2NCBlbnRyeSBncm91cCBhZGRyZXNzIDAuMC4wLjAgaXMgbm90IGFsbG93ZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM1NT1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMzY0OlxcdFxcdGlmIChpcHY0X2lzX3plcm9uZXQoc3JjX2lwLVxcdTAwM2VzcmMuaXA0KSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NTpcXHRcXHQgICAgaXB2NF9pc19tdWx0aWNhc3Qoc3JjX2lwLVxcdTAwM2VzcmMuaXA0KSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjYtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1Njk9c3RhdGljIGludCBicl9pcDRfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTc4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU3OTpcXHRpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU4MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzgxOD1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MjYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODI3OlxcdGlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODI4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzkxOD1zdGF0aWMgaW50IGJyX2lwNF9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTMyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzkzMzpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9pcHY0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzNC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NDUtXFx0aWYgKGVyciA9PSAtRU5PTVNHKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ2OlxcdFxcdGlmICghaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0Ny1cXHRcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbXJvdXRlcnNfb25seSA9IDE7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ4OlxcdFxcdH0gZWxzZSBpZiAocGltX2lwdjRfYWxsX3BpbV9yb3V0ZXJzKGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NDktXFx0XFx0XFx0aWYgKGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1BJTSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTAtXFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X3BpbShicm1jdHgsIHBtY3R4LCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzk1MTpcXHRcXHR9IGVsc2UgaWYgKGlwdjRfaXNfYWxsX3Nub29wZXJzKGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTItXFx0XFx0XFx0YnJfaXA0X211bHRpY2FzdF9tcmRfcmN2KGJybWN0eCwgcG1jdHgsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQwNTc9aW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTEtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDkyOlxcdFxcdHJldCA9IGJyX211bHRpY2FzdF9pcHY0X3JjdigqYnJtY3R4LCAqcG1jdHgsIHNrYiwgdmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ3MzA9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3Mi1cXHQgKiBicl9tdWx0aWNhc3RfcmN2IGZpcnN0IGNoZWNrcyBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgYW5kXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzczOlxcdCAqIHJldHVybnMgd2l0aG91dCBjYWxsaW5nIGJyX211bHRpY2FzdF9pcHY0LzZfcmN2IGlmIGl0J3Mgbm90XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc0LVxcdCAqIGVuYWJsZWQuIE1vdmVkIGJvdGggZnVuY3Rpb25zIG91dCBqdXN0IGZvciBzeW1tZXRyeS5cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjUtI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFxcdTAwM2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXJfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA1LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA2OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yMDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzA9c3RhdGljIGlubGluZSBib29sXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzE6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMzMte1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzM0OlxcdHJldHVybiBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIgIT0gbmZfYnJpZGdlLVxcdTAwM2VpcHY0X2RhZGRyO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzM1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mzc2PXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zOTYtXFx0bmZfYnJpZGdlLVxcdTAwM2Vpbl9wcmVyb3V0aW5nID0gMDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM5NzpcXHRpZiAoYnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChza2IsIG5mX2JyaWRnZSkpIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5OC1cXHRcXHRyZWFzb24gPSBpcF9yb3V0ZV9pbnB1dChza2IsIGlwaC1cXHUwMDNlZGFkZHIsIGlwaC1cXHUwMDNlc2FkZHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQ4Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyNC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNTpcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI2LVxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMy1cXHRuZl9icmlkZ2UgPSBuZl9icmlkZ2VfaW5mb19nZXQoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzNDpcXHRuZl9icmlkZ2UtXFx1MDAzZWlwdjRfZGFkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA0LVxcdGlmIChwZiA9PSBORlBST1RPX0lQVjQpIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcwNTpcXHRcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA2LVxcdFxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTgzNT1zdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzAtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4NzE6XFx0XFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQobmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtODcyLVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2LmhcXHUwMDNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9pcCAqaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMjA3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEyMDg6XFx0XFx0cmV0dXJuIGlwdjRfaXNfemVyb25ldChpcC1cXHUwMDNlc3JjLmlwNCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icmlkZ2UuYy0xOC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JyaWRnZS5jLTIwLVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZnRfcmVqZWN0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMtMTUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaFxcdTAwM2VcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTM2ND1zdGF0aWMgdm9pZCBjZXBoX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMzcxLVxcdCAqIGRvZXNuJ3QgZ2V0IGNhbGxlZCBhZ2FpbiB1bnRpbCBjZXBoX2Nvbl92WzEyXV90cnlfd3JpdGUoKSBmaWxsc1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjM3MjpcXHQgKiB0aGUgc29ja2V0IGJ1ZmZlci4gU2VlIG5ldC9pcHY0L3RjcF9pbnB1dC5jOnRjcF9jaGVja19zcGFjZSgpXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMzczLVxcdCAqIGFuZCBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UoKS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTMzNjM9dm9pZCBuZXRpZl9zZXRfdHNvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzM2Ny1cXHRcXHRuZXRpZl9zZXRfZ3NvX21heF9zaXplKGRldiwgc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmM6MzM2ODpcXHRpZiAoc2l6ZSBcXHUwMDNjIFJFQURfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplKSlcXG5uZXQvY29yZS9kZXYuYzozMzY5OlxcdFxcdG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShkZXYsIHNpemUpO1xcbm5ldC9jb3JlL2Rldi5jLTMzNzAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxNDUtXFx0ZGV2LVxcdTAwM2Vncm9fbWF4X3NpemUgPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jOjEyMTQ2OlxcdGRldi1cXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUgPSBHU09fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jOjEyMTQ3OlxcdGRldi1cXHUwMDNlZ3JvX2lwdjRfbWF4X3NpemUgPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jLTEyMTQ4LVxcdGRldi1cXHUwMDNldHNvX21heF9zaXplID0gVFNPX0xFR0FDWV9NQVhfU0laRTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMjk4PXN0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3N0cnVjdF9jaGVjayh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMzMDYtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF90eCwgZ3NvX21heF9zaXplKTtcXG5uZXQvY29yZS9kZXYuYzoxMzMwNzpcXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29faXB2NF9tYXhfc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmMtMTMzMDgtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF90eCwgZ3NvX21heF9zZWdzKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMzM5LVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIGdyb19tYXhfc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmM6MTMzNDA6XFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgZ3JvX2lwdjRfbWF4X3NpemUpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMzQxLVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIHJ4X2hhbmRsZXIpO1xcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfZ3NvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0yMTAtXFx0aWYgKHNpemUgXFx1MDAzYz0gR1NPX0xFR0FDWV9NQVhfU0laRSlcXG5uZXQvY29yZS9kZXYuaDoyMTE6XFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMTItfVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MjIxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfZ3JvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0yMjYtXFx0aWYgKHNpemUgXFx1MDAzYz0gR1JPX0xFR0FDWV9NQVhfU0laRSlcXG5uZXQvY29yZS9kZXYuaDoyMjc6XFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdyb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMjgtfVxcbm5ldC9jb3JlL2Rldi5oLTIyOS1cXG5uZXQvY29yZS9kZXYuaDoyMzA6c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2Rldi5oLTIzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXFxubmV0L2NvcmUvZGV2LmgtMjMyLXtcXG5uZXQvY29yZS9kZXYuaDoyMzM6XFx0LyogZGV2LVxcdTAwM2Vnc29faXB2NF9tYXhfc2l6ZSBpcyByZWFkIGxvY2tsZXNzbHkgZnJvbSBza19zZXR1cF9jYXBzKCkgKi9cXG5uZXQvY29yZS9kZXYuaDoyMzQ6XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMzUtfVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTowMC45MjYxOTAwOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNTgwOTU4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGZvciBGdXp6aW5nIENhbmRpZGF0ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZGVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvS2NvbmZpZ2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgaXMgdGhlIHByaW1hcnkgZmFjdG9yLiBTcGVjaWZpY2FsbHksIGxpbmUgMTE0IGRlZmluZXMgaXQuIFRoZW4sIEkgbmVlZGVkIHRvIHNlZSBpZiBgQ09ORklHX0lQVjZgIHdhcyBhbHNvIHJlbGV2YW50LCBzaW5jZSBJUHY2IG9mdGVuIGludGVyYWN0cyB3aXRoIElQdjQgY29kZS4gQSBjaGVjayBvZiBgbmV0L2lwdjYvS2NvbmZpZ2AgY29uZmlybWVkIGBDT05GSUdfSVBWNmAgY29tcGlsZXMgYG5ldC9pcHY2L2AsIGFuZCBgQ09ORklHX0lORVRgIGNvbXBpbGVzIGBuZXQvaXB2NC9gLlxuXG5JIHRoZW4gdHJhY2VkIHRoZSBmdW5jdGlvbiBhbmQgZm91bmQgdGhhdCBgaXBfY21zZ19yZWN2X29mZnNldGAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHdoaWNoIGdldHMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JTkVUPXlgLiBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IEkgc2VlIGBDT05GSUdfSVBWNmAgbWlnaHQgYmUgaW52b2x2ZWQgYmVjYXVzZSBgdWRwdjZfcmVjdm1zZ2AgYW5kIGBpcHY2X3JlY3ZfZXJyb3JgICphbHNvKiBjYWxsIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBhbmQgYGlwX2Ntc2dfcmVjdmAgaWYgYGluZXRfY21zZ19mbGFncyhpbmV0KWAgaXMgbm9uLXplcm8gKHdoaWNoIGhhcHBlbnMgd2l0aCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMgb3IgSVB2NiBzb2NrZXRzIHdpdGggSVB2NCBjbXNnIGVuYWJsZWQpLiBUaGlzIHRlbGxzIG1lIGl0J3MgaW1wb3J0YW50IHRvIHRlc3Qgd2l0aCBJUHY2IGVuYWJsZWQgYXMgd2VsbC5cblxuTmV4dCwgSSBsb29rZWQgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZC4gVGhlIGRlZmluaXRpb24gaXM6XG5gYGBjXG52b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXG5gYGBcbndpdGggYW4gYEVYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2X29mZnNldClgLlxuXG5JIHRoZW4gbWFkZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgd2VyZSBhbGwgaW4gcGxhY2U6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgW1wiaXBfY21zZ19yZWN2X29mZnNldFwiXSwgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgW1wiSU5FVFwiLCBcIklQVjZcIl0uXG5cbkZpbmFsbHksIEkgbm90aWNlZCB0aGVyZSdzIGEgdmVyc2lvbiBjaGVjayBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AgaW4gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBUaGlzIGlzIGEgKmNyaXRpY2FsKiBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQgcHJvdGVjdHMgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbnZhbGlkIGhlYWRlciBhY2Nlc3Mgd2hlbiBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBhcmUgcHJvY2Vzc2VkIGZvciBub24tSVB2NCBwYWNrZXRzIChsaWtlIElQdjYgcGFja2V0cyBvbiBkdWFsLXN0YWNrIG9yIG1hcHBlZCBzb2NrZXRzLCBvciBjb3JydXB0ZWQgc29ja2V0cykuIEl0IHNlZW1zIGxpa2UgaXQgcHJldmVudHMgY29ycnVwdGVkIHBhY2tldHMgb3IgaW52YWxpZCBJUCB2ZXJzaW9uIGluIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGdvb2QgcGxhY2UgdG8gdGVzdCBmdXp6aW5nIGlucHV0cy5cblxuVGhpcyBhbGwgbG9va3MgdmVyeSBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNTIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjA4NDI4ODQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDQ0MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfY21zZ19yZWN2X29mZnNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGlwX2Ntc2dfcmVjdl9vZmZzZXQoKSB0byB2ZXJpZnkgdGhhdCB0aGUgSVAgaGVhZGVyIHZlcnNpb24gbWF0Y2hlcyBJUFZFUlNJT04gKElQdjQpIGJlZm9yZSBwYXJzaW5nIElQdjQgY29udHJvbCBtZXNzYWdlcyAoY21zZykgZnJvbSB0aGUgc2tiLiBUaGlzIGFmZmVjdHMgc29ja2V0IHJlY3Ztc2cgcHJvY2Vzc2luZyBhY3Jvc3MgSVB2NCBhbmQgZHVhbC1zdGFjayBJUHY2IHNvY2tldHMgYW5kIHByZXZlbnRzIG1hbGZvcm1lZCBvciBjcm9zcy1wcm90b2NvbCBoZWFkZXIgbWlzaW50ZXJwcmV0YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OToyNi4xOTkzMzk2MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE0NjQ2OTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjE5OTc4NTU4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyOTE0NjAxNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NGE1ZWVjMTU2ZmRmY2Q2MGVjZWNlYzc0ODVkNzNjY2ViNGU0NWY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6NDQ6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMDFkMjY0ZThmMzRlYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzQsNiArMTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFmbGFncylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG4gXHRcdGlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjE5OTc4NzUwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA1Mzk2NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIElQIFNvY2tldCBHbHVlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBkaWZmIGFuZCBpdHMgY29udGV4dCwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhOyBzcGVjaWZpY2FsbHksIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSB2aWNpbml0eSBvZiBsaW5lIDE3NCB3aXRoaW4gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBmaWxlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTo0Mi4yNTM3NTYxMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbiAxNjI6XFx0XFx0c2luLnNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMTYzOlxcdFxcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xcbiAxNjQ6XFx0XFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfT1JJR0RTVEFERFIsIHNpemVvZihzaW4pLCBcXHUwMDI2c2luKTtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbiAxNzA6XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IGluZXRfY21zZ19mbGFncyhpbmV0X3NrKHNrKSk7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdGlmICghZmxhZ3MpXFxuIDE3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT04pKVxcbiAxNzg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHQvKiBPcmRlcmVkIGJ5IHN1cHBvc2VkIHVzYWdlIGZyZXF1ZW5jeSAqL1xcbiAxODE6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XFxuIDE4MjpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1BLVElORk87XFxuIDE4NTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAxODY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1RUTCkge1xcbiAxOTA6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3R0bChtc2csIHNrYik7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1RUTDtcXG4gMTkzOlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDE5NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDE5NTpcXHRcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfVE9TKSB7XFxuIDE5ODpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfdG9zKG1zZywgc2tiKTtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX0NNU0dfVE9TO1xcbiAyMDE6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMjAyOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjAzOlxcdFxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19SRUNWT1BUUykge1xcbiAyMDY6XFx0XFx0XFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19SRUNWT1BUUztcXG4gMjA5OlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDIxMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIxMTpcXHRcXHR9XFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVUT1BUUykge1xcbiAyMTQ6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3JldG9wdHMoc29ja19uZXQoc2spLCBtc2csIHNrYik7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1JFVE9QVFM7XFxuIDIxNzpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAyMTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMTk6XFx0XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcXG4gMjIyOlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9zZWN1cml0eShtc2csIHNrYik7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1BBU1NTRUM7XFxuIDIyNTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAyMjY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMjc6XFx0XFx0fVxcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX09SSUdEU1RBRERSKSB7XFxuIDIzMDpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfZHN0YWRkcihtc2csIHNrYik7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX09SSUdEU1RBRERSO1xcbiAyMzM6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMjM0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19DSEVDS1NVTSlcXG4gMjM4OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9jaGVja3N1bShtc2csIHNrYiwgdGxlbiwgb2Zmc2V0KTtcXG4gMjM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTo0Mi4yNTM5MTYxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2MzM1MzMyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJJ20gZXhhbWluaW5nIHRoaXMgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGNoYW5nZS4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGFzIGJlZW4gYWRkZWQ6IGBpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5IGlzICp0aGlzKiBjaGVjayBuZWNlc3Nhcnk/IFdoYXQncyB0aGUgcmF0aW9uYWxlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBiZWluZyBhZGRyZXNzZWQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIHJlY29uc3RydWN0IGl0cyBldm9sdXRpb24uIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBHaXQgaGlzdG9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvbi4gV2hvIGludHJvZHVjZWQgaXQ/IFdoYXQgaXNzdWVzIHdlcmUgZmxhZ2dlZCwgYW5kIHdoYXQgd2FzIHRoZSBqdXN0aWZpY2F0aW9uPyBJZiB0aGUgY29tbWl0IGhpc3RvcnkgZG9lc24ndCBwcm92aWRlIGVub3VnaCBjb250ZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSdsbCBkbyBhIGNvZGViYXNlLXdpZGUgZ3JlcCBmb3IgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBUaGlzIHdpbGwgc2hvdyBtZSBhbGwgdGhlIGNhbGwgc2l0ZXMsIGFsbG93aW5nIG1lIHRvIHNlZSBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIHRoaXMgbmV3IGNoZWNrIGlzIHJlbGV2YW50IHRvIHRob3NlIHVzZXMuIFRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIG9mdGVuIHRoZSBtb3N0IGlsbHVtaW5hdGluZy4gSSBleHBlY3QgdGhlIGNhbGxlcnMgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBndWFyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTA6MTguODg3NDUyMzE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5NzU0OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXAuaD04MTU9dm9pZCBpcHY0X3BrdGluZm9fcHJlcGFyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZHJvcF9kc3QpO1xcbmluY2x1ZGUvbmV0L2lwLmg6ODE2OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC9pcC5oLTgxNy1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaD04Mzg9c3RhdGljIGlubGluZSB2b2lkIGlwX2Ntc2dfcmVjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvaXAuaC04Mzkte1xcbmluY2x1ZGUvbmV0L2lwLmg6ODQwOlxcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIDAsIDApO1xcbmluY2x1ZGUvbmV0L2lwLmgtODQxLX1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQ3PXN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTY4LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTY5OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MC1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0Mi19XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDM6RVhQT1JUX1NZTUJPTChpcF9jbXNnX3JlY3Zfb2Zmc2V0KTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0NC1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTIwMzM9aW50IHVkcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yMTExLVxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXFxubmV0L2lwdjQvdWRwLmM6MjExMjpcXHRcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xcbm5ldC9pcHY0L3VkcC5jLTIxMTMtXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz00NjQ9aW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy01NjEtXFx0XFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2Ni91ZHAuYzo1NjI6XFx0XFx0XFx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrLCBza2IsXFxubmV0L2lwdjYvdWRwLmMtNTYzLVxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIG9mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjUwOjIyLjM1NzIxMzgxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjUwNzE2NjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBVRFAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L3VkcC5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGR1YWwtc3RhY2sgb3IgSVB2NiBzb2NrZXRzIGhhbmRsZSBpbmNvbWluZyBJUHY0IG9yIElQdjYgcGFja2V0cy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoaXM6IGlmIEknbSByZWNlaXZpbmcgYSBwYWNrZXQgYW5kIGBpbmV0X2Ntc2dfZmxhZ3MoaW5ldClgIGlzIHNldCDigJMgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgaW1wbGllcyBJUHY0IGNvbnRyb2wgbWVzc2FnZSBvcHRpb25zIHdlcmUgdXNlZCBvbiBhbiBBRl9JTkVUNiBvciBkdWFsLXN0YWNrIHNvY2tldCDigJMgdGhlIGNvZGUgY2FsbHMgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAuIFRoZSBpc3N1ZSBpcywgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBhbiBJUHY2IHNrYiwgc28gYGlwX2hkcihza2IpYCBpcyAqYWN0dWFsbHkqIHBvaW50aW5nIHRvIGFuIElQdjYgaGVhZGVyLlxuXG5IZXJlJ3MgdGhlIHJ1YjogYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgc3Vic2VxdWVudGx5IGNhbGxzIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGlwX2Ntc2dfcmVjdl9vcHRzYCwgYGlwX2Ntc2dfcmVjdl9wa3RpbmZvYCwgYW5kIHNvIG9uLiBUaGVzZSBmdW5jdGlvbnMsIGNyaXRpY2FsbHksIGFsbCBzZWVtIHRvIHRyZWF0IGBpcF9oZHIoc2tiKWAgYXMgYSBgc3RydWN0IGlwaGRyYCDigJMgdGhhdCBpcywgYW4gSVB2NCBoZWFkZXIhIE5vdywgaWYgdGhlIGluY29taW5nIHBhY2tldCBpcyBhY3R1YWxseSBJUHY2IChhbmQgYHZlcnNpb24gPT0gNmApLCB3ZSdyZSBlZmZlY3RpdmVseSBtaXNpbnRlcnByZXRpbmcgdGhlIG1lbW9yeS4gVGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSB0aGluZ3MuIFdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIsIGFjY2Vzc2luZyBpbnZhbGlkIGZpZWxkcywgb3IganVzdCBnZW5lcmFsbHkgbWFraW5nIGluY29ycmVjdCBkZWNpc2lvbnMgYmFzZWQgb24gbWFsZm9ybWVkIGRhdGEuXG5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0IHRob3NlIGBpcF9jbXNnX3JlY3ZfKmAgZnVuY3Rpb25zIGFyZSBkb2luZyBpbiBkZXRhaWwsIGJlY2F1c2UgSSBzdXNwZWN0IHRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgdHlwZSBjb25mdXNpb24gdnVsbmVyYWJpbGl0eSBhbmQgdGhlIHJhbWlmaWNhdGlvbnMgY291bGQgYmUgc2VyaW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQganVzdCBob3cgbXVjaCBjb250cm9sIGFuIGF0dGFja2VyIGNvdWxkIHBvdGVudGlhbGx5IGdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTE6MjguODY0Mzg0MTc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHQvKlxcbiAgNTE6XFx0ICpcXHRTT0xfSVAgY29udHJvbCBtZXNzYWdlcy5cXG4gIDUyOlxcdCAqL1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcGt0aW5mbyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgaW5fcGt0aW5mbyBpbmZvID0gKlBLVElORk9fU0tCX0NCKHNrYik7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGluZm8uaXBpX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfUEtUSU5GTywgc2l6ZW9mKGluZm8pLCBcXHUwMDI2aW5mbyk7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0aW50IHR0bCA9IGlwX2hkcihza2IpLVxcdTAwM2V0dGw7XFxuICA2NjpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfVFRMLCBzaXplb2YoaW50KSwgXFx1MDAyNnR0bCk7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90b3Moc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1RPUywgMSwgXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2V0b3MpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfb3B0cyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuID09IDApXFxuICA3NzpcXHRcXHRcXHRyZXR1cm47XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWT1BUUywgSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuLFxcbiAgODA6XFx0XFx0XFx0IGlwX2hkcihza2IpICsgMSk7XFxuICA4MTpcXHR9XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3JldG9wdHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuICA4NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDg2OlxcdHtcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGNoYXIgb3B0YnVmW3NpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyA0MF07XFxuICA4ODpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gKHN0cnVjdCBpcF9vcHRpb25zICopb3B0YnVmO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdGlmIChpcF9vcHRpb25zX2VjaG8obmV0LCBvcHQsIHNrYikpIHtcXG4gIDk0OlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19DVFJVTkM7XFxuICA5NTpcXHRcXHRcXHRyZXR1cm47XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXHRpcF9vcHRpb25zX3VuZG8ob3B0KTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFVE9QVFMsIG9wdC1cXHUwMDNlb3B0bGVuLCBvcHQtXFx1MDAzZV9fZGF0YSk7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDEwMzpcXHR7XFxuIDEwNDpcXHRcXHRpbnQgdmFsO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VmcmFnX21heF9zaXplID09IDApXFxuIDEwNzpcXHRcXHRcXHRyZXR1cm47XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHZhbCA9IElQQ0Ioc2tiKS1cXHUwMDNlZnJhZ19tYXhfc2l6ZTtcXG4gMTEwOlxcdFxcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWRlJBR1NJWkUsIHNpemVvZih2YWwpLCBcXHUwMDI2dmFsKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2NoZWNrc3VtKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTE0OlxcdFxcdFxcdFxcdFxcdCAgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuIDExNTpcXHR7XFxuIDExNjpcXHRcXHRfX3dzdW0gY3N1bSA9IHNrYi1cXHUwMDNlY3N1bTtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX0NPTVBMRVRFKVxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAob2Zmc2V0ICE9IDApIHtcXG4gMTIyOlxcdFxcdFxcdGludCB0ZW5kX29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0bGVuO1xcbiAxMjM6XFx0XFx0XFx0Y3N1bSA9IGNzdW1fc3ViKGNzdW0sIHNrYl9jaGVja3N1bShza2IsIHRlbmRfb2ZmLCBvZmZzZXQsIDApKTtcXG4gMTI0OlxcdFxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX0NIRUNLU1VNLCBzaXplb2YoX193c3VtKSwgXFx1MDAyNmNzdW0pO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0XFxuIDEyOTpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMzA6XFx0e1xcbiAxMzE6XFx0XFx0c3RydWN0IGxzbV9jb250ZXh0IGN0eDtcXG4gMTMyOlxcdFxcdHUzMiBzZWNpZDtcXG4gMTMzOlxcdFxcdGludCBlcnI7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKE5VTEwsIHNrYiwgXFx1MDAyNnNlY2lkKTtcXG4gMTM2OlxcdFxcdGlmIChlcnIpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm47XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChzZWNpZCwgXFx1MDAyNmN0eCk7XFxuIDE0MDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTQxOlxcdFxcdFxcdHJldHVybjtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIFNDTV9TRUNVUklUWSwgY3R4LmxlbiwgY3R4LmNvbnRleHQpO1xcbiAxNDQ6XFx0XFx0c2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoXFx1MDAyNmN0eCk7XFxuIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdF9fYmUxNiBfcG9ydHNbMl0sICpwb3J0cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTE6MjguODY0NTU2NzI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0ODEyMTU4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBIZWFkZXIgU2FuaXR5IENoZWNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBxdWljayBzYW5pdHkgY2hlY2sgYXQgdGhlIHN0YXJ0IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YC4gVGhlIGtleSB0aGluZyBpczogYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpIHJldHVybjtgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKmFueSogdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCdzIGdvIHRocm91Z2ggaXQgc3lzdGVtYXRpY2FsbHkuXG5cbkZpcnN0LCBkb2VzIGl0IGNyZWF0ZSBhbnkgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW50cm9kdWNlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vcGUuIGBpcF9oZHIoc2tiKWAgYWNjZXNzZXMgdGhlIElQIGhlYWRlciB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIsIGFuZCBgdmVyc2lvbmAgaXMgYSBmaWVsZCB3aXRoaW4gdGhhdCBJUCBoZWFkZXIgc3RydWN0dXJlLiBJZiB0aGUgSVAgdmVyc2lvbiBpc24ndCA0ICh3aGljaCBgSVBWRVJTSU9OYCBpcyBkZWZpbmVkIGFzKSwgaXQganVzdCByZXR1cm5zIOKAkyBubyBjbXNncyBhcmUgdG91Y2hlZC5cblxuU2Vjb25kLCBkb2VzIGl0ICpleHBvc2UqIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4gVGhpcyBjaGVjayAqcHJldmVudHMqIHByb2Nlc3Npbmcgb2Ygbm9uLUlQdjQgcGFja2V0cyBpbiB0aGUgSVB2NCBjbXNnIHJlY2VpdmVyLiBUaGF0J3MgYSAqZ29vZCogdGhpbmcuXG5cblRoaXJkLCBkb2VzIGl0IG1lc3Mgd2l0aCBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgbGVha2VkPyBOb3BlLiBJdCBqdXN0IHNraXBzIHByb2Nlc3NpbmcsIHdoaWNoIG1lYW5zIGl0IHNraXBzIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuRm91cnRoLCBhcmUgdGhlcmUgYW55IHN0cnVjdHVyZSBmaWVsZHMgb3IgbWVtb3J5IHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vIG5ldyBjbXNncyBhcmUgYmVpbmcgY3JlYXRlZCBvciBjb3BpZWQuIEluIGZhY3QsIGl0IHNraXBzIGNhbGxpbmcgYHB1dF9jbXNnYCBmb3IgcGFja2V0cyB0aGF0IGZhaWwgdGhlIGNoZWNrLlxuXG5TbywgdGhpcyBsb29rcyBwcmV0dHkgc2FmZS4gTGV0J3MgbWFrZSBzdXJlIGl0J3Mgbm90IGEgS0FTQU4vS01TQU4gdHlwZSBpc3N1ZTogVGhpcyBjaGVjayBwcmV2ZW50cyBtaXNpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgaGVhZGVycyB3aGVuIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBjYWxsZWQgb24gbm9uLUlQdjQgcGFja2V0cy4gVGhpcyBpcyBwdXJlIGxvZ2ljIHZhbGlkYXRpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIG9yaWdpbmFsIGZvdXIgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSoqOiBObyBuZXcgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKio6IFRoZSBjb25kaXRpb24gY2hlY2tzIHRoZSBJUCB2ZXJzaW9uIGZpZWxkLCB3aGljaCBjb21lcyBmcm9tIHRoZSByZWNlaXZlZCBwYWNrZXQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbi5cbjQuICAqKkJvdW5kcyBjaGVja3MvbG9naWMqKjogTm8gY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgY2xlYXIgYW5kIHVuYW1iaWd1b3VzLiBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI5LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjUxOjM1LjM0NTc3NjU1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVxcdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTmAgYXQgdGhlIGVudHJ5IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHRvIHJldHVybiBlYXJseSBpZiB0aGUgcGFja2V0IGlzIG5vdCBhbiBJUHY0IHBhY2tldCAoZS5nLiB3aGVuIHByb2Nlc3NpbmcgZHVhbC1zdGFjayBvciBJUHY2IHNrYnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 14:52:14 +0000 UTC FinishedAt: 2026-08-29 15:51:36 +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": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2188569e7e1b0bc3f3b557dc97ab7a02befc11c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "4ac35d81-33dd-4d36-8c5f-660f6f051c2b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_cmsg_recv_offset" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5pbmRleCBhNTVlZjMyN2VjOTMyLi4wMWQyNjRlOGYzNGVhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuQEAgLTE3NCw2ICYjNDM7MTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFmbGFncylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG4gXHRcdGlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9jbXNnX3JlY3Zfb2Zmc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGlwX2Ntc2dfcmVjdl9vZmZzZXQoKSB0byB2ZXJpZnkgdGhhdCB0aGUgSVAgaGVhZGVyIHZlcnNpb24gbWF0Y2hlcyBJUFZFUlNJT04gKElQdjQpIGJlZm9yZSBwYXJzaW5nIElQdjQgY29udHJvbCBtZXNzYWdlcyAoY21zZykgZnJvbSB0aGUgc2tiLiBUaGlzIGFmZmVjdHMgc29ja2V0IHJlY3Ztc2cgcHJvY2Vzc2luZyBhY3Jvc3MgSVB2NCBhbmQgZHVhbC1zdGFjayBJUHY2IHNvY2tldHMgYW5kIHByZXZlbnRzIG1hbGZvcm1lZCBvciBjcm9zcy1wcm90b2NvbCBoZWFkZXIgbWlzaW50ZXJwcmV0YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NGE1ZWVjMTU2ZmRmY2Q2MGVjZWNlYzc0ODVkNzNjY2ViNGU0NWY1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTU6NDQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwppbmRleCBhNTVlZjMyN2VjOTMyLi4wMWQyNjRlOGYzNGVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAogCWlmICghZmxhZ3MpCiAJCXJldHVybjsKIAomIzQzOwlpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktJmd0O3ZlcnNpb24gIT0gSVBWRVJTSU9OKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBPcmRlcmVkIGJ5IHN1cHBvc2VkIHVzYWdlIGZyZXF1ZW5jeSAqLwogCWlmIChmbGFncyAmYW1wOyBJUF9DTVNHX1BLVElORk8pIHsKIAkJaXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTb2NrZXQgR2x1ZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFuZCBpdHMgY29udGV4dC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXBfY21zZ19yZWN2X29mZnNldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLSZndDt2ZXJzaW9uICE9IElQVkVSU0lPTikpIHJldHVybjtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhIGNydWNpYWwgc2VjdXJpdHkgb3Igc3RhYmlsaXR5IG1lYXN1cmUgcmVsYXRlZCB0byBJUHY0IHBhY2tldCBoYW5kbGluZywgcHJvYmFibHkgZGVzaWduZWQgdG8gYXZvaWQgcHJvY2Vzc2luZyBtYWxmb3JtZWQgcGFja2V0cy4gSXQmIzM5O3MgYSBjb25kaXRpb25hbCBjaGVjayBvbiB0aGUgSVAgaGVhZGVyIHZlcnNpb24sIGVuc3VyaW5nIGl0JiMzOTtzIHRoZSBleHBlY3RlZCB2ZXJzaW9uIChgSVBWRVJTSU9OYCwgcHJlc3VtYWJseSA0KS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGVycm9yIGNvbmRpdGlvbiB3YXMgYWRkcmVzc2VkIHdoZXJlIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCBJUCBwYWNrZXQgd2FzIHNvbWVob3cgZ2V0dGluZyB0aHJvdWdoLgoKSSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBkb2VzIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB0byBmdWxseSBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hlY2suIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbnRyb2wgbWVzc2FnZSBmbGFncyBsaWtlIGBJUF9DTVNHX1BLVElORk9gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhpcyBuZXcgY2hlY2sgcHJldmVudHMgc29tZSBzb3J0IG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGxpa2UgYSBjcmFzaCwgb3IgYW4gaW5mb3JtYXRpb24gbGVhaywgaWYgYW4gaW52YWxpZCBwYWNrZXQgd2l0aCBhIG5vbi1JUHY0IElQIHZlcnNpb24gd2VyZSBzb21laG93IHJlY2VpdmVkIGJ5IHRoZSBzb2NrZXQuIFNvLCB0aGUgZ29hbCBpcyB0byBzZWUgd2hhdCBraW5kIG9mIGRhbWFnZSBjb3VsZCBiZSBjYXVzZWQgYnkgYmFkIHBhY2tldHMgbWFraW5nIHRoZWlyIHdheSBpbnRvIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiAxNjI6XHRcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAxNjM6XHRcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xuIDE2NDpcdFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xuIDE2NTpcdFxuIDE2NjpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXHUwMDI2c2luKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIDE3MDpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbiAxNzE6XHR7XG4gMTcyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKTtcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICghZmxhZ3MpXG4gMTc1Olx0XHRcdHJldHVybjtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4gMTc4Olx0XHRcdHJldHVybjtcbiAxNzk6XHRcbiAxODA6XHRcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gMTgxOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIDE4MjpcdFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4gMTgzOlx0XG4gMTg0Olx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfUEtUSU5GTztcbiAxODU6XHRcdFx0aWYgKCFmbGFncylcbiAxODY6XHRcdFx0XHRyZXR1cm47XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG4gMTkwOlx0XHRcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RUTDtcbiAxOTM6XHRcdFx0aWYgKCFmbGFncylcbiAxOTQ6XHRcdFx0XHRyZXR1cm47XG4gMTk1Olx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVE9TKSB7XG4gMTk4Olx0XHRcdGlwX2Ntc2dfcmVjdl90b3MobXNnLCBza2IpO1xuIDE5OTpcdFxuIDIwMDpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RPUztcbiAyMDE6XHRcdFx0aWYgKCFmbGFncylcbiAyMDI6XHRcdFx0XHRyZXR1cm47XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcbiAyMDY6XHRcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xuIDIwNzpcdFxuIDIwODpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFQ1ZPUFRTO1xuIDIwOTpcdFx0XHRpZiAoIWZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaXBfY21zZ19yZWN2X29mZnNldGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBmdW5jdGlvbmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuLCBjcnVjaWFsbHksIHdoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBmb3IuIElzIGl0IGhhbmRsaW5nIGFuY2lsbGFyeSBkYXRhPyBBcmUgd2UgZGVhbGluZyB3aXRoIElQIG9wdGlvbnMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBUaGUgY29udGV4dCBpcyBrZXkgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgcHVycG9zZSB3aWxsIGluZm9ybSBteSBhc3N1bXB0aW9ucyBhcm91bmQgcG90ZW50aWFsIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBmdXR1cmUgb3B0aW1pemF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNvZGUgc2VhcmNoIGFuZCBzZWUgd2hhdCB0aGUgaW1tZWRpYXRlIGxhbmRzY2FwZSBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2Ntc2dfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcC5oPTgxNT12b2lkIGlwdjRfcGt0aW5mb19wcmVwYXJlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBkcm9wX2RzdCk7XG5pbmNsdWRlL25ldC9pcC5oOjgxNjp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9pcC5oLTgxNy1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpO1xuLS1cbmluY2x1ZGUvbmV0L2lwLmg9ODM1PXZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCxcbi0tXG5pbmNsdWRlL25ldC9pcC5oLTgzNy1cbmluY2x1ZGUvbmV0L2lwLmg6ODM4OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvaXAuaC04Mzkte1xuaW5jbHVkZS9uZXQvaXAuaDo4NDA6XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2tiLVx1MDAzZXNrLCBza2IsIDAsIDApO1xuaW5jbHVkZS9uZXQvaXAuaC04NDEtfVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTMtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjU0OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9wa3RpbmZvKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTUte1xuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjItXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYzOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02NC17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02OC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6Njk6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3RvcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTcwLXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTczLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo3NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfb3B0cyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTc1LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTgzLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo4NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcmV0b3B0cyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtODUtXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTAyOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMy17XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMTItXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjExMzpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfY2hlY2tzdW0oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMTQtXHRcdFx0XHQgIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTI4LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMjk6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3NlY3VyaXR5KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTMwLXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0Ni1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ4LXtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE2OC1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTY5OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTcwLVx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE4MS1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE4MjpcdFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODMtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODktXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE5MDpcdFx0aXBfY21zZ19yZWN2X3R0bChtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5MS1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5Ny1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19UT1MpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTk4Olx0XHRpcF9jbXNnX3JlY3ZfdG9zKG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTk5LVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjA1LVx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX1JFQ1ZPUFRTKSB7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjIwNjpcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMDctXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTMtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVUT1BUUykge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMTQ6XHRcdGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHNvY2tfbmV0KHNrKSwgbXNnLCBza2IpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTUtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMjEtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEFTU1NFQykge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMjI6XHRcdGlwX2Ntc2dfcmVjdl9zZWN1cml0eShtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyMy1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyOS1cdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzA6XHRcdGlwX2Ntc2dfcmVjdl9kc3RhZGRyKG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjMxLVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM3LVx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX0NIRUNLU1VNKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzg6XHRcdGlwX2Ntc2dfcmVjdl9jaGVja3N1bShtc2csIHNrYiwgdGxlbiwgb2Zmc2V0KTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM5LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDAtXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVkZSQUdTSVpFKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDE6XHRcdGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShtc2csIHNrYik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0Mi19XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjI0MzpFWFBPUlRfU1lNQk9MKGlwX2Ntc2dfcmVjdl9vZmZzZXQpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDQtXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz01MjY9aW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01NzMtXHRcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo1NzQ6XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTc1LVx0fVxuLS1cbm5ldC9pcHY0L3BpbmcuYz04NDI9aW50IHBpbmdfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3BpbmcuYy04ODgtXHRcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaXNrKSlcbm5ldC9pcHY0L3BpbmcuYzo4ODk6XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY0L3BpbmcuYy04OTAtXG4tLVxubmV0L2lwdjQvcGluZy5jLTkxNS1cdFx0XHQgaW5ldF9jbXNnX2ZsYWdzKGlzaykpXG5uZXQvaXB2NC9waW5nLmM6OTE2Olx0XHRcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XG5uZXQvaXB2NC9waW5nLmMtOTE3LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3Jhdy5jPTc0OT1zdGF0aWMgaW50IHJhd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY0L3Jhdy5jLTc5MC1cdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXG5uZXQvaXB2NC9yYXcuYzo3OTE6XHRcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XG5uZXQvaXB2NC9yYXcuYy03OTItXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMDMzPWludCB1ZHBfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIxMTEtXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2lwdjQvdWRwLmM6MjExMjpcdFx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrLCBza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcbm5ldC9pcHY0L3VkcC5jLTIxMTMtXG4tLVxubmV0L2lwdjYvZGF0YWdyYW0uYz00NTU9aW50IGlwdjZfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbi0tXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTUyNy1cdFx0XHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKSlcbm5ldC9pcHY2L2RhdGFncmFtLmM6NTI4Olx0XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9pcHY2L2RhdGFncmFtLmMtNTI5LVx0XHR9XG4tLVxubmV0L2lwdjYvdWRwLmM9NDY0PWludCB1ZHB2Nl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9pcHY2L3VkcC5jLTU2MS1cdFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcbm5ldC9pcHY2L3VkcC5jOjU2MjpcdFx0XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYixcbm5ldC9pcHY2L3VkcC5jLTU2My1cdFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcbi0tXG5uZXQvbDJ0cC9sMnRwX2lwLmM9NTM5PXN0YXRpYyBpbnQgbDJ0cF9pcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9sMnRwL2wydHBfaXAuYy01NzUtXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2wydHAvbDJ0cF9pcC5jOjU3NjpcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbm5ldC9sMnRwL2wydHBfaXAuYy01NzctXHRpZiAoZmxhZ3MgXHUwMDI2IE1TR19UUlVOQylcbi0tXG5uZXQvc3VucnBjL3N2Y3NvY2suYz00ODI9c3RhdGljIHZvaWQgc3ZjX3RjcF9oYW5kc2hha2Uoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KVxuLS1cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0My0vKlxubmV0L3N1bnJwYy9zdmNzb2NrLmM6NTQ0OiAqIFNlZSBuZXQvaXB2Ni9pcF9zb2NrZ2x1ZS5jIDogaXBfY21zZ19yZWN2X3BrdGluZm9cbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0NS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTmV0d29ya2luZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgY29kZSBzbmlwcGV0IGNoZWNrcyB0aGUgSVAgdmVyc2lvbiBvZiBhIHJlY2VpdmVkIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgaXNzdWVzIHdoZW4gcHJvY2Vzc2luZyBjb250cm9sIG1lc3NhZ2VzIChjbXNncykgb24gc29ja2V0cyB0aGF0IG1pZ2h0IGJlIHJlY2VpdmluZyBJUHY2IHBhY2tldHMsIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgc3BlY2lmaWMgbGluZSwgYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YCwgaXMgdGhlIGtleS4gSXQgc2VlbXMgbGlrZSBzb21lb25lIGFkZGVkIHRoaXMgY2hlY2sgdG8gcHJldmVudCBhY2Nlc3NpbmcgSVB2NCBoZWFkZXIgZmllbGRzIChsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzLCBUVEwsIFRPUykgb24gYW4gYHNrYmAgdGhhdCAqaXNuJiMzOTt0KiBhY3R1YWxseSBhbiBJUHY0IHBhY2tldC4gQWNjZXNzaW5nIHRoZXNlIGZpZWxkcyBvbiBhIG5vbi1JUHY0IHBhY2tldCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IGJlc3QsIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBvZiBkYXRhLgoKR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGlzIGNsZWFybHkgYSBjcml0aWNhbCBmaXggd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBgaXBfY21zZ19yZWN2X29mZnNldGAgd2hpY2ggZG9lcyB0aGUgY21zZyBwcm9jZXNzaW5nLCBpcyBjYWxsZWQgZHVyaW5nIGByZWN2bXNnYCB3aGVuIGNvbnRyb2wgbWVzc2FnZXMgYXJlIGVuYWJsZWQgb24gc29ja2V0cyBhbmQgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3IgSVB2NC9JUHY2IHNvY2tldCBjbXNnIHByb2Nlc3NpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBJcyBpdCBjb3JlIG5ldHdvcmtpbmc/IFllcCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIHN0YW5kYXJkIGBBRl9JTkVUYC9gQUZfSU5FVDZgIHNvY2tldHMgdXNpbmcgYHJlY3Ztc2dgIHdpdGggY21zZyBmbGFncyBsaWtlIGBJUF9QS1RJTkZPYCwgYElQX1RUTGAsIGV0Yy4gSXMgaXQgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgb3IgY3Jvc3MtcHJvdG9jb2wgY21zZyBwYXJzaW5nIGVycm9ycy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaXBfY21zZ19yZWN2X29mZnNldGAuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBJdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGByZWN2bXNnYCB3aXRoIGNtc2cgb3B0aW9ucyBlbmFibGVkIG9uIHRoZSBzb2NrZXQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3JlY3Ztc2dgLCBgdWRwX3JlY3Ztc2dgLCBgcmF3X3JlY3Ztc2dgLCBgcGluZ19yZWN2bXNnYC4gQW5kIGNyaXRpY2FsbHksIGl0IGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC1wcmlvcml0eSB0YXJnZXQuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc29ja2dsdWVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4Olx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgcmVsYXRlcyB0byB0aGF0IGJ1aWxkIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQnVpbGQgU3lzdGVtKioKCk9rYXksIHNvIGBpcF9zb2NrZ2x1ZS5vYCBpcyBiZWluZyBidWlsdC4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIGJ1aWx0LiBUaGUgYnVpbGQgc3lzdGVtIHRlbGxzIG1lIGl0JiMzOTtzIGxpbmtlZCBpbiB2aWEgYG9iai15YCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHN0YXRpY2FsbHkgY29tcGlsZWQgaW50byB0aGUgSVB2NCBtb2R1bGUuIE5vdywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBuZXQvaXB2NC9NYWtlZmlsZWAgaXMgaW5jbHVkZWQgaW4gdGhlIGxhcmdlciBidWlsZC4gTGV0IG1lIGp1bXAgYmFjayB1cCB0aGUgaGllcmFyY2h5IGFuZCBleGFtaW5lIGBuZXQvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2sgYnVpbGQgbG9naWMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIHJvb3QgbWFrZSBmaWxlIGlmIEkgd2FudCB0byBoYXZlIGEgaG9saXN0aWMgcGljdHVyZSBvZiB0aGUgYnVpbGQgb3JkZXIgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkyOTggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9LY29uZmlnPTExND1jb25maWcgSU5FVFxuLS1cbm5ldC9LY29uZmlnLTEzMC1cdCAgYmVoYXZpb3Igb2YgdGhlIFRDUC9JUCBjb2RlIGJ5IHdyaXRpbmcgdG8gdGhlICh2aXJ0dWFsKSBmaWxlcyBpblxubmV0L0tjb25maWc6MTMxOlx0ICAvcHJvYy9zeXMvbmV0L2lwdjQvKjsgdGhlIG9wdGlvbnMgYXJlIGV4cGxhaW5lZCBpbiB0aGUgZmlsZVxubmV0L0tjb25maWctMTMyLVx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XHUwMDNlLlxuLS1cbm5ldC9LY29uZmlnPTEzNj1pZiBJTkVUXG5uZXQvS2NvbmZpZzoxMzc6c291cmNlIFwmIzM0O25ldC9pcHY0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTEzOC1zb3VyY2UgXCYjMzQ7bmV0L2lwdjYvS2NvbmZpZ1wmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTI0Nz1zb3VyY2UgXCYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZzoyNDg6c291cmNlIFwmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy0yNDktc291cmNlIFwmIzM0O25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnXCYjMzQ7XG4tLVxubmV0L01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXHRcdCYjNDM7PSBpcHY0L1xubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXHRcdCYjNDM7PSB0bHMvXG4tLVxubmV0L2F0bS9icjI2ODQuYz0zMz1zdGF0aWMgdm9pZCBza2JfZGVidWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYXRtL2JyMjY4NC5jLTUyLVxubmV0L2F0bS9icjI2ODQuYzo1MzpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NFtdID0geyBFVEhFUlRZUEVfSVBWNCB9O1xubmV0L2F0bS9icjI2ODQuYy01NC1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NltdID0geyBFVEhFUlRZUEVfSVBWNiB9O1xuLS1cbm5ldC9hdG0vYnIyNjg0LmM9NTc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkW10gPSB7IFBBRF9CUklER0VEIH07XG5uZXQvYXRtL2JyMjY4NC5jOjU4OnN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxsY19vdWlfaXB2NFtdID0geyBMTEMsIFNOQVBfUk9VVEVELCBFVEhFUlRZUEVfSVBWNCB9O1xubmV0L2F0bS9icjI2ODQuYy01OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsbGNfb3VpX2lwdjZbXSA9IHsgTExDLCBTTkFQX1JPVVRFRCwgRVRIRVJUWVBFX0lQVjYgfTtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTIwMj1zdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9hdG0vYnIyNjg0LmMtMjA4LVx0XHQoKGJyZGV2LVx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/XG5uZXQvYXRtL2JyMjY4NC5jOjIwOTpcdFx0XHRzaXplb2YobGxjX291aV9waWRfcGFkKSA6IHNpemVvZihsbGNfb3VpX2lwdjQpKSA6XG5uZXQvYXRtL2JyMjY4NC5jLTIxMC1cdFx0KChicmRldi1cdTAwM2VwYXlsb2FkID09IHBfYnJpZGdlZCkgPyBCUjI2ODRfUEFEX0xFTiA6IDApO1xuLS1cbm5ldC9hdG0vYnIyNjg0LmMtMjMwLVxubmV0L2F0bS9icjI2ODQuYzoyMzE6XHRcdFx0c2tiX3B1c2goc2tiLCBzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTIzMi1cdFx0XHRzd2l0Y2ggKHByb3QpIHtcbm5ldC9hdG0vYnIyNjg0LmMtMjMzLVx0XHRcdGNhc2UgRVRIX1BfSVA6XG5uZXQvYXRtL2JyMjY4NC5jOjIzNDpcdFx0XHRcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbGxjX291aV9pcHY0LFxubmV0L2F0bS9icjI2ODQuYzoyMzU6XHRcdFx0XHRcdFx0XHRzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTIzNi1cdFx0XHRcdGJyZWFrO1xuLS1cbm5ldC9hdG0vYnIyNjg0LmM9NDIyPXN0YXRpYyB2b2lkIGJyMjY4NF9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2F0bS9icjI2ODQuYy00NTEtXHRcdC8qIGFjY2VwdCBwYWNrZXRzIHRoYXQgaGF2ZSBcJiMzNDtpcHZbNDZdXCYjMzQ7IGluIHRoZSBzbmFwIGhlYWRlciAqL1xubmV0L2F0bS9icjI2ODQuYzo0NTI6XHRcdGlmICgoc2tiLVx1MDAzZWxlbiBcdTAwM2U9IChzaXplb2YobGxjX291aV9pcHY0KSkpIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9icjI2ODQuYzo0NTM6XHRcdCAgICAobWVtY21wKHNrYi1cdTAwM2VkYXRhLCBsbGNfb3VpX2lwdjQsXG5uZXQvYXRtL2JyMjY4NC5jOjQ1NDpcdFx0XHQgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHtcbm5ldC9hdG0vYnIyNjg0LmMtNDU1LVx0XHRcdGlmIChtZW1jbXAoc2tiLVx1MDAzZWRhdGEgJiM0MzsgNiwgZXRoZXJ0eXBlX2lwdjYsXG4tLVxubmV0L2F0bS9icjI2ODQuYy00NTctXHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcbm5ldC9hdG0vYnIyNjg0LmM6NDU4Olx0XHRcdGVsc2UgaWYgKG1lbWNtcChza2ItXHUwMDNlZGF0YSAmIzQzOyA2LCBldGhlcnR5cGVfaXB2NCxcbm5ldC9hdG0vYnIyNjg0LmM6NDU5Olx0XHRcdFx0XHRzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKVxubmV0L2F0bS9icjI2ODQuYy00NjAtXHRcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4tLVxubmV0L2F0bS9icjI2ODQuYy00NjItXHRcdFx0XHRnb3RvIGVycm9yO1xubmV0L2F0bS9icjI2ODQuYzo0NjM6XHRcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YobGxjX291aV9pcHY0KSk7XG5uZXQvYXRtL2JyMjY4NC5jLTQ2NC1cdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbi0tXG5uZXQvYXRtL2JyMjY4NC5jPTY0NT1zdGF0aWMgdm9pZCBicjI2ODRfc2V0dXBfcm91dGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxubmV0L2F0bS9icjI2ODQuYy02NDktXHRicmRldi1cdTAwM2VuZXRfZGV2ID0gbmV0ZGV2O1xubmV0L2F0bS9icjI2ODQuYzo2NTA6XHRuZXRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKGxsY19vdWlfaXB2NCk7IC8qIHdvcnN0IGNhc2UgKi9cbm5ldC9hdG0vYnIyNjg0LmMtNjUxLVx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZicjI2ODRfbmV0ZGV2X29wc19yb3V0ZWQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9Mzk5PWJhdGFkdl9kYXRfZW50cnlfaGFzaF9maW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00MzktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDA6ICogQGlwOiBpcHY0IHRvIGFkZC9lZGl0XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDE6ICogQG1hY19hZGRyOiBtYWMgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIGdpdmVuIGlwdjRcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTQ0Mi0gKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz02Mzk9c3RhdGljIHZvaWQgYmF0YWR2X2Nob29zZV9uZXh0X2NhbmRpZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTY5OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjY5OTogKiBAaXBfZHN0OiBpcHY0IHRvIGxvb2sgdXAgaW4gdGhlIERIVFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNzAwLSAqIEB2aWQ6IFZMQU4gaWRlbnRpZmllclxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTEwODI9c3RhdGljIHUxNiBiYXRhZHZfYXJwX2dldF90eXBlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTEyNi1cdGlwX2RzdCA9IGJhdGFkdl9hcnBfaXBfZHN0KHNrYiwgaGRyX3NpemUpO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyNzpcdGlmIChpcHY0X2lzX2xvb3BiYWNrKGlwX3NyYykgfHwgaXB2NF9pc19tdWx0aWNhc3QoaXBfc3JjKSB8fFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyODpcdCAgICBpcHY0X2lzX2xvb3BiYWNrKGlwX2RzdCkgfHwgaXB2NF9pc19tdWx0aWNhc3QoaXBfZHN0KSB8fFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyOTpcdCAgICBpcHY0X2lzX3plcm9uZXQoaXBfc3JjKSB8fCBpcHY0X2lzX2xiY2FzdChpcF9zcmMpIHx8XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMTMwOlx0ICAgIGlwdjRfaXNfemVyb25ldChpcF9kc3QpIHx8IGlwdjRfaXNfbGJjYXN0KGlwX2RzdCkpXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTMxLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MTg5PWludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMTUtXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3Qud2FudF9hbGxfdW5zbm9vcGFibGVzX2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIxNjpcdElOSVRfSExJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC53YW50X2FsbF9pcHY0X2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIxNy1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC53YW50X2FsbF9pcHY2X2xpc3QpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYz0zOTI9dm9pZCBiYXRhZHZfc2tiX3NldF9wcmlvcml0eShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjUtXHRcdFx0cmV0dXJuO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjQyNjpcdFx0cHJpbyA9IChpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcikgXHUwMDI2IDB4ZmMpIFx1MDAzZVx1MDAzZSA1O1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTQyNy1cdFx0YnJlYWs7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz03OTE9c3RhdGljIGludCBiYXRhZHZfbWVzaGlmX2luaXRfbGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODIxLVx0YXRvbWljX3NldChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfdW5zbm9vcGFibGVzLCAwKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODIyOlx0YXRvbWljX3NldChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfaXB2NCwgMCk7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMy1cdGF0b21pY19zZXQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjYsIDApO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTg0PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYmF0YWR2X21jYXN0X2dldF9icmlkZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTktLyoqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMDA6ICogYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KCkgLSBnZXQgbWNhc3Qgcm91dGVyIGZsYWdzIGZyb21cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMS0gKiAgbm9kZSBmb3IgSVB2NFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwOS0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMDpzdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTEte1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2ND1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE3MS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE3MjpcdGZsYWdzIHw9IGJhdGFkdl9tY2FzdF9tbGFfcnRyX2ZsYWdzX21lc2hpZl9nZXRfaXB2NChkZXYpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTczLVx0ZmxhZ3MgfD0gYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KGRldik7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9Mjc0PWJhdGFkdl9tY2FzdF9tbGFfZmxhZ3NfZ2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMjk1LVx0bWxhX2ZsYWdzLmJyaWRnZWQgPSAxO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mjk2Olx0cXI0ID0gXHUwMDI2bWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NDtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5Ny1cdHFyNiA9IFx1MDAyNm1sYV9mbGFncy5xdWVyaWVyX2lwdjY7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MzQwPXN0YXRpYyBib29sIGJhdGFkdl9tY2FzdF9tbGFfaXNfZHVwbGljYXRlKHU4ICptY2FzdF9hZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1Mi0vKipcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjM1MzogKiBiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NCgpIC0gZ2V0IG1lc2hpZiBJUHY0IG11bHRpY2FzdCBsaXN0ZW5lcnNcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1NC0gKiBAZGV2OiB0aGUgZGV2aWNlIHRvIGNvbGxlY3QgbXVsdGljYXN0IGFkZHJlc3NlcyBmcm9tXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MzY2PXN0YXRpYyBpbnRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjM2NzpiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzY4LVx0XHRcdFx0IHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5MC1cdFx0aWYgKGZsYWdzLVx1MDAzZXR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9VTlNOT09QQUJMRVMgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozOTE6XHRcdCAgICBpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXHUwMDNlbXVsdGlhZGRyKSlcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5Mi1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0zOTQtXHRcdGlmICghKGZsYWdzLVx1MDAzZXR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjQpIFx1MDAyNlx1MDAyNlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mzk1Olx0XHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KHBtYy1cdTAwM2VtdWx0aWFkZHIpKVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk2LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTUyMD1iYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy01MzAtXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo1MzE6XHRyZXQ0ID0gYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoZGV2LCBtY2FzdF9saXN0LCBmbGFncyk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy01MzItXHRpZiAocmV0NCBcdTAwM2MgMClcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz01ODU9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfbWxhX2JyaWRnZV9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MDktXHRcdFx0aWYgKHR2bHZfZmxhZ3MgXHUwMDI2IEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9VTlNOT09QQUJMRVMgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo2MTA6XHRcdFx0ICAgIGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGJyX2lwX2VudHJ5LVx1MDAzZWFkZHIuZHN0LmlwNCkpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy02MTMtXHRcdFx0aWYgKCEodHZsdl9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNCkgXHUwMDI2XHUwMDI2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo2MTQ6XHRcdFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChicl9pcF9lbnRyeS1cdTAwM2VhZGRyLmRzdC5pcDQpKVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjE1LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9ODA3PWJhdGFkdl9tY2FzdF9icmlkZ2VfbG9nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtODIwLVx0XHRiYXRhZHZfbWNhc3RfcXVlcmllcl9sb2coYmF0X3ByaXYsIFwmIzM0O0lHTVBcJiMzNDssXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo4MjE6XHRcdFx0XHRcdCBcdTAwMjZvbGRfZmxhZ3MtXHUwMDNlcXVlcmllcl9pcHY0LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6ODIyOlx0XHRcdFx0XHQgXHUwMDI2bmV3X2ZsYWdzLVx1MDAzZXF1ZXJpZXJfaXB2NCk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy04MjMtXHRcdGJhdGFkdl9tY2FzdF9xdWVyaWVyX2xvZyhiYXRfcHJpdiwgXCYjMzQ7TUxEXCYjMzQ7LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTkzOT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTUzLS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTU0OiAqIGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NCgpIC3igK9jaGVjayBmb3IgSUdNUCByZXBvcnRzXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05NTUtICogQHNrYjogdGhlIGV0aGVybmV0IGZyYW1lIGRlc3RpbmVkIGZvciB0aGUgbWVzaFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2NS0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk2NjpzdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfaXNfcmVwb3J0X2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2Ny17XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTgxLS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTgyOiAqIGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NCgpIC0gY2hlY2sgZm9yIG9wdGltaXplZCBmb3J3YXJkaW5nXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05ODMtICogIHBvdGVudGlhbFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5NC0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk5NTpzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTk2LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTAwNS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDY6XHRpZiAoYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY0KHNrYikpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDA3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDEzLVx0ICovXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMDE0Olx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwaGRyLVx1MDAzZWRhZGRyKSlcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMTUtXHRcdCppc191bnNub29wYWJsZSA9IHRydWU7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTEwND1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTE1LVx0Y2FzZSBFVEhfUF9JUDpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMTY6XHRcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd19tb2RlX2NoZWNrX2lwdjQoYmF0X3ByaXYsIHNrYixcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExMTctXHRcdFx0XHRcdFx0XHQgaXNfdW5zbm9vcGFibGUsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTE0MT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwX2NvdW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0NS1cdGNhc2UgRVRIX1BfSVA6XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTQ2Olx0XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0Ny1cdGNhc2UgRVRIX1BfSVBWNjpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMzE0PWJhdGFkdl9tY2FzdF9mb3J3X3R0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0Ni0vKipcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNDc6ICogYmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfaXB2NCgpIC0gZm9yd2FyZCB0byBub2RlcyB3aXRoIHdhbnQtYWxsLWlwdjRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNDgtICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTM1OT1zdGF0aWMgaW50XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzYwOmJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwdjQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNjEtXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM2OC1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzY5Olx0XHRcdFx0IFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjRfbGlzdCxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNzA6XHRcdFx0XHQgbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlKSB7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzcxLVx0XHRuZXdza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0MzU9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGwoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDM5LVx0Y2FzZSBFVEhfUF9JUDpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE0NDA6XHRcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY0KGJhdF9wcml2LCBza2IsIHZpZCk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDQxLVx0Y2FzZSBFVEhfUF9JUFY2OlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2MTI9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X3dhbnRfdW5zbm9vcF91cGRhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ2LS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY0NzogKiBiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZSgpIC0gdXBkYXRlIHdhbnQtYWxsLWlwdjQgY291bnRlciBhbmQgbGlzdFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY0OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjU2LSAqL1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY1NzpzdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1OC1cdFx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZyxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjYwLXtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjE6XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjRfbGlzdDtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjI6XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSA9IFx1MDAyNm9yaWctXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY2My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjY4LVx0ICAgICEob3JpZy1cdTAwM2VtY2FzdF9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpKSB7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjY5Olx0XHRhdG9taWNfaW5jKFx1MDAyNmJhdF9wcml2LVx1MDAzZW1jYXN0Lm51bV93YW50X2FsbF9pcHY0KTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NzAtXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY3OS1cdFx0ICAgb3JpZy1cdTAwM2VtY2FzdF9mbGFncyBcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpIHtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2ODA6XHRcdGF0b21pY19kZWMoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY4MS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xODkwPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF90dmx2X29nbV9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTkxNC1cdGJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBtY2FzdF9mbGFncyk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTE1Olx0YmF0YWR2X21jYXN0X3dhbnRfaXB2NF91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIG1jYXN0X2ZsYWdzKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5MTYtXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgbWNhc3RfZmxhZ3MpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE5NTA9aW50IGJhdGFkdl9tY2FzdF9tZXNoX2luZm9fcHV0KHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTk1OC1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE5NTk6XHRcdGlmIChiYXRfcHJpdi1cdTAwM2VtY2FzdC5tbGFfZmxhZ3MucXVlcmllcl9pcHY0LmV4aXN0cylcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjAtXHRcdFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY0X0VYSVNUUztcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xOTYyLVx0XHRcdGZsYWdzX3ByaXYgfD0gQkFUQURWX01DQVNUX0ZMQUdTX1FVRVJJRVJfSVBWNl9FWElTVFM7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTYzOlx0XHRpZiAoYmF0X3ByaXYtXHUwMDNlbWNhc3QubWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NC5zaGFkb3dpbmcpXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xOTY0LVx0XHRcdGZsYWdzX3ByaXYgfD0gQkFUQURWX01DQVNUX0ZMQUdTX1FVRVJJRVJfSVBWNF9TSEFET1dJTkc7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MjE4OT12b2lkIGJhdGFkdl9tY2FzdF9wdXJnZV9vcmlnKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnKVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTUtXHRiYXRhZHZfbWNhc3Rfd2FudF91bnNub29wX3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjIxOTY6XHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY0X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTctXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTExND1iYXRhZHZfbWNhc3RfZm9yd19vcmlnX2VudHJ5KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTE4LVx0c3dpdGNoIChlbnRyeV9vZmZzZXQpIHtcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTE5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSwgbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlKTpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTIwLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSwgbWNhc3Rfd2FudF9hbGxfaXB2Nl9ub2RlKTpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTI3Mz1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19wdXNoX3dhbnRfYWxsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODQtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6Mjg1Olx0XHRoZWFkID0gXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0O1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODYtXHRcdG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlLFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoyODc6XHRcdFx0XHQgIG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZSk7XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTI4OC1cdFx0YnJlYWs7XG4tLVxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jPTk0Nz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X29yaWdfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtOTg4LVx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNm9yaWdfbm9kZS1cdTAwM2VtY2FzdF93YW50X2FsbF91bnNub29wYWJsZXNfbm9kZSk7XG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM6OTg5Olx0SU5JVF9ITElTVF9OT0RFKFx1MDAyNm9yaWdfbm9kZS1cdTAwM2VtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTk5MC1cdElOSVRfSExJU1RfTk9ERShcdTAwMjZvcmlnX25vZGUtXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2Nl9ub2RlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTQxMT1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC00NTEtXHQvKipcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6NDUyOlx0ICogQG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZTogYSBsaXN0IG5vZGUgZm9yIHRoZSBtY2FzdC53YW50X2FsbF9pcHY0XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1My1cdCAqICBsaXN0XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1NC1cdCAqL1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDo0NTU6XHRzdHJ1Y3QgaGxpc3Rfbm9kZSBtY2FzdF93YW50X2FsbF9pcHY0X25vZGU7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1Ni1cdC8qKlxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTIyMT1zdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyB7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjI6XHQvKiogQHF1ZXJpZXJfaXB2NDogdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gSUdNUCBxdWVyaWVyIGluIHRoZSBtZXNoICovXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjM6XHRzdHJ1Y3QgYmF0YWR2X21jYXN0X3F1ZXJpZXJfc3RhdGUgcXVlcmllcl9pcHY0O1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMjI0LVxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTI0MT1zdHJ1Y3QgYmF0YWR2X3ByaXZfbWNhc3Qge1xuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1NC1cdC8qKlxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjU1Olx0ICogQHdhbnRfYWxsX2lwdjRfbGlzdDogYSBsaXN0IG9mIG9yaWdfbm9kZXMgd2FudGluZyBhbGwgSVB2NCBtdWx0aWNhc3Rcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1Ni1cdCAqICB0cmFmZmljXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTctXHQgKi9cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI1ODpcdHN0cnVjdCBobGlzdF9oZWFkIHdhbnRfYWxsX2lwdjRfbGlzdDtcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1OS1cbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTMtXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyOTQ6XHQvKiogQG51bV93YW50X2FsbF9pcHY0OiBjb3VudGVyIGZvciBpdGVtcyBpbiB3YW50X2FsbF9pcHY0X2xpc3QgKi9cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI5NTpcdGF0b21pY190IG51bV93YW50X2FsbF9pcHY0O1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMjk2LVxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTMxMy1cdCAqIEB3YW50X2xpc3RzX2xvY2s6IGxvY2sgZm9yIHByb3RlY3RpbmcgbW9kaWZpY2F0aW9ucyB0byBtY2FzdHNcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTMxNDpcdCAqICB3YW50X2FsbF97dW5zbm9vcGFibGVzLGlwdjQsaXB2Nn1fbGlzdCAodHJhdmVyc2FscyBhcmUgcmN1LWxvY2tlZClcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTMxNS1cdCAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9MTI1PXZvaWQgYnJfZG9fcHJveHlfc3VwcHJlc3NfYXJwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE1Ni1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTU3Olx0aWYgKGlwdjRfaXNfbG9vcGJhY2sodGlwKSB8fFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNTg6XHQgICAgaXB2NF9pc19tdWx0aWNhc3QodGlwKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTU5LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz02Njk9c3RhdGljIGJvb2wgaXNfdmFsaWRfbWRiX3NvdXJjZShzdHJ1Y3QgbmxhdHRyICphdHRyLCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy02NzctXHRcdH1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6Njc4Olx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QobmxhX2dldF9pbl9hZGRyKGF0dHIpKSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy02NzktXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7SVB2NCBtdWx0aWNhc3Qgc291cmNlIGFkZHJlc3MgaXMgbm90IGFsbG93ZWRcJiMzNDspO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTIzMT1zdGF0aWMgaW50IGJyX21kYl9jb25maWdfaW5pdChzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3Ny1cdGlmIChjZmctXHUwMDNlZW50cnktXHUwMDNlYWRkci5wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNzg6XHQgICAgaXB2NF9pc196ZXJvbmV0KGNmZy1cdTAwM2VlbnRyeS1cdTAwM2VhZGRyLnUuaXA0KSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy0xMjc5LVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtJUHY0IGVudHJ5IGdyb3VwIGFkZHJlc3MgMC4wLjAuMCBpcyBub3QgYWxsb3dlZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzU1PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NDpcdFx0aWYgKGlwdjRfaXNfemVyb25ldChzcmNfaXAtXHUwMDNlc3JjLmlwNCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NTpcdFx0ICAgIGlwdjRfaXNfbXVsdGljYXN0KHNyY19pcC1cdTAwM2VzcmMuaXA0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTM2Ni1cdFx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1Njk9c3RhdGljIGludCBicl9pcDRfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3OC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU3OTpcdGlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1ODAtXHRcdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzgxOD1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODI2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODI3Olx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGdyb3VwKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgyOC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzkxOD1zdGF0aWMgaW50IGJyX2lwNF9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzkzMzpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9pcHY0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTM0LVx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0NS1cdGlmIChlcnIgPT0gLUVOT01TRykge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ2Olx0XHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTQ3LVx0XHRcdEJSX0lOUFVUX1NLQl9DQihza2IpLVx1MDAzZW1yb3V0ZXJzX29ubHkgPSAxO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ4Olx0XHR9IGVsc2UgaWYgKHBpbV9pcHY0X2FsbF9waW1fcm91dGVycyhpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcikpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0OS1cdFx0XHRpZiAoaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19QSU0pXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTAtXHRcdFx0XHRicl9tdWx0aWNhc3RfcGltKGJybWN0eCwgcG1jdHgsIHNrYik7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5NTE6XHRcdH0gZWxzZSBpZiAoaXB2NF9pc19hbGxfc25vb3BlcnMoaXBfaGRyKHNrYiktXHUwMDNlZGFkZHIpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTItXHRcdFx0YnJfaXA0X211bHRpY2FzdF9tcmRfcmN2KGJybWN0eCwgcG1jdHgsIHNrYik7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MDU3PWludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICoqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA5MS1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDkyOlx0XHRyZXQgPSBicl9tdWx0aWNhc3RfaXB2NF9yY3YoKmJybWN0eCwgKnBtY3R4LCBza2IsIHZpZCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTMtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDczMD1pbnQgYnJfbXVsdGljYXN0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3Mi1cdCAqIGJyX211bHRpY2FzdF9yY3YgZmlyc3QgY2hlY2tzIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVELCBhbmRcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc3MzpcdCAqIHJldHVybnMgd2l0aG91dCBjYWxsaW5nIGJyX211bHRpY2FzdF9pcHY0LzZfcmN2IGlmIGl0JiMzOTtzIG5vdFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc0LVx0ICogZW5hYmxlZC4gTW92ZWQgYm90aCBmdW5jdGlvbnMgb3V0IGp1c3QgZm9yIHN5bW1ldHJ5LlxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjUtI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjY6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oXHUwMDNlXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xOTM9c3RhdGljIGlubGluZSB2b2lkIG5mX2JyaWRnZV9wdWxsX2VuY2FwX2hlYWRlcl9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyMDY6c3RhdGljIGludCBicl92YWxpZGF0ZV9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTMzMD1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzMxOmJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMyLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTMzMy17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjMzNDpcdHJldHVybiBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkciAhPSBuZl9icmlkZ2UtXHUwMDNlaXB2NF9kYWRkcjtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzM1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTM3Nj1zdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5Ni1cdG5mX2JyaWRnZS1cdTAwM2Vpbl9wcmVyb3V0aW5nID0gMDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzk3Olx0aWYgKGJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoc2tiLCBuZl9icmlkZ2UpKSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5OC1cdFx0cmVhc29uID0gaXBfcm91dGVfaW5wdXQoc2tiLCBpcGgtXHUwMDNlZGFkZHIsIGlwaC1cdTAwM2VzYWRkcixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQ4Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nKHZvaWQgKnByaXYsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MjQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNTpcdGlmIChicl92YWxpZGF0ZV9pcHY0KHN0YXRlLVx1MDAzZW5ldCwgc2tiKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI2LVx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTMzLVx0bmZfYnJpZGdlID0gbmZfYnJpZGdlX2luZm9fZ2V0KHNrYik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzNDpcdG5mX2JyaWRnZS1cdTAwM2VpcHY0X2RhZGRyID0gaXBfaGRyKHNrYiktXHUwMDNlZGFkZHI7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzNS1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNC1cdGlmIChwZiA9PSBORlBST1RPX0lQVjQpIHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzA1Olx0XHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cdTAwM2VuZXQsIHNrYikpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcwNi1cdFx0XHRyZXR1cm4gTkZfRFJPUF9SRUFTT04oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9ODM1PXN0YXRpYyBpbnQgYnJfbmZfZGV2X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzAtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjg3MTpcdFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQobmV0LCBza2IpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzItXHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfYnJpZGdlLmhcdTAwM2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXHUwMDNlXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMjYtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFx1MDAzZVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEyMDQ9c3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF9pc19zdGFyX2coY29uc3Qgc3RydWN0IGJyX2lwICppcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMjA3LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMjA4Olx0XHRyZXR1cm4gaXB2NF9pc196ZXJvbmV0KGlwLVx1MDAzZXNyYy5pcDQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmMtMTgtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFx1MDAzZVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JyaWRnZS5jLTIwLVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMtMTMtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZnRfcmVqZWN0LmhcdTAwM2Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXHUwMDNlXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfcmVqZWN0X2JyaWRnZS5jLTE1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaFx1MDAzZVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTM2ND1zdGF0aWMgdm9pZCBjZXBoX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jLTM3MS1cdCAqIGRvZXNuJiMzOTt0IGdldCBjYWxsZWQgYWdhaW4gdW50aWwgY2VwaF9jb25fdlsxMl1fdHJ5X3dyaXRlKCkgZmlsbHNcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjM3MjpcdCAqIHRoZSBzb2NrZXQgYnVmZmVyLiBTZWUgbmV0L2lwdjQvdGNwX2lucHV0LmM6dGNwX2NoZWNrX3NwYWNlKClcbm5ldC9jZXBoL21lc3Nlbmdlci5jLTM3My1cdCAqIGFuZCBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UoKS5cbi0tXG5uZXQvY29yZS9kZXYuYz0zMzYzPXZvaWQgbmV0aWZfc2V0X3Rzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSlcbi0tXG5uZXQvY29yZS9kZXYuYy0zMzY3LVx0XHRuZXRpZl9zZXRfZ3NvX21heF9zaXplKGRldiwgc2l6ZSk7XG5uZXQvY29yZS9kZXYuYzozMzY4Olx0aWYgKHNpemUgXHUwMDNjIFJFQURfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUpKVxubmV0L2NvcmUvZGV2LmM6MzM2OTpcdFx0bmV0aWZfc2V0X2dzb19pcHY0X21heF9zaXplKGRldiwgc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0zMzcwLX1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA5ND1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxNDUtXHRkZXYtXHUwMDNlZ3JvX21heF9zaXplID0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jOjEyMTQ2Olx0ZGV2LVx1MDAzZWdzb19pcHY0X21heF9zaXplID0gR1NPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jOjEyMTQ3Olx0ZGV2LVx1MDAzZWdyb19pcHY0X21heF9zaXplID0gR1JPX0xFR0FDWV9NQVhfU0laRTtcbm5ldC9jb3JlL2Rldi5jLTEyMTQ4LVx0ZGV2LVx1MDAzZXRzb19tYXhfc2l6ZSA9IFRTT19MRUdBQ1lfTUFYX1NJWkU7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMyOTg9c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfc3RydWN0X2NoZWNrKHZvaWQpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzMDYtXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29fbWF4X3NpemUpO1xubmV0L2NvcmUvZGV2LmM6MTMzMDc6XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29faXB2NF9tYXhfc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzMwOC1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfdHgsIGdzb19tYXhfc2Vncyk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMzMzktXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3J4LCBncm9fbWF4X3NpemUpO1xubmV0L2NvcmUvZGV2LmM6MTMzNDA6XHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3J4LCBncm9faXB2NF9tYXhfc2l6ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzM0MS1cdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIHJ4X2hhbmRsZXIpO1xuLS1cbm5ldC9jb3JlL2Rldi5oPTIwNT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfc2V0X2dzb19tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5oLTIxMC1cdGlmIChzaXplIFx1MDAzYz0gR1NPX0xFR0FDWV9NQVhfU0laRSlcbm5ldC9jb3JlL2Rldi5oOjIxMTpcdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUsIHNpemUpO1xubmV0L2NvcmUvZGV2LmgtMjEyLX1cbi0tXG5uZXQvY29yZS9kZXYuaD0yMjE9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9ncm9fbWF4X3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuaC0yMjYtXHRpZiAoc2l6ZSBcdTAwM2M9IEdST19MRUdBQ1lfTUFYX1NJWkUpXG5uZXQvY29yZS9kZXYuaDoyMjc6XHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZWdyb19pcHY0X21heF9zaXplLCBzaXplKTtcbm5ldC9jb3JlL2Rldi5oLTIyOC19XG5uZXQvY29yZS9kZXYuaC0yMjktXG5uZXQvY29yZS9kZXYuaDoyMzA6c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZGV2LmgtMjMxLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXG5uZXQvY29yZS9kZXYuaC0yMzIte1xubmV0L2NvcmUvZGV2Lmg6MjMzOlx0LyogZGV2LVx1MDAzZWdzb19pcHY0X21heF9zaXplIGlzIHJlYWQgbG9ja2xlc3NseSBmcm9tIHNrX3NldHVwX2NhcHMoKSAqL1xubmV0L2NvcmUvZGV2Lmg6MjM0Olx0V1JJVEVfT05DRShkZXYtXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUsIHNpemUpO1xubmV0L2NvcmUvZGV2LmgtMjM1LX1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAxMjIKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGZvciBGdXp6aW5nIENhbmRpZGF0ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGZvciBgaXBfY21zZ19yZWN2X29mZnNldGAuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYG5ldC9LY29uZmlnYCBhbmQgY29uZmlybWVkIHRoYXQgYENPTkZJR19JTkVUYCBpcyB0aGUgcHJpbWFyeSBmYWN0b3IuIFNwZWNpZmljYWxseSwgbGluZSAxMTQgZGVmaW5lcyBpdC4gVGhlbiwgSSBuZWVkZWQgdG8gc2VlIGlmIGBDT05GSUdfSVBWNmAgd2FzIGFsc28gcmVsZXZhbnQsIHNpbmNlIElQdjYgb2Z0ZW4gaW50ZXJhY3RzIHdpdGggSVB2NCBjb2RlLiBBIGNoZWNrIG9mIGBuZXQvaXB2Ni9LY29uZmlnYCBjb25maXJtZWQgYENPTkZJR19JUFY2YCBjb21waWxlcyBgbmV0L2lwdjYvYCwgYW5kIGBDT05GSUdfSU5FVGAgY29tcGlsZXMgYG5ldC9pcHY0L2AuCgpJIHRoZW4gdHJhY2VkIHRoZSBmdW5jdGlvbiBhbmQgZm91bmQgdGhhdCBgaXBfY21zZ19yZWN2X29mZnNldGAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHdoaWNoIGdldHMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JTkVUPXlgLiBCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBJIHNlZSBgQ09ORklHX0lQVjZgIG1pZ2h0IGJlIGludm9sdmVkIGJlY2F1c2UgYHVkcHY2X3JlY3Ztc2dgIGFuZCBgaXB2Nl9yZWN2X2Vycm9yYCAqYWxzbyogY2FsbCBgaXBfY21zZ19yZWN2X29mZnNldGAgYW5kIGBpcF9jbXNnX3JlY3ZgIGlmIGBpbmV0X2Ntc2dfZmxhZ3MoaW5ldClgIGlzIG5vbi16ZXJvICh3aGljaCBoYXBwZW5zIHdpdGggSVB2NC1tYXBwZWQgSVB2NiBzb2NrZXRzIG9yIElQdjYgc29ja2V0cyB3aXRoIElQdjQgY21zZyBlbmFibGVkKS4gVGhpcyB0ZWxscyBtZSBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdGVzdCB3aXRoIElQdjYgZW5hYmxlZCBhcyB3ZWxsLgoKTmV4dCwgSSBsb29rZWQgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZC4gVGhlIGRlZmluaXRpb24gaXM6CmBgYGMKdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLAoJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpCmBgYAp3aXRoIGFuIGBFWFBPUlRfU1lNQk9MKGlwX2Ntc2dfcmVjdl9vZmZzZXQpYC4KCkkgdGhlbiBtYWRlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyB3ZXJlIGFsbCBpbiBwbGFjZTogYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZSwgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBbJiMzNDtpcF9jbXNnX3JlY3Zfb2Zmc2V0JiMzNDtdLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBbJiMzNDtJTkVUJiMzNDssICYjMzQ7SVBWNiYjMzQ7XS4KCkZpbmFsbHksIEkgbm90aWNlZCB0aGVyZSYjMzk7cyBhIHZlcnNpb24gY2hlY2sgYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YCBpbiBgaXBfY21zZ19yZWN2X29mZnNldGAuIFRoaXMgaXMgYSAqY3JpdGljYWwqIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQgcHJvdGVjdHMgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbnZhbGlkIGhlYWRlciBhY2Nlc3Mgd2hlbiBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBhcmUgcHJvY2Vzc2VkIGZvciBub24tSVB2NCBwYWNrZXRzIChsaWtlIElQdjYgcGFja2V0cyBvbiBkdWFsLXN0YWNrIG9yIG1hcHBlZCBzb2NrZXRzLCBvciBjb3JydXB0ZWQgc29ja2V0cykuIEl0IHNlZW1zIGxpa2UgaXQgcHJldmVudHMgY29ycnVwdGVkIHBhY2tldHMgb3IgaW52YWxpZCBJUCB2ZXJzaW9uIGluIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHRlc3QgZnV6emluZyBpbnB1dHMuCgpUaGlzIGFsbCBsb29rcyB2ZXJ5IGNsZWFuIGFuZCB3ZWxsLWRlZmluZWQuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfY21zZ19yZWN2X29mZnNldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTmAgYXQgdGhlIGVudHJ5IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHRvIHJldHVybiBlYXJseSBpZiB0aGUgcGFja2V0IGlzIG5vdCBhbiBJUHY0IHBhY2tldCAoZS5nLiB3aGVuIHByb2Nlc3NpbmcgZHVhbC1zdGFjayBvciBJUHY2IHNrYnMpLlxuXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggYTU1ZWYzMjdlYzkzMi4uMDFkMjY0ZThmMzRlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0xNzQsNiAmIzQzOzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIWZsYWdzKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLSZndDt2ZXJzaW9uICE9IElQVkVSU0lPTikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi8KIAlpZiAoZmxhZ3MgJmFtcDsgSVBfQ01TR19QS1RJTkZPKSB7CiAJCWlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQIFNvY2tldCBHbHVlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzIGRpZmYgYW5kIGl0cyBjb250ZXh0LCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhOyBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHRhcmdldGluZyB0aGUgdmljaW5pdHkgb2YgbGluZSAxNzQgd2l0aGluIHRoZSBgaXBfc29ja2dsdWUuY2AgZmlsZS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgcHJvdmlkZSB0aGUgZGV0YWlscyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjA6XHRcbiAxNjE6XHRcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiAxNjI6XHRcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbiAxNjM6XHRcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xuIDE2NDpcdFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xuIDE2NTpcdFxuIDE2NjpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXHUwMDI2c2luKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIDE3MDpcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcbiAxNzE6XHR7XG4gMTcyOlx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKTtcbiAxNzM6XHRcbiAxNzQ6XHRcdGlmICghZmxhZ3MpXG4gMTc1Olx0XHRcdHJldHVybjtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4gMTc4Olx0XHRcdHJldHVybjtcbiAxNzk6XHRcbiAxODA6XHRcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gMTgxOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIDE4MjpcdFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4gMTgzOlx0XG4gMTg0Olx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfUEtUSU5GTztcbiAxODU6XHRcdFx0aWYgKCFmbGFncylcbiAxODY6XHRcdFx0XHRyZXR1cm47XG4gMTg3Olx0XHR9XG4gMTg4Olx0XG4gMTg5Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVFRMKSB7XG4gMTkwOlx0XHRcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xuIDE5MTpcdFxuIDE5MjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RUTDtcbiAxOTM6XHRcdFx0aWYgKCFmbGFncylcbiAxOTQ6XHRcdFx0XHRyZXR1cm47XG4gMTk1Olx0XHR9XG4gMTk2Olx0XG4gMTk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfVE9TKSB7XG4gMTk4Olx0XHRcdGlwX2Ntc2dfcmVjdl90b3MobXNnLCBza2IpO1xuIDE5OTpcdFxuIDIwMDpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1RPUztcbiAyMDE6XHRcdFx0aWYgKCFmbGFncylcbiAyMDI6XHRcdFx0XHRyZXR1cm47XG4gMjAzOlx0XHR9XG4gMjA0Olx0XG4gMjA1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcbiAyMDY6XHRcdFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xuIDIwNzpcdFxuIDIwODpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFQ1ZPUFRTO1xuIDIwOTpcdFx0XHRpZiAoIWZsYWdzKVxuIDIxMDpcdFx0XHRcdHJldHVybjtcbiAyMTE6XHRcdH1cbiAyMTI6XHRcbiAyMTM6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19SRVRPUFRTKSB7XG4gMjE0Olx0XHRcdGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHNvY2tfbmV0KHNrKSwgbXNnLCBza2IpO1xuIDIxNTpcdFxuIDIxNjpcdFx0XHRmbGFncyBcdTAwMjY9IH5JUF9DTVNHX1JFVE9QVFM7XG4gMjE3Olx0XHRcdGlmICghZmxhZ3MpXG4gMjE4Olx0XHRcdFx0cmV0dXJuO1xuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcbiAyMjI6XHRcdFx0aXBfY21zZ19yZWN2X3NlY3VyaXR5KG1zZywgc2tiKTtcbiAyMjM6XHRcbiAyMjQ6XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+SVBfQ01TR19QQVNTU0VDO1xuIDIyNTpcdFx0XHRpZiAoIWZsYWdzKVxuIDIyNjpcdFx0XHRcdHJldHVybjtcbiAyMjc6XHRcdH1cbiAyMjg6XHRcbiAyMjk6XHRcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xuIDIzMDpcdFx0XHRpcF9jbXNnX3JlY3ZfZHN0YWRkcihtc2csIHNrYik7XG4gMjMxOlx0XG4gMjMyOlx0XHRcdGZsYWdzIFx1MDAyNj0gfklQX0NNU0dfT1JJR0RTVEFERFI7XG4gMjMzOlx0XHRcdGlmICghZmxhZ3MpXG4gMjM0Olx0XHRcdFx0cmV0dXJuO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUF9DTVNHX0NIRUNLU1VNKVxuIDIzODpcdFx0XHRpcF9jbXNnX3JlY3ZfY2hlY2tzdW0obXNnLCBza2IsIHRsZW4sIG9mZnNldCk7XG4gMjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBgaXBfY21zZ19yZWN2X29mZnNldGAgY2hhbmdlLiBJIHNlZSBhIG5ldyBjb25kaXRpb25hbCBjaGVjayBoYXMgYmVlbiBhZGRlZDogYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS0mZ3Q7dmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IGlzICp0aGlzKiBjaGVjayBuZWNlc3Nhcnk/IFdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZT8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYmVpbmcgYWRkcmVzc2VkLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIHJlY29uc3RydWN0IGl0cyBldm9sdXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUgR2l0IGhpc3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24uIFdobyBpbnRyb2R1Y2VkIGl0PyBXaGF0IGlzc3VlcyB3ZXJlIGZsYWdnZWQsIGFuZCB3aGF0IHdhcyB0aGUganVzdGlmaWNhdGlvbj8gSWYgdGhlIGNvbW1pdCBoaXN0b3J5IGRvZXNuJiMzOTt0IHByb3ZpZGUgZW5vdWdoIGNvbnRleHQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSYjMzk7bGwgZG8gYSBjb2RlYmFzZS13aWRlIGdyZXAgZm9yIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YC4gVGhpcyB3aWxsIHNob3cgbWUgYWxsIHRoZSBjYWxsIHNpdGVzLCBhbGxvd2luZyBtZSB0byBzZWUgaG93IGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5KiB0aGlzIG5ldyBjaGVjayBpcyByZWxldmFudCB0byB0aG9zZSB1c2VzLiBUaGUgc3Vycm91bmRpbmcgY29kZSBpcyBvZnRlbiB0aGUgbW9zdCBpbGx1bWluYXRpbmcuIEkgZXhwZWN0IHRoZSBjYWxsZXJzIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjbHVlcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgZ3VhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2Ntc2dfcmVjdl9vZmZzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXAuaD04MTU9dm9pZCBpcHY0X3BrdGluZm9fcHJlcGFyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZHJvcF9kc3QpO1xuaW5jbHVkZS9uZXQvaXAuaDo4MTY6dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvaXAuaC04MTctXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTgzOD1zdGF0aWMgaW5saW5lIHZvaWQgaXBfY21zZ19yZWN2KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L2lwLmgtODM5LXtcbmluY2x1ZGUvbmV0L2lwLmg6ODQwOlx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCAwLCAwKTtcbmluY2x1ZGUvbmV0L2lwLmgtODQxLX1cbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0Nz1zdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfZHN0YWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNjgtXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE2OTp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MC1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDItfVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDM6RVhQT1JUX1NZTUJPTChpcF9jbXNnX3JlY3Zfb2Zmc2V0KTtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjQ0LVxuLS1cbm5ldC9pcHY0L3VkcC5jPTIwMzM9aW50IHVkcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdWRwLmMtMjExMS1cdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXG5uZXQvaXB2NC91ZHAuYzoyMTEyOlx0XHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xubmV0L2lwdjQvdWRwLmMtMjExMy1cbi0tXG5uZXQvaXB2Ni91ZHAuYz00NjQ9aW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L2lwdjYvdWRwLmMtNTYxLVx0XHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxubmV0L2lwdjYvdWRwLmM6NTYyOlx0XHRcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBzaywgc2tiLFxubmV0L2lwdjYvdWRwLmMtNTYzLVx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIFVEUCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBuZXQvaXB2Ni91ZHAuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBkdWFsLXN0YWNrIG9yIElQdjYgc29ja2V0cyBoYW5kbGUgaW5jb21pbmcgSVB2NCBvciBJUHY2IHBhY2tldHMuIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGlzOiBpZiBJJiMzOTttIHJlY2VpdmluZyBhIHBhY2tldCBhbmQgYGluZXRfY21zZ19mbGFncyhpbmV0KWAgaXMgc2V0IOKAkyB3aGljaCwgaW4gdGhpcyBjb250ZXh0LCBpbXBsaWVzIElQdjQgY29udHJvbCBtZXNzYWdlIG9wdGlvbnMgd2VyZSB1c2VkIG9uIGFuIEFGX0lORVQ2IG9yIGR1YWwtc3RhY2sgc29ja2V0IOKAkyB0aGUgY29kZSBjYWxscyBgaXBfY21zZ19yZWN2X29mZnNldCgpYC4gVGhlIGlzc3VlIGlzLCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIG9uIGFuIElQdjYgc2tiLCBzbyBgaXBfaGRyKHNrYilgIGlzICphY3R1YWxseSogcG9pbnRpbmcgdG8gYW4gSVB2NiBoZWFkZXIuCgpIZXJlJiMzOTtzIHRoZSBydWI6IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHN1YnNlcXVlbnRseSBjYWxscyBhIGJ1bmNoIG9mIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBpcF9jbXNnX3JlY3Zfb3B0c2AsIGBpcF9jbXNnX3JlY3ZfcGt0aW5mb2AsIGFuZCBzbyBvbi4gVGhlc2UgZnVuY3Rpb25zLCBjcml0aWNhbGx5LCBhbGwgc2VlbSB0byB0cmVhdCBgaXBfaGRyKHNrYilgIGFzIGEgYHN0cnVjdCBpcGhkcmAg4oCTIHRoYXQgaXMsIGFuIElQdjQgaGVhZGVyISBOb3csIGlmIHRoZSBpbmNvbWluZyBwYWNrZXQgaXMgYWN0dWFsbHkgSVB2NiAoYW5kIGB2ZXJzaW9uID09IDZgKSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IG1pc2ludGVycHJldGluZyB0aGUgbWVtb3J5LiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHRoaW5ncy4gV2UmIzM5O3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIsIGFjY2Vzc2luZyBpbnZhbGlkIGZpZWxkcywgb3IganVzdCBnZW5lcmFsbHkgbWFraW5nIGluY29ycmVjdCBkZWNpc2lvbnMgYmFzZWQgb24gbWFsZm9ybWVkIGRhdGEuCgpJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCB0aG9zZSBgaXBfY21zZ19yZWN2XypgIGZ1bmN0aW9ucyBhcmUgZG9pbmcgaW4gZGV0YWlsLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHR5cGUgY29uZnVzaW9uIHZ1bG5lcmFiaWxpdHkgYW5kIHRoZSByYW1pZmljYXRpb25zIGNvdWxkIGJlIHNlcmlvdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGp1c3QgaG93IG11Y2ggY29udHJvbCBhbiBhdHRhY2tlciBjb3VsZCBwb3RlbnRpYWxseSBnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdC8qXG4gIDUxOlx0ICpcdFNPTF9JUCBjb250cm9sIG1lc3NhZ2VzLlxuICA1MjpcdCAqL1xuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9wa3RpbmZvKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgaW5fcGt0aW5mbyBpbmZvID0gKlBLVElORk9fU0tCX0NCKHNrYik7XG4gIDU3Olx0XG4gIDU4Olx0XHRpbmZvLmlwaV9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVx1MDAzZWRhZGRyO1xuICA1OTpcdFxuICA2MDpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1BLVElORk8sIHNpemVvZihpbmZvKSwgXHUwMDI2aW5mbyk7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA2NDpcdHtcbiAgNjU6XHRcdGludCB0dGwgPSBpcF9oZHIoc2tiKS1cdTAwM2V0dGw7XG4gIDY2Olx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfVFRMLCBzaXplb2YoaW50KSwgXHUwMDI2dHRsKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3RvcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4gIDcwOlx0e1xuICA3MTpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1RPUywgMSwgXHUwMDI2aXBfaGRyKHNrYiktXHUwMDNldG9zKTtcbiAgNzI6XHR9XG4gIDczOlx0XG4gIDc0Olx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X29wdHMoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA3NTpcdHtcbiAgNzY6XHRcdGlmIChJUENCKHNrYiktXHUwMDNlb3B0Lm9wdGxlbiA9PSAwKVxuICA3NzpcdFx0XHRyZXR1cm47XG4gIDc4Olx0XG4gIDc5Olx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfUkVDVk9QVFMsIElQQ0Ioc2tiKS1cdTAwM2VvcHQub3B0bGVuLFxuICA4MDpcdFx0XHQgaXBfaGRyKHNrYikgJiM0MzsgMSk7XG4gIDgxOlx0fVxuICA4MjpcdFxuICA4MzpcdFxuICA4NDpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9yZXRvcHRzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuICA4NTpcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDg2Olx0e1xuICA4NzpcdFx0dW5zaWduZWQgY2hhciBvcHRidWZbc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSAmIzQzOyA0MF07XG4gIDg4Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gKHN0cnVjdCBpcF9vcHRpb25zICopb3B0YnVmO1xuICA4OTpcdFxuICA5MDpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VvcHQub3B0bGVuID09IDApXG4gIDkxOlx0XHRcdHJldHVybjtcbiAgOTI6XHRcbiAgOTM6XHRcdGlmIChpcF9vcHRpb25zX2VjaG8obmV0LCBvcHQsIHNrYikpIHtcbiAgOTQ6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfQ1RSVU5DO1xuICA5NTpcdFx0XHRyZXR1cm47XG4gIDk2Olx0XHR9XG4gIDk3Olx0XHRpcF9vcHRpb25zX3VuZG8ob3B0KTtcbiAgOTg6XHRcbiAgOTk6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRVRPUFRTLCBvcHQtXHUwMDNlb3B0bGVuLCBvcHQtXHUwMDNlX19kYXRhKTtcbiAxMDA6XHR9XG4gMTAxOlx0XG4gMTAyOlx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2ZyYWdzaXplKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAxMDM6XHR7XG4gMTA0Olx0XHRpbnQgdmFsO1xuIDEwNTpcdFxuIDEwNjpcdFx0aWYgKElQQ0Ioc2tiKS1cdTAwM2VmcmFnX21heF9zaXplID09IDApXG4gMTA3Olx0XHRcdHJldHVybjtcbiAxMDg6XHRcbiAxMDk6XHRcdHZhbCA9IElQQ0Ioc2tiKS1cdTAwM2VmcmFnX21heF9zaXplO1xuIDExMDpcdFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFQ1ZGUkFHU0laRSwgc2l6ZW9mKHZhbCksIFx1MDAyNnZhbCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9jaGVja3N1bShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IsXG4gMTE0Olx0XHRcdFx0XHQgIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxuIDExNTpcdHtcbiAxMTY6XHRcdF9fd3N1bSBjc3VtID0gc2tiLVx1MDAzZWNzdW07XG4gMTE3Olx0XG4gMTE4Olx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9DT01QTEVURSlcbiAxMTk6XHRcdFx0cmV0dXJuO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKG9mZnNldCAhPSAwKSB7XG4gMTIyOlx0XHRcdGludCB0ZW5kX29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgdGxlbjtcbiAxMjM6XHRcdFx0Y3N1bSA9IGNzdW1fc3ViKGNzdW0sIHNrYl9jaGVja3N1bShza2IsIHRlbmRfb2ZmLCBvZmZzZXQsIDApKTtcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcbiAxMjY6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9DSEVDS1NVTSwgc2l6ZW9mKF9fd3N1bSksIFx1MDAyNmNzdW0pO1xuIDEyNzpcdH1cbiAxMjg6XHRcbiAxMjk6XHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBsc21fY29udGV4dCBjdHg7XG4gMTMyOlx0XHR1MzIgc2VjaWQ7XG4gMTMzOlx0XHRpbnQgZXJyO1xuIDEzNDpcdFxuIDEzNTpcdFx0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oTlVMTCwgc2tiLCBcdTAwMjZzZWNpZCk7XG4gMTM2Olx0XHRpZiAoZXJyKVxuIDEzNzpcdFx0XHRyZXR1cm47XG4gMTM4Olx0XG4gMTM5Olx0XHRlcnIgPSBzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoc2VjaWQsIFx1MDAyNmN0eCk7XG4gMTQwOlx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDE0MTpcdFx0XHRyZXR1cm47XG4gMTQyOlx0XG4gMTQzOlx0XHRwdXRfY21zZyhtc2csIFNPTF9JUCwgU0NNX1NFQ1VSSVRZLCBjdHgubGVuLCBjdHguY29udGV4dCk7XG4gMTQ0Olx0XHRzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChcdTAwMjZjdHgpO1xuIDE0NTpcdH1cbiAxNDY6XHRcbiAxNDc6XHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfZHN0YWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0X19iZTE2IF9wb3J0c1syXSwgKnBvcnRzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjI5CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIEhlYWRlciBTYW5pdHkgQ2hlY2sqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGF0IHRoZSBzdGFydCBvZiBgaXBfY21zZ19yZWN2X29mZnNldGAuIFRoZSBrZXkgdGhpbmcgaXM6IGBpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktJmd0O3ZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggaXQgc3lzdGVtYXRpY2FsbHkuCgpGaXJzdCwgZG9lcyBpdCBjcmVhdGUgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGludHJvZHVjZSBhIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlPyBOb3BlLiBgaXBfaGRyKHNrYilgIGFjY2Vzc2VzIHRoZSBJUCBoZWFkZXIgd2l0aGluIHRoZSBzb2NrZXQgYnVmZmVyLCBhbmQgYHZlcnNpb25gIGlzIGEgZmllbGQgd2l0aGluIHRoYXQgSVAgaGVhZGVyIHN0cnVjdHVyZS4gSWYgdGhlIElQIHZlcnNpb24gaXNuJiMzOTt0IDQgKHdoaWNoIGBJUFZFUlNJT05gIGlzIGRlZmluZWQgYXMpLCBpdCBqdXN0IHJldHVybnMg4oCTIG5vIGNtc2dzIGFyZSB0b3VjaGVkLgoKU2Vjb25kLCBkb2VzIGl0ICpleHBvc2UqIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4gVGhpcyBjaGVjayAqcHJldmVudHMqIHByb2Nlc3Npbmcgb2Ygbm9uLUlQdjQgcGFja2V0cyBpbiB0aGUgSVB2NCBjbXNnIHJlY2VpdmVyLiBUaGF0JiMzOTtzIGEgKmdvb2QqIHRoaW5nLgoKVGhpcmQsIGRvZXMgaXQgbWVzcyB3aXRoIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciBsZWFrZWQ/IE5vcGUuIEl0IGp1c3Qgc2tpcHMgcHJvY2Vzc2luZywgd2hpY2ggbWVhbnMgaXQgc2tpcHMgcG90ZW50aWFsIHByb2JsZW1zLgoKRm91cnRoLCBhcmUgdGhlcmUgYW55IHN0cnVjdHVyZSBmaWVsZHMgb3IgbWVtb3J5IHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vIG5ldyBjbXNncyBhcmUgYmVpbmcgY3JlYXRlZCBvciBjb3BpZWQuIEluIGZhY3QsIGl0IHNraXBzIGNhbGxpbmcgYHB1dF9jbXNnYCBmb3IgcGFja2V0cyB0aGF0IGZhaWwgdGhlIGNoZWNrLgoKU28sIHRoaXMgbG9va3MgcHJldHR5IHNhZmUuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3Mgbm90IGEgS0FTQU4vS01TQU4gdHlwZSBpc3N1ZTogVGhpcyBjaGVjayBwcmV2ZW50cyBtaXNpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgaGVhZGVycyB3aGVuIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBjYWxsZWQgb24gbm9uLUlQdjQgcGFja2V0cy4gVGhpcyBpcyBwdXJlIGxvZ2ljIHZhbGlkYXRpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBvcmlnaW5hbCBmb3VyIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6IE5vIG5ldyBzdHJ1Y3R1cmVzIG9yIG1vZGlmaWNhdGlvbnMuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyoqOiBUaGUgY29uZGl0aW9uIGNoZWNrcyB0aGUgSVAgdmVyc2lvbiBmaWVsZCwgd2hpY2ggY29tZXMgZnJvbSB0aGUgcmVjZWl2ZWQgcGFja2V0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbi4KNC4gICoqQm91bmRzIGNoZWNrcy9sb2dpYyoqOiBObyBjaGFuZ2VzIHRoYXQgd291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGNsZWFyIGFuZCB1bmFtYmlndW91cy4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaXBfaGRyKHNrYiktXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIGFuIGVhcmx5IHJldHVybiB2YWxpZGF0aW9uIGNoZWNrIG9uIHRoZSBwYWNrZXQgaGVhZGVyIHZlcnNpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGxlbmd0aHMgb3Igc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDozOS40NjUyNjIwNTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU4ODA1NjQzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgaXBfaGRyKHNrYiktXFx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OYCBhdCB0aGUgZW50cnkgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgdG8gcmV0dXJuIGVhcmx5IGlmIHRoZSBwYWNrZXQgaXMgbm90IGFuIElQdjQgcGFja2V0IChlLmcuIHdoZW4gcHJvY2Vzc2luZyBkdWFsLXN0YWNrIG9yIElQdjYgc2ticykuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhZGRzIGFuIGVhcmx5IHJldHVybiB2YWxpZGF0aW9uIGNoZWNrIG9uIHRoZSBwYWNrZXQgaGVhZGVyIHZlcnNpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGxlbmd0aHMgb3Igc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3Rpbmcgd2l0aCBLQVNBTiBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDQ6MzkuNDY1MjY2NjY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgzNzUzNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo0NDozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjAxZDI2NGU4ZjM0ZWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcXG5AQCAtMTc0LDYgKzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aWYgKCFmbGFncylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVxcdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xcbiBcXHRcXHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ0OjQwLjc0OTYzODY1NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg1NDQ5Njk3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9jbXNnX3JlY3Zfb2Zmc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gaXBfY21zZ19yZWN2X29mZnNldCgpIHRvIHZlcmlmeSB0aGF0IHRoZSBJUCBoZWFkZXIgdmVyc2lvbiBtYXRjaGVzIElQVkVSU0lPTiAoSVB2NCkgYmVmb3JlIHBhcnNpbmcgSVB2NCBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBmcm9tIHRoZSBza2IuIFRoaXMgYWZmZWN0cyBzb2NrZXQgcmVjdm1zZyBwcm9jZXNzaW5nIGFjcm9zcyBJUHY0IGFuZCBkdWFsLXN0YWNrIElQdjYgc29ja2V0cyBhbmQgcHJldmVudHMgbWFsZm9ybWVkIG9yIGNyb3NzLXByb3RvY29sIGhlYWRlciBtaXNpbnRlcnByZXRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTRhNWVlYzE1NmZkZmNkNjBlY2VjZWM3NDg1ZDczY2NlYjRlNDVmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjQ0OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjAxZDI2NGU4ZjM0ZWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtMTc0LDYgKzE3NCw5IEBAIHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcbiBcdGlmICghZmxhZ3MpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIE9yZGVyZWQgYnkgc3VwcG9zZWQgdXNhZ2UgZnJlcXVlbmN5ICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xuIFx0XHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDo0MC43NDk2NDAyNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQwODY0NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBTb2NrZXQgR2x1ZSBDb2RlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFuZCBpdHMgY29udGV4dC4gVGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaXBfY21zZ19yZWN2X29mZnNldGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGNoZWNrOiBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBzZWN1cml0eSBvciBzdGFiaWxpdHkgbWVhc3VyZSByZWxhdGVkIHRvIElQdjQgcGFja2V0IGhhbmRsaW5nLCBwcm9iYWJseSBkZXNpZ25lZCB0byBhdm9pZCBwcm9jZXNzaW5nIG1hbGZvcm1lZCBwYWNrZXRzLiBJdCdzIGEgY29uZGl0aW9uYWwgY2hlY2sgb24gdGhlIElQIGhlYWRlciB2ZXJzaW9uLCBlbnN1cmluZyBpdCdzIHRoZSBleHBlY3RlZCB2ZXJzaW9uIChgSVBWRVJTSU9OYCwgcHJlc3VtYWJseSA0KS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGVycm9yIGNvbmRpdGlvbiB3YXMgYWRkcmVzc2VkIHdoZXJlIGFuIGluY29ycmVjdGx5IGZvcm1hdHRlZCBJUCBwYWNrZXQgd2FzIHNvbWVob3cgZ2V0dGluZyB0aHJvdWdoLlxuXG5JIHNob3VsZCBwcm9iYWJseSByZWZyZXNoIG15IG1lbW9yeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGRvZXMgYW5kIGhvdyBpdCdzIHVzZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoZWNrLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIGNoZWNrIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbnRyb2wgbWVzc2FnZSBmbGFncyBsaWtlIGBJUF9DTVNHX1BLVElORk9gLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGlzIG5ldyBjaGVjayBwcmV2ZW50cyBzb21lIHNvcnQgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbGlrZSBhIGNyYXNoLCBvciBhbiBpbmZvcm1hdGlvbiBsZWFrLCBpZiBhbiBpbnZhbGlkIHBhY2tldCB3aXRoIGEgbm9uLUlQdjQgSVAgdmVyc2lvbiB3ZXJlIHNvbWVob3cgcmVjZWl2ZWQgYnkgdGhlIHNvY2tldC4gU28sIHRoZSBnb2FsIGlzIHRvIHNlZSB3aGF0IGtpbmQgb2YgZGFtYWdlIGNvdWxkIGJlIGNhdXNlZCBieSBiYWQgcGFja2V0cyBtYWtpbmcgdGhlaXIgd2F5IGludG8gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ0OjQ2LjQ5MDUwNjY2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gMTYyOlxcdFxcdHNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxuIDE2MzpcXHRcXHRzaW4uc2luX3BvcnQgPSBwb3J0c1sxXTtcXG4gMTY0OlxcdFxcdG1lbXNldChzaW4uc2luX3plcm8sIDAsIHNpemVvZihzaW4uc2luX3plcm8pKTtcXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgXFx1MDAyNnNpbik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG4gMTcwOlxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGxlbiwgaW50IG9mZnNldClcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRpZiAoIWZsYWdzKVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktXFx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSlcXG4gMTc4OlxcdFxcdFxcdHJldHVybjtcXG4gMTc5OlxcdFxcbiAxODA6XFx0XFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cXG4gMTgxOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUEtUSU5GTykge1xcbiAxODI6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19QS1RJTkZPO1xcbiAxODU6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMTg2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMTg3OlxcdFxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19UVEwpIHtcXG4gMTkwOlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl90dGwobXNnLCBza2IpO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19UVEw7XFxuIDE5MzpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAxOTQ6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTU6XFx0XFx0fVxcbiAxOTY6XFx0XFxuIDE5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1RPUykge1xcbiAxOTg6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3Rvcyhtc2csIHNrYik7XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1RPUztcXG4gMjAxOlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDIwMjpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIwMzpcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVDVk9QVFMpIHtcXG4gMjA2OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9vcHRzKG1zZywgc2tiKTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX0NNU0dfUkVDVk9QVFM7XFxuIDIwOTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NDo0Ni40OTA3MDk1MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY3ODg5MTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBmdW5jdGlvbmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgd2FudCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuLCBjcnVjaWFsbHksIHdoYXQgaXQncyBiZWluZyB1c2VkIGZvci4gSXMgaXQgaGFuZGxpbmcgYW5jaWxsYXJ5IGRhdGE/IEFyZSB3ZSBkZWFsaW5nIHdpdGggSVAgb3B0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBjb250ZXh0IGlzIGtleSBoZXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIHdpbGwgaW5mb3JtIG15IGFzc3VtcHRpb25zIGFyb3VuZCBwb3RlbnRpYWwgYnVncywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjb2RlIHNlYXJjaCBhbmQgc2VlIHdoYXQgdGhlIGltbWVkaWF0ZSBsYW5kc2NhcGUgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1NSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDU6MjMuMTY5NjAzMzAzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI3NDI4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfY21zZ19yZWN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwLmg9ODE1PXZvaWQgaXB2NF9wa3RpbmZvX3ByZXBhcmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGRyb3BfZHN0KTtcXG5pbmNsdWRlL25ldC9pcC5oOjgxNjp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvaXAuaC04MTctXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9ODM1PXZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtODM3LVxcbmluY2x1ZGUvbmV0L2lwLmg6ODM4OnN0YXRpYyBpbmxpbmUgdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L2lwLmgtODM5LXtcXG5pbmNsdWRlL25ldC9pcC5oOjg0MDpcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2tiLVxcdTAwM2Vzaywgc2tiLCAwLCAwKTtcXG5pbmNsdWRlL25ldC9pcC5oLTg0MS19XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTUzLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NTQ6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3BrdGluZm8oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTUte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02Mi1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjYzOnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNjQte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy02OC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjY5OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90b3Moc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNzAte1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy03My1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjc0OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9vcHRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTc1LXtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtODMtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo4NDpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcmV0b3B0cyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTg1LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xMDEtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxMDI6c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2ZyYWdzaXplKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEwMy17XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTExMi1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjExMzpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfY2hlY2tzdW0oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTE0LVxcdFxcdFxcdFxcdCAgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTEyOC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjEyOTpzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTMwLXtcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3OnN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OC17XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE2OC1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE2OTp2b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzAtXFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODEtXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxODI6XFx0XFx0aXBfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTgzLVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xODktXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19UVEwpIHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE5MDpcXHRcXHRpcF9jbXNnX3JlY3ZfdHRsKG1zZywgc2tiKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE5MS1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTk3LVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfVE9TKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxOTg6XFx0XFx0aXBfY21zZ19yZWN2X3Rvcyhtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xOTktXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIwNS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1JFQ1ZPUFRTKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMDY6XFx0XFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjA3LVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTMtXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19SRVRPUFRTKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMTQ6XFx0XFx0aXBfY21zZ19yZWN2X3JldG9wdHMoc29ja19uZXQoc2spLCBtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMTUtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIyMS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjIyMjpcXHRcXHRpcF9jbXNnX3JlY3Zfc2VjdXJpdHkobXNnLCBza2IpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjIzLVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yMjktXFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19PUklHRFNUQUREUikge1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjMwOlxcdFxcdGlwX2Ntc2dfcmVjdl9kc3RhZGRyKG1zZywgc2tiKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTIzMS1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM3LVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfQ0hFQ0tTVU0pXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyMzg6XFx0XFx0aXBfY21zZ19yZWN2X2NoZWNrc3VtKG1zZywgc2tiLCB0bGVuLCBvZmZzZXQpO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjM5LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMjQwLVxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVDVkZSQUdTSVpFKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjQxOlxcdFxcdGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDItfVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MjQzOkVYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2X29mZnNldCk7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0yNDQtXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTUyNj1pbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTczLVxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6NTc0OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01NzUtXFx0fVxcbi0tXFxubmV0L2lwdjQvcGluZy5jPTg0Mj1pbnQgcGluZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC9waW5nLmMtODg4LVxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaXNrKSlcXG5uZXQvaXB2NC9waW5nLmM6ODg5OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdihtc2csIHNrYik7XFxubmV0L2lwdjQvcGluZy5jLTg5MC1cXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy05MTUtXFx0XFx0XFx0IGluZXRfY21zZ19mbGFncyhpc2spKVxcbm5ldC9pcHY0L3BpbmcuYzo5MTY6XFx0XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG5uZXQvaXB2NC9waW5nLmMtOTE3LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvcmF3LmM9NzQ5PXN0YXRpYyBpbnQgcmF3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy03OTAtXFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2NC9yYXcuYzo3OTE6XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG5uZXQvaXB2NC9yYXcuYy03OTItXFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1RSVU5DKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjAzMz1pbnQgdWRwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTIxMTEtXFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2NC91ZHAuYzoyMTEyOlxcdFxcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBzaywgc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG9mZik7XFxubmV0L2lwdjQvdWRwLmMtMjExMy1cXG4tLVxcbm5ldC9pcHY2L2RhdGFncmFtLmM9NDU1PWludCBpcHY2X3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jLTUyNy1cXHRcXHRcXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXRfc2soc2spKSlcXG5uZXQvaXB2Ni9kYXRhZ3JhbS5jOjUyODpcXHRcXHRcXHRcXHRpcF9jbXNnX3JlY3YobXNnLCBza2IpO1xcbm5ldC9pcHY2L2RhdGFncmFtLmMtNTI5LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTQ2ND1pbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTU2MS1cXHRcXHRpZiAoaW5ldF9jbXNnX2ZsYWdzKGluZXQpKVxcbm5ldC9pcHY2L3VkcC5jOjU2MjpcXHRcXHRcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYixcXG5uZXQvaXB2Ni91ZHAuYy01NjMtXFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgb2ZmKTtcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYz01Mzk9c3RhdGljIGludCBsMnRwX2lwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2lwLmMtNTc1LVxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXFxubmV0L2wydHAvbDJ0cF9pcC5jOjU3NjpcXHRcXHRpcF9jbXNnX3JlY3YobXNnLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfaXAuYy01NzctXFx0aWYgKGZsYWdzIFxcdTAwMjYgTVNHX1RSVU5DKVxcbi0tXFxubmV0L3N1bnJwYy9zdmNzb2NrLmM9NDgyPXN0YXRpYyB2b2lkIHN2Y190Y3BfaGFuZHNoYWtlKHN0cnVjdCBzdmNfeHBydCAqeHBydClcXG4tLVxcbm5ldC9zdW5ycGMvc3Zjc29jay5jLTU0My0vKlxcbm5ldC9zdW5ycGMvc3Zjc29jay5jOjU0NDogKiBTZWUgbmV0L2lwdjYvaXBfc29ja2dsdWUuYyA6IGlwX2Ntc2dfcmVjdl9wa3RpbmZvXFxubmV0L3N1bnJwYy9zdmNzb2NrLmMtNTQ1LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NToyNS4zMDIzNTEwNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjcxMTgwOTE3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3JlIE5ldHdvcmtpbmcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhpcyBjb2RlIHNuaXBwZXQgY2hlY2tzIHRoZSBJUCB2ZXJzaW9uIG9mIGEgcmVjZWl2ZWQgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBpc3N1ZXMgd2hlbiBwcm9jZXNzaW5nIGNvbnRyb2wgbWVzc2FnZXMgKGNtc2dzKSBvbiBzb2NrZXRzIHRoYXQgbWlnaHQgYmUgcmVjZWl2aW5nIElQdjYgcGFja2V0cywgb3IgbWFsZm9ybWVkIHBhY2tldHMuIFRoZSBzcGVjaWZpYyBsaW5lLCBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AsIGlzIHRoZSBrZXkuIEl0IHNlZW1zIGxpa2Ugc29tZW9uZSBhZGRlZCB0aGlzIGNoZWNrIHRvIHByZXZlbnQgYWNjZXNzaW5nIElQdjQgaGVhZGVyIGZpZWxkcyAobGlrZSBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzcywgVFRMLCBUT1MpIG9uIGFuIGBza2JgIHRoYXQgKmlzbid0KiBhY3R1YWxseSBhbiBJUHY0IHBhY2tldC4gQWNjZXNzaW5nIHRoZXNlIGZpZWxkcyBvbiBhIG5vbi1JUHY0IHBhY2tldCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIGF0IGJlc3QsIGluY29ycmVjdCBpbnRlcnByZXRhdGlvbiBvZiBkYXRhLlxuXG5HaXZlbiBteSBleHBlcnRpc2UsIHRoaXMgaXMgY2xlYXJseSBhIGNyaXRpY2FsIGZpeCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCB3aGljaCBkb2VzIHRoZSBjbXNnIHByb2Nlc3NpbmcsIGlzIGNhbGxlZCBkdXJpbmcgYHJlY3Ztc2dgIHdoZW4gY29udHJvbCBtZXNzYWdlcyBhcmUgZW5hYmxlZCBvbiBzb2NrZXRzIGFuZCBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciBJUHY0L0lQdjYgc29ja2V0IGNtc2cgcHJvY2Vzc2luZy5cblxuTGV0J3MgcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBJcyBpdCBjb3JlIG5ldHdvcmtpbmc/IFllcCwgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIHN0YW5kYXJkIGBBRl9JTkVUYC9gQUZfSU5FVDZgIHNvY2tldHMgdXNpbmcgYHJlY3Ztc2dgIHdpdGggY21zZyBmbGFncyBsaWtlIGBJUF9QS1RJTkZPYCwgYElQX1RUTGAsIGV0Yy4gSXMgaXQgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgb3IgY3Jvc3MtcHJvdG9jb2wgY21zZyBwYXJzaW5nIGVycm9ycy4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiB2dWxuZXJhYmlsaXRpZXMgdGhhdCBmdXp6aW5nIGV4Y2VscyBhdCB1bmNvdmVyaW5nLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGFjY2Vzc2libGUuIEl0J3MgY2FsbGVkIGR1cmluZyBgcmVjdm1zZ2Agd2l0aCBjbXNnIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGUgc29ja2V0LiBTcGVjaWZpY2FsbHksIGl0J3MgY2FsbGVkIGJ5IGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3JlY3Ztc2dgLCBgdWRwX3JlY3Ztc2dgLCBgcmF3X3JlY3Ztc2dgLCBgcGluZ19yZWN2bXNnYC4gQW5kIGNyaXRpY2FsbHksIGl0IGlzIHRoZSAqZXhhY3QqIGZ1bmN0aW9uIHRoYXQgd2FzIG1vZGlmaWVkLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC1wcmlvcml0eSB0YXJnZXQuIEkgd2lsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NDY6MTguMDE0MTYyMzg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjA5NzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zb2NrZ2x1ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4OlxcdCAgICAgaXBfb3V0cHV0Lm8gaXBfc29ja2dsdWUubyBpbmV0X2hhc2h0YWJsZXMubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtOS1cXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0NjoxOC42OTAyNjQwODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjIxNjM5MzcxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhhdCBidWlsZCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQnVpbGQgU3lzdGVtKipcblxuT2theSwgc28gYGlwX3NvY2tnbHVlLm9gIGlzIGJlaW5nIGJ1aWx0LiBUaGF0J3MgYSBrZXkgcGFydCBvZiB0aGUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIGJ1aWx0LiBUaGUgYnVpbGQgc3lzdGVtIHRlbGxzIG1lIGl0J3MgbGlua2VkIGluIHZpYSBgb2JqLXlgIGluIGBuZXQvaXB2NC9NYWtlZmlsZWAuIFRoYXQgbWVhbnMgaXQncyBzdGF0aWNhbGx5IGNvbXBpbGVkIGludG8gdGhlIElQdjQgbW9kdWxlLiBOb3csIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgbmV0L2lwdjQvTWFrZWZpbGVgIGlzIGluY2x1ZGVkIGluIHRoZSBsYXJnZXIgYnVpbGQuIExldCBtZSBqdW1wIGJhY2sgdXAgdGhlIGhpZXJhcmNoeSBhbmQgZXhhbWluZSBgbmV0L01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrIGJ1aWxkIGxvZ2ljIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRvIHRoZSByb290IG1ha2UgZmlsZSBpZiBJIHdhbnQgdG8gaGF2ZSBhIGhvbGlzdGljIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIG9yZGVyIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTowMC44NTQyMDM5ODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTgxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkyOTggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9LY29uZmlnPTExND1jb25maWcgSU5FVFxcbi0tXFxubmV0L0tjb25maWctMTMwLVxcdCAgYmVoYXZpb3Igb2YgdGhlIFRDUC9JUCBjb2RlIGJ5IHdyaXRpbmcgdG8gdGhlICh2aXJ0dWFsKSBmaWxlcyBpblxcbm5ldC9LY29uZmlnOjEzMTpcXHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXFxubmV0L0tjb25maWctMTMyLVxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbi0tXFxubmV0L0tjb25maWc9MTM2PWlmIElORVRcXG5uZXQvS2NvbmZpZzoxMzc6c291cmNlIFxcXCJuZXQvaXB2NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTEzOC1zb3VyY2UgXFxcIm5ldC9pcHY2L0tjb25maWdcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZz0yNDc9c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6MjQ4OnNvdXJjZSBcXFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxubmV0L0tjb25maWctMjQ5LXNvdXJjZSBcXFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz0zMz1zdGF0aWMgdm9pZCBza2JfZGVidWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmMtNTItXFxubmV0L2F0bS9icjI2ODQuYzo1MzpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBldGhlcnR5cGVfaXB2NFtdID0geyBFVEhFUlRZUEVfSVBWNCB9O1xcbm5ldC9hdG0vYnIyNjg0LmMtNTQtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZXRoZXJ0eXBlX2lwdjZbXSA9IHsgRVRIRVJUWVBFX0lQVjYgfTtcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NTc9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkW10gPSB7IFBBRF9CUklER0VEIH07XFxubmV0L2F0bS9icjI2ODQuYzo1ODpzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsbGNfb3VpX2lwdjRbXSA9IHsgTExDLCBTTkFQX1JPVVRFRCwgRVRIRVJUWVBFX0lQVjQgfTtcXG5uZXQvYXRtL2JyMjY4NC5jLTU5LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGxsY19vdWlfaXB2NltdID0geyBMTEMsIFNOQVBfUk9VVEVELCBFVEhFUlRZUEVfSVBWNiB9O1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz0yMDI9c3RhdGljIGludCBicjI2ODRfeG1pdF92Y2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmMtMjA4LVxcdFxcdCgoYnJkZXYtXFx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/XFxubmV0L2F0bS9icjI2ODQuYzoyMDk6XFx0XFx0XFx0c2l6ZW9mKGxsY19vdWlfcGlkX3BhZCkgOiBzaXplb2YobGxjX291aV9pcHY0KSkgOlxcbm5ldC9hdG0vYnIyNjg0LmMtMjEwLVxcdFxcdCgoYnJkZXYtXFx1MDAzZXBheWxvYWQgPT0gcF9icmlkZ2VkKSA/IEJSMjY4NF9QQURfTEVOIDogMCk7XFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTIzMC1cXG5uZXQvYXRtL2JyMjY4NC5jOjIzMTpcXHRcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZihsbGNfb3VpX2lwdjQpKTtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzMi1cXHRcXHRcXHRzd2l0Y2ggKHByb3QpIHtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzMy1cXHRcXHRcXHRjYXNlIEVUSF9QX0lQOlxcbm5ldC9hdG0vYnIyNjg0LmM6MjM0OlxcdFxcdFxcdFxcdHNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbGxjX291aV9pcHY0LFxcbm5ldC9hdG0vYnIyNjg0LmM6MjM1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihsbGNfb3VpX2lwdjQpKTtcXG5uZXQvYXRtL2JyMjY4NC5jLTIzNi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9hdG0vYnIyNjg0LmM9NDIyPXN0YXRpYyB2b2lkIGJyMjY4NF9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTQ1MS1cXHRcXHQvKiBhY2NlcHQgcGFja2V0cyB0aGF0IGhhdmUgXFxcImlwdls0Nl1cXFwiIGluIHRoZSBzbmFwIGhlYWRlciAqL1xcbm5ldC9hdG0vYnIyNjg0LmM6NDUyOlxcdFxcdGlmICgoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gKHNpemVvZihsbGNfb3VpX2lwdjQpKSkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1MzpcXHRcXHQgICAgKG1lbWNtcChza2ItXFx1MDAzZWRhdGEsIGxsY19vdWlfaXB2NCxcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1NDpcXHRcXHRcXHQgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHtcXG5uZXQvYXRtL2JyMjY4NC5jLTQ1NS1cXHRcXHRcXHRpZiAobWVtY21wKHNrYi1cXHUwMDNlZGF0YSArIDYsIGV0aGVydHlwZV9pcHY2LFxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy00NTctXFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbm5ldC9hdG0vYnIyNjg0LmM6NDU4OlxcdFxcdFxcdGVsc2UgaWYgKG1lbWNtcChza2ItXFx1MDAzZWRhdGEgKyA2LCBldGhlcnR5cGVfaXB2NCxcXG5uZXQvYXRtL2JyMjY4NC5jOjQ1OTpcXHRcXHRcXHRcXHRcXHRzaXplb2YoZXRoZXJ0eXBlX2lwdjQpKSA9PSAwKVxcbm5ldC9hdG0vYnIyNjg0LmMtNDYwLVxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuLS1cXG5uZXQvYXRtL2JyMjY4NC5jLTQ2Mi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbm5ldC9hdG0vYnIyNjg0LmM6NDYzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKGxsY19vdWlfaXB2NCkpO1xcbm5ldC9hdG0vYnIyNjg0LmMtNDY0LVxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbi0tXFxubmV0L2F0bS9icjI2ODQuYz02NDU9c3RhdGljIHZvaWQgYnIyNjg0X3NldHVwX3JvdXRlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxubmV0L2F0bS9icjI2ODQuYy02NDktXFx0YnJkZXYtXFx1MDAzZW5ldF9kZXYgPSBuZXRkZXY7XFxubmV0L2F0bS9icjI2ODQuYzo2NTA6XFx0bmV0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBzaXplb2YobGxjX291aV9pcHY0KTsgLyogd29yc3QgY2FzZSAqL1xcbm5ldC9hdG0vYnIyNjg0LmMtNjUxLVxcdG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZicjI2ODRfbmV0ZGV2X29wc19yb3V0ZWQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0zOTk9YmF0YWR2X2RhdF9lbnRyeV9oYXNoX2ZpbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgX19iZTMyIGlwLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNDM5LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjQ0MDogKiBAaXA6IGlwdjQgdG8gYWRkL2VkaXRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0NDE6ICogQG1hY19hZGRyOiBtYWMgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIGdpdmVuIGlwdjRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00NDItICogQHZpZDogVkxBTiBpZGVudGlmaWVyXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz02Mzk9c3RhdGljIHZvaWQgYmF0YWR2X2Nob29zZV9uZXh0X2NhbmRpZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNjk4LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjY5OTogKiBAaXBfZHN0OiBpcHY0IHRvIGxvb2sgdXAgaW4gdGhlIERIVFxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTcwMC0gKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTEwODI9c3RhdGljIHUxNiBiYXRhZHZfYXJwX2dldF90eXBlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTI2LVxcdGlwX2RzdCA9IGJhdGFkdl9hcnBfaXBfZHN0KHNrYiwgaGRyX3NpemUpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjExMjc6XFx0aWYgKGlwdjRfaXNfbG9vcGJhY2soaXBfc3JjKSB8fCBpcHY0X2lzX211bHRpY2FzdChpcF9zcmMpIHx8XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEyODpcXHQgICAgaXB2NF9pc19sb29wYmFjayhpcF9kc3QpIHx8IGlwdjRfaXNfbXVsdGljYXN0KGlwX2RzdCkgfHxcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMTI5OlxcdCAgICBpcHY0X2lzX3plcm9uZXQoaXBfc3JjKSB8fCBpcHY0X2lzX2xiY2FzdChpcF9zcmMpIHx8XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTEzMDpcXHQgICAgaXB2NF9pc196ZXJvbmV0KGlwX2RzdCkgfHwgaXB2NF9pc19sYmNhc3QoaXBfZHN0KSlcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTMxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTE4OT1pbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMTUtXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfdW5zbm9vcGFibGVzX2xpc3QpO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzoyMTY6XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0KTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMjE3LVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1jYXN0LndhbnRfYWxsX2lwdjZfbGlzdCk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MzkyPXZvaWQgYmF0YWR2X3NrYl9zZXRfcHJpb3JpdHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjUtXFx0XFx0XFx0cmV0dXJuO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo0MjY6XFx0XFx0cHJpbyA9IChpcHY0X2dldF9kc2ZpZWxkKGlwX2hkcikgXFx1MDAyNiAweGZjKSBcXHUwMDNlXFx1MDAzZSA1O1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYy00MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTc5MT1zdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfaW5pdF9sYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMS1cXHRhdG9taWNfc2V0KFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX3Vuc25vb3BhYmxlcywgMCk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo4MjI6XFx0YXRvbWljX3NldChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZW1jYXN0Lm51bV93YW50X2FsbF9pcHY0LCAwKTtcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMy1cXHRhdG9taWNfc2V0KFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjYsIDApO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9ODQ9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpiYXRhZHZfbWNhc3RfZ2V0X2JyaWRnZShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5LS8qKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDogKiBiYXRhZHZfbWNhc3RfbWxhX3J0cl9mbGFnc19tZXNoaWZfZ2V0X2lwdjQoKSAtIGdldCBtY2FzdCByb3V0ZXIgZmxhZ3MgZnJvbVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMS0gKiAgbm9kZSBmb3IgSVB2NFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTA5LSAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExMDpzdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTExLXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE2ND1zdGF0aWMgdTggYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTcxLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE3MjpcXHRmbGFncyB8PSBiYXRhZHZfbWNhc3RfbWxhX3J0cl9mbGFnc19tZXNoaWZfZ2V0X2lwdjQoZGV2KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNzMtXFx0ZmxhZ3MgfD0gYmF0YWR2X21jYXN0X21sYV9ydHJfZmxhZ3NfbWVzaGlmX2dldF9pcHY2KGRldik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0yNzQ9YmF0YWR2X21jYXN0X21sYV9mbGFnc19nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5NS1cXHRtbGFfZmxhZ3MuYnJpZGdlZCA9IDE7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6Mjk2OlxcdHFyNCA9IFxcdTAwMjZtbGFfZmxhZ3MucXVlcmllcl9pcHY0O1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTI5Ny1cXHRxcjYgPSBcXHUwMDI2bWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NjtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTM0MD1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfbWxhX2lzX2R1cGxpY2F0ZSh1OCAqbWNhc3RfYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM1Mi0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozNTM6ICogYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoKSAtIGdldCBtZXNoaWYgSVB2NCBtdWx0aWNhc3QgbGlzdGVuZXJzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzU0LSAqIEBkZXY6IHRoZSBkZXZpY2UgdG8gY29sbGVjdCBtdWx0aWNhc3QgYWRkcmVzc2VzIGZyb21cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTM2Nj1zdGF0aWMgaW50XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MzY3OmJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzY4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqbWNhc3RfbGlzdCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTM5MC1cXHRcXHRpZiAoZmxhZ3MtXFx1MDAzZXR2bHZfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfTUNBU1RfV0FOVF9BTExfVU5TTk9PUEFCTEVTIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MzkxOlxcdFxcdCAgICBpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXFx1MDAzZW11bHRpYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzkyLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk0LVxcdFxcdGlmICghKGZsYWdzLVxcdTAwM2V0dmx2X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzozOTU6XFx0XFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChwbWMtXFx1MDAzZW11bHRpYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMzk2LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NTIwPWJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNTMwLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjUzMTpcXHRyZXQ0ID0gYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoZGV2LCBtY2FzdF9saXN0LCBmbGFncyk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNTMyLVxcdGlmIChyZXQ0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTU4NT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjA5LVxcdFxcdFxcdGlmICh0dmx2X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX1VOU05PT1BBQkxFUyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjYxMDpcXHRcXHRcXHQgICAgaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoYnJfaXBfZW50cnktXFx1MDAzZWFkZHIuZHN0LmlwNCkpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjExLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtNjEzLVxcdFxcdFxcdGlmICghKHR2bHZfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfTUNBU1RfV0FOVF9OT19SVFI0KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjYxNDpcXHRcXHRcXHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGJyX2lwX2VudHJ5LVxcdTAwM2VhZGRyLmRzdC5pcDQpKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTYxNS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTgwNz1iYXRhZHZfbWNhc3RfYnJpZGdlX2xvZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtODIwLVxcdFxcdGJhdGFkdl9tY2FzdF9xdWVyaWVyX2xvZyhiYXRfcHJpdiwgXFxcIklHTVBcXFwiLFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjgyMTpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm9sZF9mbGFncy1cXHUwMDNlcXVlcmllcl9pcHY0LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjgyMjpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5ld19mbGFncy1cXHUwMDNlcXVlcmllcl9pcHY0KTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy04MjMtXFx0XFx0YmF0YWR2X21jYXN0X3F1ZXJpZXJfbG9nKGJhdF9wcml2LCBcXFwiTUxEXFxcIixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTkzOT1zdGF0aWMgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05NTMtLyoqXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6OTU0OiAqIGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NCgpIC3igK9jaGVjayBmb3IgSUdNUCByZXBvcnRzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTU1LSAqIEBza2I6IHRoZSBldGhlcm5ldCBmcmFtZSBkZXN0aW5lZCBmb3IgdGhlIG1lc2hcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk2NS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo5NjY6c3RhdGljIGJvb2wgYmF0YWR2X21jYXN0X2lzX3JlcG9ydF9pcHY0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTY3LXtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk4MS0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzo5ODI6ICogYmF0YWR2X21jYXN0X2ZvcndfbW9kZV9jaGVja19pcHY0KCkgLSBjaGVjayBmb3Igb3B0aW1pemVkIGZvcndhcmRpbmdcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy05ODMtICogIHBvdGVudGlhbFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtOTk0LSAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjk5NTpzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2tfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTk5Ni1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDA1LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMDY6XFx0aWYgKGJhdGFkdl9tY2FzdF9pc19yZXBvcnRfaXB2NChza2IpKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEwMDctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMDEzLVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEwMTQ6XFx0aWYgKGlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGlwaGRyLVxcdTAwM2VkYWRkcikpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTAxNS1cXHRcXHQqaXNfdW5zbm9vcGFibGUgPSB0cnVlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTEwND1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X21vZGVfY2hlY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExMTUtXFx0Y2FzZSBFVEhfUF9JUDpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTE2OlxcdFxcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd19tb2RlX2NoZWNrX2lwdjQoYmF0X3ByaXYsIHNrYixcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTE3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBpc191bnNub29wYWJsZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTExNDE9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcF9jb3VudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE0NS1cXHRjYXNlIEVUSF9QX0lQOlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExNDY6XFx0XFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExNDctXFx0Y2FzZSBFVEhfUF9JUFY2Olxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTMxND1iYXRhZHZfbWNhc3RfZm9yd190dChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0Ni0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzQ3OiAqIGJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwdjQoKSAtIGZvcndhcmQgdG8gbm9kZXMgd2l0aCB3YW50LWFsbC1pcHY0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM0OC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzNTk9c3RhdGljIGludFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNjA6YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfaXB2NChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNjEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM2OC1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19ub2RlLFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNjk6XFx0XFx0XFx0XFx0IFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0LFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNzA6XFx0XFx0XFx0XFx0IG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZSkge1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNzEtXFx0XFx0bmV3c2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0MzU9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGwoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE0MzktXFx0Y2FzZSBFVEhfUF9JUDpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNDQwOlxcdFxcdHJldHVybiBiYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY0KGJhdF9wcml2LCBza2IsIHZpZCk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQ0MS1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xNjEyPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF93YW50X3Vuc25vb3BfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ2LS8qKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NDc6ICogYmF0YWR2X21jYXN0X3dhbnRfaXB2NF91cGRhdGUoKSAtIHVwZGF0ZSB3YW50LWFsbC1pcHY0IGNvdW50ZXIgYW5kIGxpc3RcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjQ4LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1Ni0gKi9cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjU3OnN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY1OC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY2MC17XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY2MTpcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3Qud2FudF9hbGxfaXB2NF9saXN0O1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE2NjI6XFx0c3RydWN0IGhsaXN0X25vZGUgKm5vZGUgPSBcXHUwMDI2b3JpZy1cXHUwMDNlbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NjMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjY4LVxcdCAgICAhKG9yaWctXFx1MDAzZW1jYXN0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpKSB7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTY2OTpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubnVtX3dhbnRfYWxsX2lwdjQpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE2NzAtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNjc5LVxcdFxcdCAgIG9yaWctXFx1MDAzZW1jYXN0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQpIHtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNjgwOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtY2FzdC5udW1fd2FudF9hbGxfaXB2NCk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTY4MS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE4OTA9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X3R2bHZfb2dtX2hhbmRsZXIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5MTQtXFx0YmF0YWR2X21jYXN0X3dhbnRfdW5zbm9vcF91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIG1jYXN0X2ZsYWdzKTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTE1OlxcdGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBtY2FzdF9mbGFncyk7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTkxNi1cXHRiYXRhZHZfbWNhc3Rfd2FudF9pcHY2X3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgbWNhc3RfZmxhZ3MpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTk1MD1pbnQgYmF0YWR2X21jYXN0X21lc2hfaW5mb19wdXQoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NTgtXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTk1OTpcXHRcXHRpZiAoYmF0X3ByaXYtXFx1MDAzZW1jYXN0Lm1sYV9mbGFncy5xdWVyaWVyX2lwdjQuZXhpc3RzKVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjAtXFx0XFx0XFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY0X0VYSVNUUztcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE5NjItXFx0XFx0XFx0ZmxhZ3NfcHJpdiB8PSBCQVRBRFZfTUNBU1RfRkxBR1NfUVVFUklFUl9JUFY2X0VYSVNUUztcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxOTYzOlxcdFxcdGlmIChiYXRfcHJpdi1cXHUwMDNlbWNhc3QubWxhX2ZsYWdzLnF1ZXJpZXJfaXB2NC5zaGFkb3dpbmcpXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTk2NC1cXHRcXHRcXHRmbGFnc19wcml2IHw9IEJBVEFEVl9NQ0FTVF9GTEFHU19RVUVSSUVSX0lQVjRfU0hBRE9XSU5HO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MjE4OT12b2lkIGJhdGFkdl9tY2FzdF9wdXJnZV9vcmlnKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMjE5NS1cXHRiYXRhZHZfbWNhc3Rfd2FudF91bnNub29wX3VwZGF0ZShiYXRfcHJpdiwgb3JpZywgQkFUQURWX05PX0ZMQUdTKTtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoyMTk2OlxcdGJhdGFkdl9tY2FzdF93YW50X2lwdjRfdXBkYXRlKGJhdF9wcml2LCBvcmlnLCBCQVRBRFZfTk9fRkxBR1MpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTIxOTctXFx0YmF0YWR2X21jYXN0X3dhbnRfaXB2Nl91cGRhdGUoYmF0X3ByaXYsIG9yaWcsIEJBVEFEVl9OT19GTEFHUyk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTExND1iYXRhZHZfbWNhc3RfZm9yd19vcmlnX2VudHJ5KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTgtXFx0c3dpdGNoIChlbnRyeV9vZmZzZXQpIHtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExOTpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlLCBtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpOlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTIwLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUsIG1jYXN0X3dhbnRfYWxsX2lwdjZfbm9kZSk6XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTI3Mz1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19wdXNoX3dhbnRfYWxsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTI4NC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjI4NTpcXHRcXHRoZWFkID0gXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtY2FzdC53YW50X2FsbF9pcHY0X2xpc3Q7XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0yODYtXFx0XFx0b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUsXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoyODc6XFx0XFx0XFx0XFx0ICBtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMjg4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jPTk0Nz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X29yaWdfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05ODgtXFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZvcmlnX25vZGUtXFx1MDAzZW1jYXN0X3dhbnRfYWxsX3Vuc25vb3BhYmxlc19ub2RlKTtcXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM6OTg5OlxcdElOSVRfSExJU1RfTk9ERShcXHUwMDI2b3JpZ19ub2RlLVxcdTAwM2VtY2FzdF93YW50X2FsbF9pcHY0X25vZGUpO1xcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05OTAtXFx0SU5JVF9ITElTVF9OT0RFKFxcdTAwMjZvcmlnX25vZGUtXFx1MDAzZW1jYXN0X3dhbnRfYWxsX2lwdjZfbm9kZSk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTQxMT1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1MS1cXHQvKipcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjQ1MjpcXHQgKiBAbWNhc3Rfd2FudF9hbGxfaXB2NF9ub2RlOiBhIGxpc3Qgbm9kZSBmb3IgdGhlIG1jYXN0LndhbnRfYWxsX2lwdjRcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1My1cXHQgKiAgbGlzdFxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtNDU0LVxcdCAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6NDU1OlxcdHN0cnVjdCBobGlzdF9ub2RlIG1jYXN0X3dhbnRfYWxsX2lwdjRfbm9kZTtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTQ1Ni1cXHQvKipcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTIyMT1zdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyB7XFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjIyOlxcdC8qKiBAcXVlcmllcl9pcHY0OiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBJR01QIHF1ZXJpZXIgaW4gdGhlIG1lc2ggKi9cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyMjM6XFx0c3RydWN0IGJhdGFkdl9tY2FzdF9xdWVyaWVyX3N0YXRlIHF1ZXJpZXJfaXB2NDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyMjQtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTEyNDE9c3RydWN0IGJhdGFkdl9wcml2X21jYXN0IHtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTI1NC1cXHQvKipcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjEyNTU6XFx0ICogQHdhbnRfYWxsX2lwdjRfbGlzdDogYSBsaXN0IG9mIG9yaWdfbm9kZXMgd2FudGluZyBhbGwgSVB2NCBtdWx0aWNhc3RcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTYtXFx0ICogIHRyYWZmaWNcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTctXFx0ICovXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjU4OlxcdHN0cnVjdCBobGlzdF9oZWFkIHdhbnRfYWxsX2lwdjRfbGlzdDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyNTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTMtXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxMjk0OlxcdC8qKiBAbnVtX3dhbnRfYWxsX2lwdjQ6IGNvdW50ZXIgZm9yIGl0ZW1zIGluIHdhbnRfYWxsX2lwdjRfbGlzdCAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTI5NTpcXHRhdG9taWNfdCBudW1fd2FudF9hbGxfaXB2NDtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEyOTYtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTEzMTMtXFx0ICogQHdhbnRfbGlzdHNfbG9jazogbG9jayBmb3IgcHJvdGVjdGluZyBtb2RpZmljYXRpb25zIHRvIG1jYXN0c1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTMxNDpcXHQgKiAgd2FudF9hbGxfe3Vuc25vb3BhYmxlcyxpcHY0LGlwdjZ9X2xpc3QgKHRyYXZlcnNhbHMgYXJlIHJjdS1sb2NrZWQpXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xMzE1LVxcdCAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xNTYtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNTc6XFx0aWYgKGlwdjRfaXNfbG9vcGJhY2sodGlwKSB8fFxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MTU4OlxcdCAgICBpcHY0X2lzX211bHRpY2FzdCh0aXApKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTU5LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9NjY5PXN0YXRpYyBib29sIGlzX3ZhbGlkX21kYl9zb3VyY2Uoc3RydWN0IG5sYXR0ciAqYXR0ciwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy02NzctXFx0XFx0fVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6Njc4OlxcdFxcdGlmIChpcHY0X2lzX211bHRpY2FzdChubGFfZ2V0X2luX2FkZHIoYXR0cikpKSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYy02NzktXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIklQdjQgbXVsdGljYXN0IHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBhbGxvd2VkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEyMzE9c3RhdGljIGludCBicl9tZGJfY29uZmlnX2luaXQoc3RydWN0IGJyX21kYl9jb25maWcgKmNmZywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3Ny1cXHRpZiAoY2ZnLVxcdTAwM2VlbnRyeS1cXHUwMDNlYWRkci5wcm90byA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNzg6XFx0ICAgIGlwdjRfaXNfemVyb25ldChjZmctXFx1MDAzZWVudHJ5LVxcdTAwM2VhZGRyLnUuaXA0KSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI3OS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiSVB2NCBlbnRyeSBncm91cCBhZGRyZXNzIDAuMC4wLjAgaXMgbm90IGFsbG93ZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM1NT1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMzY0OlxcdFxcdGlmIChpcHY0X2lzX3plcm9uZXQoc3JjX2lwLVxcdTAwM2VzcmMuaXA0KSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTM2NTpcXHRcXHQgICAgaXB2NF9pc19tdWx0aWNhc3Qoc3JjX2lwLVxcdTAwM2VzcmMuaXA0KSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTEzNjYtXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1Njk9c3RhdGljIGludCBicl9pcDRfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTc4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU3OTpcXHRpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU4MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzgxOD1zdGF0aWMgdm9pZCBicl9pcDRfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MjYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODI3OlxcdGlmIChpcHY0X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODI4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzkxOD1zdGF0aWMgaW50IGJyX2lwNF9tdWx0aWNhc3RfbXJkX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zOTMyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzkzMzpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9pcHY0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzNC1cXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NDUtXFx0aWYgKGVyciA9PSAtRU5PTVNHKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ2OlxcdFxcdGlmICghaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzk0Ny1cXHRcXHRcXHRCUl9JTlBVVF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbXJvdXRlcnNfb25seSA9IDE7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTQ4OlxcdFxcdH0gZWxzZSBpZiAocGltX2lwdjRfYWxsX3BpbV9yb3V0ZXJzKGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NDktXFx0XFx0XFx0aWYgKGlwX2hkcihza2IpLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1BJTSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTAtXFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X3BpbShicm1jdHgsIHBtY3R4LCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzk1MTpcXHRcXHR9IGVsc2UgaWYgKGlwdjRfaXNfYWxsX3Nub29wZXJzKGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcikpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5NTItXFx0XFx0XFx0YnJfaXA0X211bHRpY2FzdF9tcmRfcmN2KGJybWN0eCwgcG1jdHgsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQwNTc9aW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTEtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDkyOlxcdFxcdHJldCA9IGJyX211bHRpY2FzdF9pcHY0X3JjdigqYnJtY3R4LCAqcG1jdHgsIHNrYiwgdmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwOTMtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ3MzA9aW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3Mi1cXHQgKiBicl9tdWx0aWNhc3RfcmN2IGZpcnN0IGNoZWNrcyBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgYW5kXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzczOlxcdCAqIHJldHVybnMgd2l0aG91dCBjYWxsaW5nIGJyX211bHRpY2FzdF9pcHY0LzZfcmN2IGlmIGl0J3Mgbm90XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc0LVxcdCAqIGVuYWJsZWQuIE1vdmVkIGJvdGggZnVuY3Rpb25zIG91dCBqdXN0IGZvciBzeW1tZXRyeS5cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjUtI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjYuaFxcdTAwM2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTkzPXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXJfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA1LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA2OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yMDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzA9c3RhdGljIGlubGluZSBib29sXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzE6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMyLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMzMte1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzM0OlxcdHJldHVybiBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIgIT0gbmZfYnJpZGdlLVxcdTAwM2VpcHY0X2RhZGRyO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzM1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9Mzc2PXN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zOTYtXFx0bmZfYnJpZGdlLVxcdTAwM2Vpbl9wcmVyb3V0aW5nID0gMDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM5NzpcXHRpZiAoYnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChza2IsIG5mX2JyaWRnZSkpIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM5OC1cXHRcXHRyZWFzb24gPSBpcF9yb3V0ZV9pbnB1dChza2IsIGlwaC1cXHUwMDNlZGFkZHIsIGlwaC1cXHUwMDNlc2FkZHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTQ4Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3ByZV9yb3V0aW5nKHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyNC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUyNTpcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTI2LVxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUzMy1cXHRuZl9icmlkZ2UgPSBuZl9icmlkZ2VfaW5mb19nZXQoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzNDpcXHRuZl9icmlkZ2UtXFx1MDAzZWlwdjRfZGFkZHIgPSBpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTY3Mz1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA0LVxcdGlmIChwZiA9PSBORlBST1RPX0lQVjQpIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcwNTpcXHRcXHRpZiAoYnJfdmFsaWRhdGVfaXB2NChzdGF0ZS1cXHUwMDNlbmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzA2LVxcdFxcdFxcdHJldHVybiBORl9EUk9QX1JFQVNPTihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUiwgMCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTgzNT1zdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NzAtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4NzE6XFx0XFx0aWYgKGJyX3ZhbGlkYXRlX2lwdjQobmV0LCBza2IpKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtODcyLVxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2lwdjYuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQuaFxcdTAwM2VcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9pcHY2LmMtMjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY2LmhcXHUwMDNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMjA0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9pcCAqaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMjA3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEyMDg6XFx0XFx0cmV0dXJuIGlwdjRfaXNfemVyb25ldChpcC1cXHUwMDNlc3JjLmlwNCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTIwOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icmlkZ2UuYy0xOC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9uZl9jb25udHJhY2tfYnJpZGdlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JyaWRnZS5jLTIwLVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZnRfcmVqZWN0LmhcXHUwMDNlXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYzoxNDojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX3JlamVjdC5oXFx1MDAzZVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMtMTUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9yZWplY3QuaFxcdTAwM2VcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlci5jPTM2ND1zdGF0aWMgdm9pZCBjZXBoX3NvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMzcxLVxcdCAqIGRvZXNuJ3QgZ2V0IGNhbGxlZCBhZ2FpbiB1bnRpbCBjZXBoX2Nvbl92WzEyXV90cnlfd3JpdGUoKSBmaWxsc1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjM3MjpcXHQgKiB0aGUgc29ja2V0IGJ1ZmZlci4gU2VlIG5ldC9pcHY0L3RjcF9pbnB1dC5jOnRjcF9jaGVja19zcGFjZSgpXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtMzczLVxcdCAqIGFuZCBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UoKS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTMzNjM9dm9pZCBuZXRpZl9zZXRfdHNvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzM2Ny1cXHRcXHRuZXRpZl9zZXRfZ3NvX21heF9zaXplKGRldiwgc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmM6MzM2ODpcXHRpZiAoc2l6ZSBcXHUwMDNjIFJFQURfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplKSlcXG5uZXQvY29yZS9kZXYuYzozMzY5OlxcdFxcdG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShkZXYsIHNpemUpO1xcbm5ldC9jb3JlL2Rldi5jLTMzNzAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxNDUtXFx0ZGV2LVxcdTAwM2Vncm9fbWF4X3NpemUgPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jOjEyMTQ2OlxcdGRldi1cXHUwMDNlZ3NvX2lwdjRfbWF4X3NpemUgPSBHU09fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jOjEyMTQ3OlxcdGRldi1cXHUwMDNlZ3JvX2lwdjRfbWF4X3NpemUgPSBHUk9fTEVHQUNZX01BWF9TSVpFO1xcbm5ldC9jb3JlL2Rldi5jLTEyMTQ4LVxcdGRldi1cXHUwMDNldHNvX21heF9zaXplID0gVFNPX0xFR0FDWV9NQVhfU0laRTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMjk4PXN0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3N0cnVjdF9jaGVjayh2b2lkKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTMzMDYtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF90eCwgZ3NvX21heF9zaXplKTtcXG5uZXQvY29yZS9kZXYuYzoxMzMwNzpcXHRDQUNIRUxJTkVfQVNTRVJUX0dST1VQX01FTUJFUihzdHJ1Y3QgbmV0X2RldmljZSwgbmV0X2RldmljZV9yZWFkX3R4LCBnc29faXB2NF9tYXhfc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmMtMTMzMDgtXFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF90eCwgZ3NvX21heF9zZWdzKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMzM5LVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIGdyb19tYXhfc2l6ZSk7XFxubmV0L2NvcmUvZGV2LmM6MTMzNDA6XFx0Q0FDSEVMSU5FX0FTU0VSVF9HUk9VUF9NRU1CRVIoc3RydWN0IG5ldF9kZXZpY2UsIG5ldF9kZXZpY2VfcmVhZF9yeCwgZ3JvX2lwdjRfbWF4X3NpemUpO1xcbm5ldC9jb3JlL2Rldi5jLTEzMzQxLVxcdENBQ0hFTElORV9BU1NFUlRfR1JPVVBfTUVNQkVSKHN0cnVjdCBuZXRfZGV2aWNlLCBuZXRfZGV2aWNlX3JlYWRfcngsIHJ4X2hhbmRsZXIpO1xcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MjA1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfZ3NvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0yMTAtXFx0aWYgKHNpemUgXFx1MDAzYz0gR1NPX0xFR0FDWV9NQVhfU0laRSlcXG5uZXQvY29yZS9kZXYuaDoyMTE6XFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMTItfVxcbi0tXFxubmV0L2NvcmUvZGV2Lmg9MjIxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zZXRfZ3JvX21heF9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuaC0yMjYtXFx0aWYgKHNpemUgXFx1MDAzYz0gR1JPX0xFR0FDWV9NQVhfU0laRSlcXG5uZXQvY29yZS9kZXYuaDoyMjc6XFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdyb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMjgtfVxcbm5ldC9jb3JlL2Rldi5oLTIyOS1cXG5uZXQvY29yZS9kZXYuaDoyMzA6c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3NldF9nc29faXB2NF9tYXhfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2Rldi5oLTIzMS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHNpemUpXFxubmV0L2NvcmUvZGV2LmgtMjMyLXtcXG5uZXQvY29yZS9kZXYuaDoyMzM6XFx0LyogZGV2LVxcdTAwM2Vnc29faXB2NF9tYXhfc2l6ZSBpcyByZWFkIGxvY2tsZXNzbHkgZnJvbSBza19zZXR1cF9jYXBzKCkgKi9cXG5uZXQvY29yZS9kZXYuaDoyMzQ6XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZWdzb19pcHY0X21heF9zaXplLCBzaXplKTtcXG5uZXQvY29yZS9kZXYuaC0yMzUtfVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTowMC45MjYxOTAwOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNTgwOTU4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGZvciBGdXp6aW5nIENhbmRpZGF0ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZGVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBmb3IgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvS2NvbmZpZ2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfSU5FVGAgaXMgdGhlIHByaW1hcnkgZmFjdG9yLiBTcGVjaWZpY2FsbHksIGxpbmUgMTE0IGRlZmluZXMgaXQuIFRoZW4sIEkgbmVlZGVkIHRvIHNlZSBpZiBgQ09ORklHX0lQVjZgIHdhcyBhbHNvIHJlbGV2YW50LCBzaW5jZSBJUHY2IG9mdGVuIGludGVyYWN0cyB3aXRoIElQdjQgY29kZS4gQSBjaGVjayBvZiBgbmV0L2lwdjYvS2NvbmZpZ2AgY29uZmlybWVkIGBDT05GSUdfSVBWNmAgY29tcGlsZXMgYG5ldC9pcHY2L2AsIGFuZCBgQ09ORklHX0lORVRgIGNvbXBpbGVzIGBuZXQvaXB2NC9gLlxuXG5JIHRoZW4gdHJhY2VkIHRoZSBmdW5jdGlvbiBhbmQgZm91bmQgdGhhdCBgaXBfY21zZ19yZWN2X29mZnNldGAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHdoaWNoIGdldHMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JTkVUPXlgLiBCdXQgaGVyZSdzIHRoZSBraWNrZXI6IEkgc2VlIGBDT05GSUdfSVBWNmAgbWlnaHQgYmUgaW52b2x2ZWQgYmVjYXVzZSBgdWRwdjZfcmVjdm1zZ2AgYW5kIGBpcHY2X3JlY3ZfZXJyb3JgICphbHNvKiBjYWxsIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBhbmQgYGlwX2Ntc2dfcmVjdmAgaWYgYGluZXRfY21zZ19mbGFncyhpbmV0KWAgaXMgbm9uLXplcm8gKHdoaWNoIGhhcHBlbnMgd2l0aCBJUHY0LW1hcHBlZCBJUHY2IHNvY2tldHMgb3IgSVB2NiBzb2NrZXRzIHdpdGggSVB2NCBjbXNnIGVuYWJsZWQpLiBUaGlzIHRlbGxzIG1lIGl0J3MgaW1wb3J0YW50IHRvIHRlc3Qgd2l0aCBJUHY2IGVuYWJsZWQgYXMgd2VsbC5cblxuTmV4dCwgSSBsb29rZWQgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgc3RhdGljIGFuZCBpcyBleHBvcnRlZC4gVGhlIGRlZmluaXRpb24gaXM6XG5gYGBjXG52b2lkIGlwX2Ntc2dfcmVjdl9vZmZzZXQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXG5cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXG5gYGBcbndpdGggYW4gYEVYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2X29mZnNldClgLlxuXG5JIHRoZW4gbWFkZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgd2VyZSBhbGwgaW4gcGxhY2U6IGBXb3J0aEZ1enppbmdgIGlzIHRydWUsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgW1wiaXBfY21zZ19yZWN2X29mZnNldFwiXSwgYW5kIGBFbmFibGVDb25maWdzYCBhcmUgW1wiSU5FVFwiLCBcIklQVjZcIl0uXG5cbkZpbmFsbHksIEkgbm90aWNlZCB0aGVyZSdzIGEgdmVyc2lvbiBjaGVjayBgaWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSkgcmV0dXJuO2AgaW4gYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBUaGlzIGlzIGEgKmNyaXRpY2FsKiBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYXMgaXQgcHJvdGVjdHMgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbnZhbGlkIGhlYWRlciBhY2Nlc3Mgd2hlbiBjb250cm9sIG1lc3NhZ2VzIChjbXNnKSBhcmUgcHJvY2Vzc2VkIGZvciBub24tSVB2NCBwYWNrZXRzIChsaWtlIElQdjYgcGFja2V0cyBvbiBkdWFsLXN0YWNrIG9yIG1hcHBlZCBzb2NrZXRzLCBvciBjb3JydXB0ZWQgc29ja2V0cykuIEl0IHNlZW1zIGxpa2UgaXQgcHJldmVudHMgY29ycnVwdGVkIHBhY2tldHMgb3IgaW52YWxpZCBJUCB2ZXJzaW9uIGluIGNvbnRyb2wgbWVzc2FnZXMuIFRoaXMgc3VnZ2VzdHMgaXQncyBhIGdvb2QgcGxhY2UgdG8gdGVzdCBmdXp6aW5nIGlucHV0cy5cblxuVGhpcyBhbGwgbG9va3MgdmVyeSBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNTIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjA4NDI4ODQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDQ0MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfY21zZ19yZWN2X29mZnNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGlwX2Ntc2dfcmVjdl9vZmZzZXQoKSB0byB2ZXJpZnkgdGhhdCB0aGUgSVAgaGVhZGVyIHZlcnNpb24gbWF0Y2hlcyBJUFZFUlNJT04gKElQdjQpIGJlZm9yZSBwYXJzaW5nIElQdjQgY29udHJvbCBtZXNzYWdlcyAoY21zZykgZnJvbSB0aGUgc2tiLiBUaGlzIGFmZmVjdHMgc29ja2V0IHJlY3Ztc2cgcHJvY2Vzc2luZyBhY3Jvc3MgSVB2NCBhbmQgZHVhbC1zdGFjayBJUHY2IHNvY2tldHMgYW5kIHByZXZlbnRzIG1hbGZvcm1lZCBvciBjcm9zcy1wcm90b2NvbCBoZWFkZXIgbWlzaW50ZXJwcmV0YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBpcF9jbXNnX3JlY3Zfb2Zmc2V0KCkgdG8gdmVyaWZ5IHRoYXQgdGhlIElQIGhlYWRlciB2ZXJzaW9uIG1hdGNoZXMgSVBWRVJTSU9OIChJUHY0KSBiZWZvcmUgcGFyc2luZyBJUHY0IGNvbnRyb2wgbWVzc2FnZXMgKGNtc2cpIGZyb20gdGhlIHNrYi4gVGhpcyBhZmZlY3RzIHNvY2tldCByZWN2bXNnIHByb2Nlc3NpbmcgYWNyb3NzIElQdjQgYW5kIGR1YWwtc3RhY2sgSVB2NiBzb2NrZXRzIGFuZCBwcmV2ZW50cyBtYWxmb3JtZWQgb3IgY3Jvc3MtcHJvdG9jb2wgaGVhZGVyIG1pc2ludGVycHJldGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OToyNi4xOTkzMzk2MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTE0NjQ2OTg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjE5OTc4NTU4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyOTE0NjAxNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NGE1ZWVjMTU2ZmRmY2Q2MGVjZWNlYzc0ODVkNzNjY2ViNGU0NWY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6NDQ6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMDFkMjY0ZThmMzRlYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNzQsNiArMTc0LDkgQEAgdm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFmbGFncylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKHVubGlrZWx5KGlwX2hkcihza2IpLVx1MDAzZXZlcnNpb24gIT0gSVBWRVJTSU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XG4gXHRcdGlwX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjQ5OjI2LjE5OTc4NzUwOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjA1Mzk2NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIElQIFNvY2tldCBHbHVlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBkaWZmIGFuZCBpdHMgY29udGV4dCwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcGlucG9pbnQgYSBzcGVjaWZpYyBhcmVhOyBzcGVjaWZpY2FsbHksIEknbGwgYmUgdGFyZ2V0aW5nIHRoZSB2aWNpbml0eSBvZiBsaW5lIDE3NCB3aXRoaW4gdGhlIGBpcF9zb2NrZ2x1ZS5jYCBmaWxlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBkZXRhaWxzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTo0Mi4yNTM3NTYxMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcbiAxNjE6XFx0XFx0c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbiAxNjI6XFx0XFx0c2luLnNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcjtcXG4gMTYzOlxcdFxcdHNpbi5zaW5fcG9ydCA9IHBvcnRzWzFdO1xcbiAxNjQ6XFx0XFx0bWVtc2V0KHNpbi5zaW5femVybywgMCwgc2l6ZW9mKHNpbi5zaW5femVybykpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfT1JJR0RTVEFERFIsIHNpemVvZihzaW4pLCBcXHUwMDI2c2luKTtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0dm9pZCBpcF9jbXNnX3JlY3Zfb2Zmc2V0KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbiAxNzA6XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0bGVuLCBpbnQgb2Zmc2V0KVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IGluZXRfY21zZ19mbGFncyhpbmV0X3NrKHNrKSk7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdGlmICghZmxhZ3MpXFxuIDE3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT04pKVxcbiAxNzg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHQvKiBPcmRlcmVkIGJ5IHN1cHBvc2VkIHVzYWdlIGZyZXF1ZW5jeSAqL1xcbiAxODE6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19QS1RJTkZPKSB7XFxuIDE4MjpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7XFxuIDE4MzpcXHRcXG4gMTg0OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1BLVElORk87XFxuIDE4NTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAxODY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxODc6XFx0XFx0fVxcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1RUTCkge1xcbiAxOTA6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3R0bChtc2csIHNrYik7XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1RUTDtcXG4gMTkzOlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDE5NDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDE5NTpcXHRcXHR9XFxuIDE5NjpcXHRcXG4gMTk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfVE9TKSB7XFxuIDE5ODpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfdG9zKG1zZywgc2tiKTtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfklQX0NNU0dfVE9TO1xcbiAyMDE6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMjAyOlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjAzOlxcdFxcdH1cXG4gMjA0OlxcdFxcbiAyMDU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19SRUNWT1BUUykge1xcbiAyMDY6XFx0XFx0XFx0aXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+SVBfQ01TR19SRUNWT1BUUztcXG4gMjA5OlxcdFxcdFxcdGlmICghZmxhZ3MpXFxuIDIxMDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDIxMTpcXHRcXHR9XFxuIDIxMjpcXHRcXG4gMjEzOlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IElQX0NNU0dfUkVUT1BUUykge1xcbiAyMTQ6XFx0XFx0XFx0aXBfY21zZ19yZWN2X3JldG9wdHMoc29ja19uZXQoc2spLCBtc2csIHNrYik7XFxuIDIxNTpcXHRcXG4gMjE2OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1JFVE9QVFM7XFxuIDIxNzpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAyMTg6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMTk6XFx0XFx0fVxcbiAyMjA6XFx0XFxuIDIyMTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX1BBU1NTRUMpIHtcXG4gMjIyOlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9zZWN1cml0eShtc2csIHNrYik7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX1BBU1NTRUM7XFxuIDIyNTpcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbiAyMjY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyMjc6XFx0XFx0fVxcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBJUF9DTVNHX09SSUdEU1RBRERSKSB7XFxuIDIzMDpcXHRcXHRcXHRpcF9jbXNnX3JlY3ZfZHN0YWRkcihtc2csIHNrYik7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JUF9DTVNHX09SSUdEU1RBRERSO1xcbiAyMzM6XFx0XFx0XFx0aWYgKCFmbGFncylcXG4gMjM0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfQ01TR19DSEVDS1NVTSlcXG4gMjM4OlxcdFxcdFxcdGlwX2Ntc2dfcmVjdl9jaGVja3N1bShtc2csIHNrYiwgdGxlbiwgb2Zmc2V0KTtcXG4gMjM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo0OTo0Mi4yNTM5MTYxNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2MzM1MzMyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEZpcnN0LCBJJ20gZXhhbWluaW5nIHRoaXMgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgIGNoYW5nZS4gSSBzZWUgYSBuZXcgY29uZGl0aW9uYWwgY2hlY2sgaGFzIGJlZW4gYWRkZWQ6IGBpZiAodW5saWtlbHkoaXBfaGRyKHNrYiktXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT04pKSByZXR1cm47YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2h5IGlzICp0aGlzKiBjaGVjayBuZWNlc3Nhcnk/IFdoYXQncyB0aGUgcmF0aW9uYWxlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBiZWluZyBhZGRyZXNzZWQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIHJlY29uc3RydWN0IGl0cyBldm9sdXRpb24uIEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIHRoZSBHaXQgaGlzdG9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvbi4gV2hvIGludHJvZHVjZWQgaXQ/IFdoYXQgaXNzdWVzIHdlcmUgZmxhZ2dlZCwgYW5kIHdoYXQgd2FzIHRoZSBqdXN0aWZpY2F0aW9uPyBJZiB0aGUgY29tbWl0IGhpc3RvcnkgZG9lc24ndCBwcm92aWRlIGVub3VnaCBjb250ZXh0LCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSdsbCBkbyBhIGNvZGViYXNlLXdpZGUgZ3JlcCBmb3IgYGlwX2Ntc2dfcmVjdl9vZmZzZXRgLiBUaGlzIHdpbGwgc2hvdyBtZSBhbGwgdGhlIGNhbGwgc2l0ZXMsIGFsbG93aW5nIG1lIHRvIHNlZSBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIHRoaXMgbmV3IGNoZWNrIGlzIHJlbGV2YW50IHRvIHRob3NlIHVzZXMuIFRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIG9mdGVuIHRoZSBtb3N0IGlsbHVtaW5hdGluZy4gSSBleHBlY3QgdGhlIGNhbGxlcnMgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBndWFyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTA6MTguODg3NDUyMzE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDY5NzU0OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2Ntc2dfcmVjdl9vZmZzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXAuaD04MTU9dm9pZCBpcHY0X3BrdGluZm9fcHJlcGFyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZHJvcF9kc3QpO1xcbmluY2x1ZGUvbmV0L2lwLmg6ODE2OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL25ldC9pcC5oLTgxNy1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpO1xcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaD04Mzg9c3RhdGljIGlubGluZSB2b2lkIGlwX2Ntc2dfcmVjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvaXAuaC04Mzkte1xcbmluY2x1ZGUvbmV0L2lwLmg6ODQwOlxcdGlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIDAsIDApO1xcbmluY2x1ZGUvbmV0L2lwLmgtODQxLX1cXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQ3PXN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTY4LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTY5OnZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3MC1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0Mi19XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoyNDM6RVhQT1JUX1NZTUJPTChpcF9jbXNnX3JlY3Zfb2Zmc2V0KTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTI0NC1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTIwMzM9aW50IHVkcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yMTExLVxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldCkpXFxubmV0L2lwdjQvdWRwLmM6MjExMjpcXHRcXHRpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2ssIHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBvZmYpO1xcbm5ldC9pcHY0L3VkcC5jLTIxMTMtXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz00NjQ9aW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy01NjEtXFx0XFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0KSlcXG5uZXQvaXB2Ni91ZHAuYzo1NjI6XFx0XFx0XFx0aXBfY21zZ19yZWN2X29mZnNldChtc2csIHNrLCBza2IsXFxubmV0L2lwdjYvdWRwLmMtNTYzLVxcdFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHVkcGhkciksIG9mZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjUwOjIyLjM1NzIxMzgxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjUwNzE2NjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBVRFAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L3VkcC5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGR1YWwtc3RhY2sgb3IgSVB2NiBzb2NrZXRzIGhhbmRsZSBpbmNvbWluZyBJUHY0IG9yIElQdjYgcGFja2V0cy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoaXM6IGlmIEknbSByZWNlaXZpbmcgYSBwYWNrZXQgYW5kIGBpbmV0X2Ntc2dfZmxhZ3MoaW5ldClgIGlzIHNldCDigJMgd2hpY2gsIGluIHRoaXMgY29udGV4dCwgaW1wbGllcyBJUHY0IGNvbnRyb2wgbWVzc2FnZSBvcHRpb25zIHdlcmUgdXNlZCBvbiBhbiBBRl9JTkVUNiBvciBkdWFsLXN0YWNrIHNvY2tldCDigJMgdGhlIGNvZGUgY2FsbHMgYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAuIFRoZSBpc3N1ZSBpcywgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBhbiBJUHY2IHNrYiwgc28gYGlwX2hkcihza2IpYCBpcyAqYWN0dWFsbHkqIHBvaW50aW5nIHRvIGFuIElQdjYgaGVhZGVyLlxuXG5IZXJlJ3MgdGhlIHJ1YjogYGlwX2Ntc2dfcmVjdl9vZmZzZXQoKWAgc3Vic2VxdWVudGx5IGNhbGxzIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGlwX2Ntc2dfcmVjdl9vcHRzYCwgYGlwX2Ntc2dfcmVjdl9wa3RpbmZvYCwgYW5kIHNvIG9uLiBUaGVzZSBmdW5jdGlvbnMsIGNyaXRpY2FsbHksIGFsbCBzZWVtIHRvIHRyZWF0IGBpcF9oZHIoc2tiKWAgYXMgYSBgc3RydWN0IGlwaGRyYCDigJMgdGhhdCBpcywgYW4gSVB2NCBoZWFkZXIhIE5vdywgaWYgdGhlIGluY29taW5nIHBhY2tldCBpcyBhY3R1YWxseSBJUHY2IChhbmQgYHZlcnNpb24gPT0gNmApLCB3ZSdyZSBlZmZlY3RpdmVseSBtaXNpbnRlcnByZXRpbmcgdGhlIG1lbW9yeS4gVGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSB0aGluZ3MuIFdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIsIGFjY2Vzc2luZyBpbnZhbGlkIGZpZWxkcywgb3IganVzdCBnZW5lcmFsbHkgbWFraW5nIGluY29ycmVjdCBkZWNpc2lvbnMgYmFzZWQgb24gbWFsZm9ybWVkIGRhdGEuXG5cbkkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGF0IHRob3NlIGBpcF9jbXNnX3JlY3ZfKmAgZnVuY3Rpb25zIGFyZSBkb2luZyBpbiBkZXRhaWwsIGJlY2F1c2UgSSBzdXNwZWN0IHRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgdHlwZSBjb25mdXNpb24gdnVsbmVyYWJpbGl0eSBhbmQgdGhlIHJhbWlmaWNhdGlvbnMgY291bGQgYmUgc2VyaW91cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQganVzdCBob3cgbXVjaCBjb250cm9sIGFuIGF0dGFja2VyIGNvdWxkIHBvdGVudGlhbGx5IGdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTE6MjguODY0Mzg0MTc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHQvKlxcbiAgNTE6XFx0ICpcXHRTT0xfSVAgY29udHJvbCBtZXNzYWdlcy5cXG4gIDUyOlxcdCAqL1xcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfcGt0aW5mbyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgaW5fcGt0aW5mbyBpbmZvID0gKlBLVElORk9fU0tCX0NCKHNrYik7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGluZm8uaXBpX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfUEtUSU5GTywgc2l6ZW9mKGluZm8pLCBcXHUwMDI2aW5mbyk7XFxuICA2MTpcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90dGwoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0aW50IHR0bCA9IGlwX2hkcihza2IpLVxcdTAwM2V0dGw7XFxuICA2NjpcXHRcXHRwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfVFRMLCBzaXplb2YoaW50KSwgXFx1MDAyNnR0bCk7XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl90b3Moc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1RPUywgMSwgXFx1MDAyNmlwX2hkcihza2IpLVxcdTAwM2V0b3MpO1xcbiAgNzI6XFx0fVxcbiAgNzM6XFx0XFxuICA3NDpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfb3B0cyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuID09IDApXFxuICA3NzpcXHRcXHRcXHRyZXR1cm47XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWT1BUUywgSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuLFxcbiAgODA6XFx0XFx0XFx0IGlwX2hkcihza2IpICsgMSk7XFxuICA4MTpcXHR9XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3JldG9wdHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuICA4NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDg2OlxcdHtcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGNoYXIgb3B0YnVmW3NpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyA0MF07XFxuICA4ODpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gKHN0cnVjdCBpcF9vcHRpb25zICopb3B0YnVmO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VvcHQub3B0bGVuID09IDApXFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdGlmIChpcF9vcHRpb25zX2VjaG8obmV0LCBvcHQsIHNrYikpIHtcXG4gIDk0OlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19DVFJVTkM7XFxuICA5NTpcXHRcXHRcXHRyZXR1cm47XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXHRpcF9vcHRpb25zX3VuZG8ob3B0KTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFVE9QVFMsIG9wdC1cXHUwMDNlb3B0bGVuLCBvcHQtXFx1MDAzZV9fZGF0YSk7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRcXG4gMTAyOlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9mcmFnc2l6ZShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpXFxuIDEwMzpcXHR7XFxuIDEwNDpcXHRcXHRpbnQgdmFsO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAoSVBDQihza2IpLVxcdTAwM2VmcmFnX21heF9zaXplID09IDApXFxuIDEwNzpcXHRcXHRcXHRyZXR1cm47XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHZhbCA9IElQQ0Ioc2tiKS1cXHUwMDNlZnJhZ19tYXhfc2l6ZTtcXG4gMTEwOlxcdFxcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWRlJBR1NJWkUsIHNpemVvZih2YWwpLCBcXHUwMDI2dmFsKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0c3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X2NoZWNrc3VtKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTE0OlxcdFxcdFxcdFxcdFxcdCAgaW50IHRsZW4sIGludCBvZmZzZXQpXFxuIDExNTpcXHR7XFxuIDExNjpcXHRcXHRfX3dzdW0gY3N1bSA9IHNrYi1cXHUwMDNlY3N1bTtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX0NPTVBMRVRFKVxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAob2Zmc2V0ICE9IDApIHtcXG4gMTIyOlxcdFxcdFxcdGludCB0ZW5kX29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0bGVuO1xcbiAxMjM6XFx0XFx0XFx0Y3N1bSA9IGNzdW1fc3ViKGNzdW0sIHNrYl9jaGVja3N1bShza2IsIHRlbmRfb2ZmLCBvZmZzZXQsIDApKTtcXG4gMTI0OlxcdFxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX0NIRUNLU1VNLCBzaXplb2YoX193c3VtKSwgXFx1MDAyNmNzdW0pO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0XFxuIDEyOTpcXHRzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3Zfc2VjdXJpdHkoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMzA6XFx0e1xcbiAxMzE6XFx0XFx0c3RydWN0IGxzbV9jb250ZXh0IGN0eDtcXG4gMTMyOlxcdFxcdHUzMiBzZWNpZDtcXG4gMTMzOlxcdFxcdGludCBlcnI7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKE5VTEwsIHNrYiwgXFx1MDAyNnNlY2lkKTtcXG4gMTM2OlxcdFxcdGlmIChlcnIpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm47XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdGVyciA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChzZWNpZCwgXFx1MDAyNmN0eCk7XFxuIDE0MDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTQxOlxcdFxcdFxcdHJldHVybjtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIFNDTV9TRUNVUklUWSwgY3R4LmxlbiwgY3R4LmNvbnRleHQpO1xcbiAxNDQ6XFx0XFx0c2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoXFx1MDAyNmN0eCk7XFxuIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdF9fYmUxNiBfcG9ydHNbMl0sICpwb3J0cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTE6MjguODY0NTU2NzI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0ODEyMTU4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUCBIZWFkZXIgU2FuaXR5IENoZWNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBxdWljayBzYW5pdHkgY2hlY2sgYXQgdGhlIHN0YXJ0IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YC4gVGhlIGtleSB0aGluZyBpczogYGlmICh1bmxpa2VseShpcF9oZHIoc2tiKS1cdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTikpIHJldHVybjtgLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKmFueSogdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXM/IExldCdzIGdvIHRocm91Z2ggaXQgc3lzdGVtYXRpY2FsbHkuXG5cbkZpcnN0LCBkb2VzIGl0IGNyZWF0ZSBhbnkgKm5ldyogdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW50cm9kdWNlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vcGUuIGBpcF9oZHIoc2tiKWAgYWNjZXNzZXMgdGhlIElQIGhlYWRlciB3aXRoaW4gdGhlIHNvY2tldCBidWZmZXIsIGFuZCBgdmVyc2lvbmAgaXMgYSBmaWVsZCB3aXRoaW4gdGhhdCBJUCBoZWFkZXIgc3RydWN0dXJlLiBJZiB0aGUgSVAgdmVyc2lvbiBpc24ndCA0ICh3aGljaCBgSVBWRVJTSU9OYCBpcyBkZWZpbmVkIGFzKSwgaXQganVzdCByZXR1cm5zIOKAkyBubyBjbXNncyBhcmUgdG91Y2hlZC5cblxuU2Vjb25kLCBkb2VzIGl0ICpleHBvc2UqIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObyBhZ2Fpbi4gVGhpcyBjaGVjayAqcHJldmVudHMqIHByb2Nlc3Npbmcgb2Ygbm9uLUlQdjQgcGFja2V0cyBpbiB0aGUgSVB2NCBjbXNnIHJlY2VpdmVyLiBUaGF0J3MgYSAqZ29vZCogdGhpbmcuXG5cblRoaXJkLCBkb2VzIGl0IG1lc3Mgd2l0aCBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgb3IgbGVha2VkPyBOb3BlLiBJdCBqdXN0IHNraXBzIHByb2Nlc3NpbmcsIHdoaWNoIG1lYW5zIGl0IHNraXBzIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuRm91cnRoLCBhcmUgdGhlcmUgYW55IHN0cnVjdHVyZSBmaWVsZHMgb3IgbWVtb3J5IHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgYW5kIGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/IE5vIG5ldyBjbXNncyBhcmUgYmVpbmcgY3JlYXRlZCBvciBjb3BpZWQuIEluIGZhY3QsIGl0IHNraXBzIGNhbGxpbmcgYHB1dF9jbXNnYCBmb3IgcGFja2V0cyB0aGF0IGZhaWwgdGhlIGNoZWNrLlxuXG5TbywgdGhpcyBsb29rcyBwcmV0dHkgc2FmZS4gTGV0J3MgbWFrZSBzdXJlIGl0J3Mgbm90IGEgS0FTQU4vS01TQU4gdHlwZSBpc3N1ZTogVGhpcyBjaGVjayBwcmV2ZW50cyBtaXNpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgaGVhZGVycyB3aGVuIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0YCBpcyBjYWxsZWQgb24gbm9uLUlQdjQgcGFja2V0cy4gVGhpcyBpcyBwdXJlIGxvZ2ljIHZhbGlkYXRpb24gYW5kIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIG9yaWdpbmFsIGZvdXIgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSoqOiBObyBuZXcgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzKio6IFRoZSBjb25kaXRpb24gY2hlY2tzIHRoZSBJUCB2ZXJzaW9uIGZpZWxkLCB3aGljaCBjb21lcyBmcm9tIHRoZSByZWNlaXZlZCBwYWNrZXQuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbi5cbjQuICAqKkJvdW5kcyBjaGVja3MvbG9naWMqKjogTm8gY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgY2xlYXIgYW5kIHVuYW1iaWd1b3VzLiBJJ20gc2F0aXNmaWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjI5LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjUxOjM1LjM0NTc3NjU1OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGBpcF9oZHIoc2tiKS1cXHUwMDNldmVyc2lvbiAhPSBJUFZFUlNJT05gIGF0IHRoZSBlbnRyeSBvZiBgaXBfY21zZ19yZWN2X29mZnNldCgpYCB0byByZXR1cm4gZWFybHkgaWYgdGhlIHBhY2tldCBpcyBub3QgYW4gSVB2NCBwYWNrZXQgKGUuZy4gd2hlbiBwcm9jZXNzaW5nIGR1YWwtc3RhY2sgb3IgSVB2NiBza2JzKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFkZHMgYW4gZWFybHkgcmV0dXJuIHZhbGlkYXRpb24gY2hlY2sgb24gdGhlIHBhY2tldCBoZWFkZXIgdmVyc2lvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgbGVuZ3RocyBvciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyB3aXRoIEtBU0FOIGlzIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYGlwX2hkcihza2IpLVxcdTAwM2V2ZXJzaW9uICE9IElQVkVSU0lPTmAgYXQgdGhlIGVudHJ5IG9mIGBpcF9jbXNnX3JlY3Zfb2Zmc2V0KClgIHRvIHJldHVybiBlYXJseSBpZiB0aGUgcGFja2V0IGlzIG5vdCBhbiBJUHY0IHBhY2tldCAoZS5nLiB3aGVuIHByb2Nlc3NpbmcgZHVhbC1zdGFjayBvciBJUHY2IHNrYnMpLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWRkcyBhbiBlYXJseSByZXR1cm4gdmFsaWRhdGlvbiBjaGVjayBvbiB0aGUgcGFja2V0IGhlYWRlciB2ZXJzaW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBsZW5ndGhzIG9yIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIHdpdGggS0FTQU4gaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[1] Phase: Succeeded StartedAt: 2026-08-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 15:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 15:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2] Phase: Succeeded StartedAt: 2026-08-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 15:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:40 +0000 UTC FinishedAt: 2026-08-29 15:51:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1411850979/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:50 +0000 UTC FinishedAt: 2026-08-29 16:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:50 +0000 UTC FinishedAt: 2026-08-29 16:07:45 +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:*1006b92b-c198-41a2-9dde-b6505df85fbc,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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1411850979/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": "db3d5870-593c-45da-a845-31f849fdcd6f", "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-workflowtgl7t/series-workflowtgl7t-build-action-339951185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 15:51:50 +0000 UTC FinishedAt: 2026-08-29 16:07:35 +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:*1006b92b-c198-41a2-9dde-b6505df85fbc,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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1411850979/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": "db3d5870-593c-45da-a845-31f849fdcd6f", "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-workflowtgl7t/series-workflowtgl7t-build-action-339951185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:45 +0000 UTC FinishedAt: 2026-08-29 16:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:45 +0000 UTC FinishedAt: 2026-08-29 16:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:45 +0000 UTC FinishedAt: 2026-08-29 16:07:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:45 +0000 UTC FinishedAt: 2026-08-29 16:07:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1258602522/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:55 +0000 UTC FinishedAt: 2026-08-29 16:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:07:55 +0000 UTC FinishedAt: 2026-08-29 16:09:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*db3d5870-593c-45da-a845-31f849fdcd6f,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-workflowtgl7t/series-workflowtgl7t-build-action-339951185/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-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:09:56 +0000 UTC FinishedAt: 2026-08-29 16:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:09:56 +0000 UTC FinishedAt: 2026-08-29 16:09:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:09:56 +0000 UTC FinishedAt: 2026-08-29 16:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:09:56 +0000 UTC FinishedAt: 2026-08-29 16:25:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1006b92b-c198-41a2-9dde-b6505df85fbc,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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1258602522/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": "49b8bf19-11df-4ef9-9de7-1e059edbe3f4", "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-workflowtgl7t/series-workflowtgl7t-build-action-1636592638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:09:56 +0000 UTC FinishedAt: 2026-08-29 16:25:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1006b92b-c198-41a2-9dde-b6505df85fbc,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-workflowtgl7t/series-workflowtgl7t-convert-artifact-1258602522/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": "49b8bf19-11df-4ef9-9de7-1e059edbe3f4", "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-workflowtgl7t/series-workflowtgl7t-build-action-1636592638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:25:49 +0000 UTC FinishedAt: 2026-08-29 16:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:25:49 +0000 UTC FinishedAt: 2026-08-29 16:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:25:49 +0000 UTC FinishedAt: 2026-08-29 16:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:25:49 +0000 UTC FinishedAt: 2026-08-29 16:27:38 +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:*49b8bf19-11df-4ef9-9de7-1e059edbe3f4,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-workflowtgl7t/series-workflowtgl7t-build-action-1636592638/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-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +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":["ip_cmsg_recv_offset"],"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:*db3d5870-593c-45da-a845-31f849fdcd6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49b8bf19-11df-4ef9-9de7-1e059edbe3f4,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-workflowtgl7t/series-workflowtgl7t-build-action-339951185/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-workflowtgl7t/series-workflowtgl7t-build-action-1636592638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 16:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 16:27:53 +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":["ip_cmsg_recv_offset"],"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-workflowtgl7t/series-workflowtgl7t-convert-artifact-2601751759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 16:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 16:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:48 +0000 UTC FinishedAt: 2026-08-29 16:27:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:58 +0000 UTC FinishedAt: 2026-08-29 19:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgl7t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["ip_cmsg_recv_offset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2188569e7e1b0bc3f3b557dc97ab7a02befc11c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"4ac35d81-33dd-4d36-8c5f-660f6f051c2b","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-29 16:27:58 +0000 UTC FinishedAt: 2026-08-29 19:30:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*db3d5870-593c-45da-a845-31f849fdcd6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49b8bf19-11df-4ef9-9de7-1e059edbe3f4,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-workflowtgl7t/series-workflowtgl7t-build-action-339951185/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-workflowtgl7t/series-workflowtgl7t-build-action-1636592638/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-workflowtgl7t/series-workflowtgl7t-convert-artifact-2601751759/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,}