Name: series-workflowbv4l6 Phase: Succeeded StartedAt: 2026-09-06 22:57:58 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[0] Phase: Succeeded StartedAt: 2026-09-06 22:57:58 +0000 UTC FinishedAt: 2026-09-06 23:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 22:57:58 +0000 UTC FinishedAt: 2026-09-06 23:19:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP" ], "series_id": "5e6bdad1-6c19-4400-9962-7e18b9752549" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_ioctl", "ppp_push", "ppp_fill_forward_path", "ppp_mp_explode", "__ppp_channel_push", "ppp_channel_bridge_input", "ppp_async_send", "ppp_async_ioctl", "ppp_sync_send", "ppp_sync_ioctl", "pppoe_xmit", "pppoe_fill_forward_path", "pptp_xmit", "pptp_ppp_ioctl", "pppoatm_send", "pppoatm_devppp_ioctl", "pppol2tp_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwmIzM5O3MgYHByaXZhdGVgIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbGAgcG9pbnRlci5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTk4ZjcwMzc4OTMxM2U1Yjg4NTk1OWYyZDVjNDFmYjFiYzk3ZDU0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjM6MTc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbkBAIC05MSwxMyAmIzQzOzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcbkBAIC0zMjEsMTAgJiM0MzszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4mIzQzO1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuQEAgLTU1MCw5ICYjNDM7NTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICYjNDM7NzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwoY2hhbi1cdTAwM2Vwcml2YXRlLCBjbWQsIGFyZyk7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBjaC1cdTAwM2VjaGFuX3NlbSk7XG4gXHRcdH1cbiBcdFx0Z290byBvdXQ7XG5AQCAtMTYwMyw3ICYjNDM7MTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbiYjNDM7XHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyAmIzQzOzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyAmIzQzOzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuJiM0MztcdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIGZyYWcpKVxuIFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBmcmFnKTtcbiBcdFx0cGNoLVx1MDAzZWhhZF9mcmFnID0gMTtcbiBcdFx0cCAmIzQzOz0gZmxlbjtcbkBAIC0yMTc1LDcgJiM0MzsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuJiM0MztcdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLVx1MDAzZXByaXZhdGUsIHNrYikpIHtcbiBcdFx0XHRcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0XHRcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIHNrYik7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0yMzAwLDcgJiM0MzsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbiYjNDM7XHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAge1xuICAqIFByb3RvdHlwZXMuXG4gICovXG4gc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XG4tc3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZyk7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuJiM0MztwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgJiM0Mzs0OTAsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgJiM0Mzs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiBzZW5kcyBQUFAgZnJhbWUgb3ZlciBQUFBvRSBzb2NrZXRcbiAgKlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi1zdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSAmIzQzOzg5NSw5IEBAIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbiYjNDM7XHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSAmIzQzOzE0Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpwcHRwX3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgcHBwb3hfc29jayAqcG8sXG4gXHRyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbiB9XG4gXG4tc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybilcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgJiM0MzsyNywxMiBAQCBzdHJ1Y3QgcHBwX2NoYW5uZWw7XG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XG4gXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cbiBcdCAgIFJldHVybnMgMSBpZiBpdCB3YXMgYWNjZXB0ZWQsIDAgaWYgbm90LiAqL1xuLVx0aW50XHQoKnN0YXJ0X3htaXQpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiYjNDM7XHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiYjNDM7XHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4mIzQzO1x0XHRcdFx0ICAgICB2b2lkICopO1xuIH07XG4gXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi45MTMzMjRmOTY4NWY2IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtOTEsMTEgJiM0Mzs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJiMzOTt0IHdhbnQgdG8gYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBkbyBpdCBmcm9tXG5AQCAtMjg2LDkgJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xuJiM0MztcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4mIzQzO1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBQUFBJT0NHRkxBR1M6XG4tXHRcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbiYjNDM7XHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uOWU5MzJmZGRhMzg3MiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uIHtcbiBcdHN0cnVjdCBzb2NrXHRcdCpfX3NrO1x0XHQvKiBDb3B5IG9mIC5zaywgZm9yIGNsZWFudXAgKi9cbiB9O1xuIFxuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNywxMSAmIzQzOzMyNywxMSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0aW50IHVobGVuLCBoZWFkcm9vbTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfQ09OTkVDVEVEKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0FTWU5DJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFBPRSYjMzQ7LAogICAgJiMzNDtQUFRQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O0wyVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwcF9tcF9leHBsb2RlJiMzNDssCiAgICAmIzM0O19fcHBwX2NoYW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2VfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBvZV9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHRwX3htaXQmIzM0OywKICAgICYjMzQ7cHB0cF9wcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fZGV2cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBwcml2YXRlIGRhdGEgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzb2NrZXRzLCB0dHkgbGluZSBkaXNjaXBsaW5lcywgYW5kIC9kZXYvcHBwIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIzOjE3OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmUwYmE0NDhmMjk3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDEwICYjNDM7MzIwLDEwIEBAIHBwcF9hc3luY19pbml0KHZvaWQpCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludAotcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CkBAIC01NTAsOSAmIzQzOzU0OSw5IEBAIHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCkKICAqIGF0IHNvbWUgbGF0ZXIgdGltZS4KICAqLwogc3RhdGljIGludAotcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCiAJcHBwX2FzeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC03OTAsNyAmIzQzOzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCQljaGFuID0gcGNoLSZndDtjaGFuOwogCQkJZXJyID0gLUVOT1RUWTsKIAkJCWlmIChjaGFuICZhbXA7JmFtcDsgY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bCkKLQkJCQllcnIgPSBjaGFuLSZndDtvcHMtJmd0O2lvY3RsKGNoYW4sIGNtZCwgYXJnKTsKJiM0MzsJCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLSZndDtwcml2YXRlLCBjbWQsIGFyZyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtwY2gtJmd0O2NoYW5fc2VtKTsKIAkJfQogCQlnb3RvIG91dDsKQEAgLTE2MDMsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCWlmICghY2hhbi0mZ3Q7b3BzLSZndDtmaWxsX2ZvcndhcmRfcGF0aCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTsKJiM0MzsJcmV0dXJuIGNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLSZndDtwcml2YXRlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHsKQEAgLTE5MzIsNyAmIzQzOzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLCBza2IpOwomIzQzOwkJcmV0ID0gY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4tJmd0O3ByaXZhdGUsIHNrYik7CiAKIG91dDoKIAkJc3Bpbl91bmxvY2soJmFtcDtwY2gtJmd0O2Rvd25sKTsKQEAgLTIxNDIsNyAmIzQzOzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJLyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqLwogCQljaGFuID0gcGNoLSZndDtjaGFuOwogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkgfHwKLQkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgZnJhZykpCiYjNDM7CQkJIWNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cGNoLSZndDtmaWxlLnhxLCBmcmFnKTsKIAkJcGNoLSZndDtoYWRfZnJhZyA9IDE7CiAJCXAgJiM0Mzs9IGZsZW47CkBAIC0yMTc1LDcgJiM0MzsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcCkKIAlpZiAocGNoLSZndDtjaGFuKSB7CiAJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cGNoLSZndDtmaWxlLnhxKSkgewogCQkJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtwY2gtJmd0O2ZpbGUueHEpOwotCQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4sIHNrYikpIHsKJiM0MzsJCQlpZiAoIXBjaC0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaC0mZ3Q7Y2hhbi0mZ3Q7cHJpdmF0ZSwgc2tiKSkgewogCQkJCS8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqLwogCQkJCXNrYl9xdWV1ZV9oZWFkKCZhbXA7cGNoLSZndDtmaWxlLnhxLCBza2IpOwogCQkJCWJyZWFrOwpAQCAtMjMwMCw3ICYjNDM7MjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC0mZ3Q7Y2hhbl9uZXQsIHBjaGItJmd0O2NoYW5fbmV0KSk7Ci0JaWYgKCFwY2hiLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoYi0mZ3Q7Y2hhbiwgc2tiKSkKJiM0MzsJaWYgKCFwY2hiLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoYi0mZ3Q7Y2hhbi0mZ3Q7cHJpdmF0ZSwgc2tiKSkKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIG91dGw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC04MSw5ICYjNDM7ODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7CiAgKiBQcm90b3R5cGVzLgogICovCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7CiBzdGF0aWMgaW50IHBwcF9zeW5jX3B1c2goc3RydWN0IHN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApOwpAQCAtMzEyLDkgJiM0MzszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludAotcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKJiM0MztwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCWludCBlcnIsIHZhbDsKIAl1MzIgYWNjbVs4XTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTQ5MSw5ICYjNDM7NDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCiAJcHBwX3N5bmNfcHVzaChhcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKQEAgLTg0MSw5ICYjNDM7ODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sCiAgKiBzZW5kcyBQUFAgZnJhbWUgb3ZlciBQUFBvRSBzb2NrZXQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHBwb2VfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCXN0cnVjdCBwcHBvZV9oZHIgKnBoOwpAQCAtODk1LDkgJiM0Mzs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiYjNDM7CQkJCSAgIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLSZndDtwcHBvZV9kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCmluZGV4IGE3OTdhMDYwNmY2YjQuLjhmNzE5MGQ3MDY3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwpAQCAtMTQ2LDkgJiM0MzsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogfQogCi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwpAQCAtNTczLDEwICYjNDM7NTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKQogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9ICZhbXA7cG8tJmd0O3Byb3RvLnBwdHA7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaApAQCAtMjcsMTIgJiM0MzsyNywxMiBAQCBzdHJ1Y3QgcHBwX2NoYW5uZWw7CiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHsKIAkvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC4KIAkgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi8KLQlpbnQJKCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiYjNDM7CWludAkoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiAJLyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovCi0JaW50CSgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwomIzQzOwlpbnQJKCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCWludAkoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICopOwomIzQzOwkJCQkgICAgIHZvaWQgKik7CiB9OwogCiBzdHJ1Y3QgcHBwX2NoYW5uZWwgewpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi45MTMzMjRmOTY4NWY2IDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtOTEsMTEgJiM0Mzs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKQogCXJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtJmd0O3VzZXJfYmFjayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQotewotCXJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLSZndDtwcml2YXRlKTsKLX0KLQogLyoKICAqIFdlIGNhbiYjMzk7dCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlCiAgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbQpAQCAtMjg2LDkgJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSkKICAqIGFzIHN1Y2Nlc3MsIGp1c3QgdG8gYmUgY2xlYXIgd2hhdCB3ZSYjMzk7cmUgcmVhbGx5IGRvaW5nLgogICovCiAjZGVmaW5lIERST1BfUEFDS0VUIDEKLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKQEAgLTM2NiwxNiAmIzQzOzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewomIzQzOwlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlOwomIzQzOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NHRkxBR1M6Ci0JCXJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIHB1dF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAljYXNlIFBQUElPQ1NGTEFHUzoKLQkJcmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS0mZ3Q7ZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykKLQkJICAgID8gLUVGQVVMVCA6IDA7CiYjNDM7CQlyZXR1cm4gZ2V0X3VzZXIocHZjYy0mZ3Q7ZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwOwogCX0KIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jCmluZGV4IGVmOGZkZmFmMDUxZDQuLjllOTMyZmRkYTM4NzIgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9wcHAuYwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7CiAJc3RydWN0IHNvY2sJCSpfX3NrOwkJLyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovCiB9OwogCi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsCkBAIC0zMjcsMTEgJiM0MzszMjcsMTEgQEAgc3RhdGljIGludCBwcHBvbDJ0cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sCiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXMKICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwogCXN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCWludCB1aGxlbiwgaGVhZHJvb207CiAKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stJmd0O3NrX3N0YXRlICZhbXA7IFBQUE9YX0NPTk5FQ1RFRCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCwgaWRlbnRpZnkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgcGlucG9pbnQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2Agc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIHRoZSBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9ucyB3aXRoaW4gYHBwcF9jaGFubmVsX29wc2AgYXJlIG5vdyB0YWtpbmcgYSBgdm9pZCAqcHJpdmF0ZWAgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgZnVsbCBgc3RydWN0IHBwcF9jaGFubmVsICpgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2FsbGVkLgoKVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBwcmV0dHkgd2lkZS1yYW5naW5nLCB0b3VjaGluZyBhIGxvdCBvZiB0aGUgUFBQIGltcGxlbWVudGF0aW9uczogYHBwcF9hc3luYy5jYCwgYHBwcF9nZW5lcmljLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYHBwdHAuY2AsIHRoZSBpbmNsdWRlIGZpbGUsIGBwcHBvYXRtLmNgIGFuZCBgbDJ0cF9wcHAuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBjbHVlIGl04oCZcyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50LiBOb3csIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgZGV0ZXJtaW5lIGhvdyB0byBzdGFydCBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHRydXN0eSBgZ3JlcHBlcmAgdG9vbCB0byBzZWFyY2ggZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBhbmQgb3RoZXIgY2FsbCBzaXRlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBicmVhZHRoIGFuZCBkZXB0aCBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9jaGFubmVsX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTAyPXN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDU6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgYXN5bmNfb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTEtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkzLVx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9ODk2PXN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNTEtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHB0cF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz01NzY9c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NjA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNy1cdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxuLS1cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0yNT1zdHJ1Y3QgcHBwX2NoYW5uZWw7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6Mjc6c3RydWN0IHBwcF9jaGFubmVsX29wcyB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjgtXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9Mzg9c3RydWN0IHBwcF9jaGFubmVsIHtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cdHZvaWRcdFx0KnByaXZhdGU7XHQvKiBjaGFubmVsIHByaXZhdGUgZGF0YSAqL1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjQwOlx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC00MS1cdGludFx0XHRtdHU7XHRcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM2ND1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LVxubmV0L2F0bS9wcHBvYXRtLmM6Mzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjYtXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjEyNzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFBQUCBJbXBsZW1lbnRhdGlvbiBFeHBsb3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFBQUCBjaGFubmVsIHN0dWZmLCBhbmQgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGUga2VybmVsLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgaW1wbGVtZW50YXRpb25zLCBiZXlvbmQgdGhlIG9idmlvdXMgVENQL0lQIHJlYWxtPyBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBJU0ROLCBvciBtYXliZSBzb21lIG90aGVyIG9ic2N1cmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGxldmVyYWdlcyBhIHNpbWlsYXIgY2hhbm5lbC1iYXNlZCBhcHByb2FjaC4gSXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHJlYWxseSBpbnRlcmVzdGVkIGluLCBub3QganVzdCB0aGUgUFBQIGFzIGEgcHJvdG9jb2wuCgpUaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSYjMzk7bGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBhIFBQUCBjaGFubmVsIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGxvb2sgZm9yIHVzYWdlcyBvZiBgcHBwX3JlZ2lzdGVyX2NoYW5uZWxgLiBUaGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBoYWxsbWFyayBvZiBhbnkgY29kZSB0aGF0JiMzOTtzIHRyeWluZyB0byBob29rIGludG8gdGhhdCBmcmFtZXdvcmsuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIGluc3RhbmNlcyBvZiBgc3RydWN0IHBwcF9jaGFubmVsYC4gVGhhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBpbnRlcmZhY2VzLCBhbmQgaG93IGRpZmZlcmVudCBtb2R1bGVzIG1pZ2h0IGludGVyYWN0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9yZWdpc3Rlcl9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q9NjY9VGhlIGdlbmVyaWMgUFBQIGxheWVyIHByb3ZpZGVzIHNldmVuIGZ1bmN0aW9ucyB0byBjaGFubmVsczpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtNjctXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjY4OiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtNjktICBub3RpZnkgdGhlIFBQUCBnZW5lcmljIGxheWVyIG9mIGl0cyBwcmVzZW5jZS4gIEZvciBleGFtcGxlLCBzZXR0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD0xMjk9aG93ZXZlciBpdCB3aXNoZXMuICBUaGUgY2hhbm5lbCBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgYGBtdHVgYCBhbmRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MTMwOmBgaGRybGVuYGAgZmllbGRzIGJlZm9yZSBjYWxsaW5nIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIG5vdCBjaGFuZ2VcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMTMxLXRoZW0gdW50aWwgYWZ0ZXIgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuICBUaGUgYGBtdHVgYCBmaWVsZFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q9MjEwPVRoZSBnZW5lcmljIGxheWVyIHJlcXVpcmVzIHRoZXNlIGd1YXJhbnRlZXMgZnJvbSB0aGUgY2hhbm5lbDpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTIxMi0qIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MjEzOiAgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMjE0LSAgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjAtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjIyMToqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBtdXN0IGJlIGNhbGxlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjItICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTExOT1wcHBfYXN5bmN0dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNTItXHRhcC1cdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTUzOlx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXHUwMDI2YXAtXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTU0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yNzQyPXBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjkwMC0vKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTAxOmludCBwcHBfcmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTAyLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjY1PUVYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjY6RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfY2hhbm5lbCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNjY3LUVYUE9SVF9TWU1CT0wocHBwX3VucmVnaXN0ZXJfY2hhbm5lbCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xNDktXHRhcC1cdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNTA6XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZhcC1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE1MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00MTU9c3RhdGljIGludCBwcHRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTQ2OS1cdHBvLVx1MDAzZWNoYW4uZGlyZWN0X3htaXQgPSB0cnVlO1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYzo0NzA6XHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy00NzEtXHRpZiAoZXJyb3IpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NjE9ZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTYzLS8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdC4gKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo2NDpleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC02NS1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MTAtXHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTE6XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xubmV0L2F0bS9wcHBvYXRtLmMtNDEyLVx0aWYgKGVyciAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhpbmVzcyBBc3Nlc3NtZW50OiBQUFAgQ2hhbm5lbCBPcGVyYXRpb25zIFJlZmFjdG9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgYHBwcF9jaGFubmVsX29wc2AgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgaW50ZXJmYWNlIOKAkyBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBhcmUgbm93IHJlY2VpdmluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYC4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBiaXQgb2YgY29kZTogY29yZSBQUFAgKGBwcHBfZ2VuZXJpYy5jYCksIGFzeW5jL3N5bmMgdHR5IGRyaXZlcnMsIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gTGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuCgpTZWN0aW9uIDEgY2xlYXJseSBzdGF0ZXMgdGhhdCB3ZSBzaG91bGRuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgJiMzNDtObyBGdW5jdGlvbmFsIENoYW5nZSYjMzQ7IG9yICYjMzQ7UmVmYWN0b3JpbmcmIzM0OyBjbGFpbXMuIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgdG91Y2hlZCBkdXJpbmcgYSByZWZhY3RvciwgaXQgKm11c3QqIGJlIGZ1enplZC4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpczogYW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlLiYjMzQ7CgpHaXZlbiB0aGF0IFBQUCBhbmQgaXRzIGFzc29jaWF0ZWQgZHJpdmVycyAoYXN5bmMvc3luYyB0dHksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBMMlRQKSBhcmUgc29mdHdhcmUgbmV0d29ya2luZyBkcml2ZXJzIGFjY2Vzc2VkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIHNvY2tldHMsIGlvY3RscyBvbiBgL2Rldi9wcHBgLCBhbmQgdHR5IGxpbmUgZGlzY2lwbGluZXMsIHRoZXkgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgY2FuIHJlYWRpbHkgY29uc3RydWN0IHRlc3QgY2FzZXMgYW5kIGludGVyYWN0IHdpdGggdGhlc2UgcHJvdG9jb2xzLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgYWxsIHRoZSB0b3VjaGVkIGNvZGUuIFRoaXMgbWVhbnMgd2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwdHAuY2AsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIHRob3NlIHBhdGhzIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9hc3luY3xwcHBfc3luY3R0eXxwcHBvZXxwcHRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTA0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9ODE9Y29uZmlnIFBQUF9NUFBFXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4OTpcdCAgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05MC1cdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTE2PWNvbmZpZyBQUFBPRVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEyMi1cdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTIzOlx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEyNC1cdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEyNTpcdCAgXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXHUwMDNlLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTI2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2OC1cdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgcHBwZCBwbHVnaW4gdG8gd29yayBpbiBjbGllbnQgbW9kZSBvclxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTY5Olx0ICBtb2RpZmllZCBwcHRwZCAocG9wdG9wKSB0byB3b3JrIGluIHNlcnZlciBtb2RlLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTcwOlx0ICBTZWUgaHR0cDovL2FjY2VsLXBwdHAuc291cmNlZm9yZ2UubmV0LyBmb3IgaW5mb3JtYXRpb24gaG93IHRvXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzEtXHQgIHV0aWxpemUgdGhpcyBtb2R1bGUuXG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1BQUCkgJiM0Mzs9IHBwcF9nZW5lcmljLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QUFBfQVNZTkMpICYjNDM7PSBwcHBfYXN5bmMub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSAmIzQzOz0gYnNkX2NvbXAub1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSAmIzQzOz0gcHBwb2Uub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QUFRQKSAmIzQzOz0gcHB0cC5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg0PW1vZHVsZV9wYXJhbShmbGFnX3RpbWUsIGludCwgMCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6ODU6TU9EVUxFX1BBUk1fREVTQyhmbGFnX3RpbWUsIFwmIzM0O3BwcF9hc3luYzogaW50ZXJ2YWwgYmV0d2VlbiBmbGFnZ2VkIHBhY2tldHMgKGluIGNsb2NrIHRpY2tzKVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtODYtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1BQUCBhc3luYyBzZXJpYWwgY2hhbm5lbCBtb2R1bGVcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz04OD1NT0RVTEVfQUxJQVNfTERJU0MoTl9QUFApO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5MzpzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ6c3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NTpzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk2OnN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTc6c3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05OC1cdFx0XHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk5OnN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDA6c3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDEtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2Olx0LnN0YXJ0X3htaXQgPSBwcHBfYXN5bmNfc2VuZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDc6XHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtfTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMTk6cHBwX2FzeW5jdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDUtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmFwLVx1MDAzZXJxdWV1ZSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTQ2Olx0dGFza2xldF9zZXR1cChcdTAwMjZhcC1cdTAwM2V0c2ssIHBwcF9hc3luY19wcm9jZXNzKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDctXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE3MjpwcHBfYXN5bmN0dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xOTM9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxOTQ6cHBwX2FzeW5jdHR5X3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHU4ICpidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTk1LVx0XHQgIHNpemVfdCBjb3VudCwgdm9pZCAqKmNvb2tpZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIwND1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjIwNTpwcHBfYXN5bmN0dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHU4ICpidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjA2LVx0XHQgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIxNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MjE3OnBwcF9hc3luY3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yMTgte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNDMtXHRcdGlmIChhcmcgPT0gVENJT0ZMVVNIIHx8IGFyZyA9PSBUQ09GTFVTSClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNDQ6XHRcdFx0cHBwX2FzeW5jX2ZsdXNoX291dHB1dChhcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjQ1LVx0XHRlcnIgPSBuX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBjbWQsIGFyZyk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI2ND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI2NTpwcHBfYXN5bmN0dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqY2ZsYWdzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI2Ni1cdFx0ICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI3My1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFwLVx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI3NDpcdHBwcF9hc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNzUtXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFwLVx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0yODE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyODI6cHBwX2FzeW5jdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI4My17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI5ND1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX2xkaXNjID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yOTctXHQubmFtZVx0PSBcJiMzNDtwcHBcJiMzNDssXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6Mjk4Olx0Lm9wZW5cdD0gcHBwX2FzeW5jdHR5X29wZW4sXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6Mjk5Olx0LmNsb3NlXHQ9IHBwcF9hc3luY3R0eV9jbG9zZSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDA6XHQucmVhZFx0PSBwcHBfYXN5bmN0dHlfcmVhZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDE6XHQud3JpdGVcdD0gcHBwX2FzeW5jdHR5X3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwMjpcdC5pb2N0bFx0PSBwcHBfYXN5bmN0dHlfaW9jdGwsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAzOlx0LnJlY2VpdmVfYnVmID0gcHBwX2FzeW5jdHR5X3JlY2VpdmUsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA0Olx0LndyaXRlX3dha2V1cCA9IHBwcF9hc3luY3R0eV93YWtldXAsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMzA1LX07XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMwNz1zdGF0aWMgaW50IF9faW5pdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwODpwcHBfYXN5bmNfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMwOS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMyMj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzIzOnBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMjQte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTQtICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NDE1OnN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTYte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjctXHQvKiB0cnkgdG8gcHVzaCBtb3JlIHN0dWZmIG91dCAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQyODpcdGlmICh0ZXN0X2JpdChYTUlUX1dBS0VVUCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncykgXHUwMDI2XHUwMDI2IHBwcF9hc3luY19wdXNoKGFwKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjktXHRcdHBwcF9vdXRwdXRfd2FrZXVwKFx1MDAyNmFwLVx1MDAzZWNoYW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz00NTI9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQ1MzpwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDU0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NTUxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo1NTI6cHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTU2Olx0cHBwX2FzeW5jX3B1c2goYXApO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU1Ny1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTYyLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU2MzpcdHBwcF9hc3luY19wdXNoKGFwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NjQtXHRyZXR1cm4gMTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NTcwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo1NzE6cHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NzIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDMtXHRcdGlmIChhcC1cdTAwM2VvcHRyIFx1MDAzZT0gYXAtXHUwMDNlb2xpbSBcdTAwMjZcdTAwMjYgYXAtXHUwMDNldHBrdCkge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjYwNDpcdFx0XHRpZiAocHBwX2FzeW5jX2VuY29kZShhcCkpIHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDUtXHRcdFx0XHQvKiBmaW5pc2hlZCBwcm9jZXNzaW5nIGFwLVx1MDAzZXRwa3QgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NjUwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NjUxOnBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02NTIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz03NTQ9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo3NTU6cHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTc1Ni17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg3Mz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05MzgtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM5OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBfYXN5bmNfY2xlYW51cCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0MC17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0My1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NDQ6bW9kdWxlX2luaXQocHBwX2FzeW5jX2luaXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk0NTptb2R1bGVfZXhpdChwcHBfYXN5bmNfY2xlYW51cCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTAxPXBwcF9wcmludF9idWZmZXIgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IF9fdTggKmJ1ZiwgaW50IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy1cdGlmIChuYW1lICE9IE5VTEwpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDQ6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3BwcF9zeW5jdHR5OiAlcywgY291bnQgPSAlZFxcblwmIzM0OywgbmFtZSwgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA1LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDg6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yMDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjkyLVx0LndyaXRlXHQ9IHBwcF9zeW5jX3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjkzOlx0LmlvY3RsXHQ9IHBwcF9zeW5jdHR5X2lvY3RsLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjk0LVx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNS0gKlx0XHQoT2gsIEJUVywgdGhpcyBvbmUgaXMgWVlNTURELCBpbiBjYXNlIHlvdSB3ZXJlIHdvbmRlcmluZyAuLi4pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjogKiAyMjAxMDIgOlx0Rml4IG1vZHVsZSB1c2UgY291bnQgb24gZmFpbHVyZSBpbiBwcHBvZV9jcmVhdGUsIHBwcG94X3NrIC1hY21lXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNy0gKiAwMzA3MDAgOlx0Rml4ZWQgY29ubmVjdCBsb2dpYyB0byBhbGxvdyBmb3IgZGlzY29ubmVjdC5cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMS0gKiAwNDA4MDAgOlx0UmVzcGVjdCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBvbiBuZXQtZGV2aWNlcy5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyOiAqIDIwMDgwMCA6XHRmaXgga2ZyZWUoc2tiKSBpbiBwcHBvZV9yY3YgKGFjbWUpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMy0gKlx0XHRNb2R1bGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIGluIHRoZSByaWdodCBzcG90IG5vdyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI0LSAqXHRcdGd1YXJkcyBhZ2FpbnN0IHNvY2tfcHV0IG5vdCBhY3R1YWxseSBmcmVlaW5nIHRoZSBza1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU6ICpcdFx0aW4gcHBwb2VfcmVsZWFzZS5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI2LSAqIDA1MTAwMCA6XHRJbml0aWFsaXphdGlvbiBjbGVhbnVwLlxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI4LSAqIDA1MDEwMSA6XHRGaXggUEFEVCBwcm9jZXNzaW5nLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjk6ICogMTQwNTAxIDpcdFVzZSBwcHBvZV9yY3ZfY29yZSB0byBoYW5kbGUgYWxsIGJhY2tsb2cuIChBbGV4ZXkpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMC0gKiAxNzA3MDEgOlx0RG8gbm90IGxvY2tfc29jayB3aXRoIHJ3bG9jayBoZWxkLiAoRGF2ZU0pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzItICpcdFx0bG9ja2VkLiAoRGF2ZU0pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMzogKlx0XHRJZ25vcmUgcmV0dXJuIHZhbHVlIG9mIGRldl9xdWV1ZV94bWl0IGluIF9fcHBwb2VfeG1pdFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQtICpcdFx0b3IgZWxzZSB3ZSBtYXkga2ZyZWUgYW4gU0tCIHR3aWNlLiAoRGF2ZU0pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNTogKiAxOTA3MDEgOlx0V2hlbiBkb2luZyBjb3BpZXMgb2Ygc2tiJiMzOTtzIGluIF9fcHBwb2VfeG1pdCwgYWx3YXlzIGRlbGV0ZVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYtICpcdFx0dGhlIG9yaWdpbmFsIHNrYiB0aGF0IHdhcyBwYXNzZWQgaW4gb24gc3VjY2VzcywgbmV2ZXIgb25cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MS0vKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyOnN0YXRpYyB1bnNpZ25lZCBpbnQgcHBwb2VfbmV0X2lkIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MzpzdHJ1Y3QgcHBwb2VfbmV0IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk0LVx0Lypcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMTQ9c3RhdGljIGlubGluZSBib29sIHN0YWdlX3Nlc3Npb24oX19iZTE2IHNpZClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMTgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIwLXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjEyMTpcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjItfVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIzLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTI1LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMjk6c3RhdGljIGlubGluZSBpbnQgY21wX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMzAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEzOD1zdGF0aWMgdTggaGFzaF9pdGVtKF9fYmUxNiBzaWQsIGNvbnN0IHU4IGFkZHJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1Ny0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE1ODpzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNTktXHRcdFx0XHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNjUtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjY6XHRcdGlmIChjbXBfYWRkcihcdTAwMjZyZXQtXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjc6XHRcdCAgICByZXQtXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTY4LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTc1LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc2OnN0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTc3LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE3ODpcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3OS1cdHN0cnVjdCBwcHBveF9zb2NrICpyZXQsICpmaXJzdDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODMtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxODQ6XHRcdGlmIChjbXBfMl9hZGRyKFx1MDAyNnJldC1cdTAwM2VwcHBvZV9wYSwgXHUwMDI2cG8tXHUwMDNlcHBwb2VfcGEpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTg1Olx0XHQgICAgcmV0LVx1MDAzZXBwcG9lX2lmaW5kZXggPT0gcG8tXHUwMDNlcHBwb2VfaWZpbmRleClcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE4Ni1cdFx0XHRyZXR1cm4gLUVBTFJFQURZO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE5Ni1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE5NzpzdGF0aWMgdm9pZCBfX2RlbGV0ZV9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTk4LVx0XHRcdFx0XHRjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDYtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDc6XHRcdGlmIChjbXBfYWRkcihcdTAwMjZyZXQtXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDg6XHRcdCAgICByZXQtXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDktXHRcdFx0c3RydWN0IHBwcG94X3NvY2sgKm5leHQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI2LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI4LVx0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMzgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMzk6c3RhdGljIGlubGluZSB2b2lkIGRlbGV0ZV9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjQwLVx0XHRcdFx0XHRjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTMtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyNTQ6c3RhdGljIHZvaWQgcHBwb2VfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTUte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU2Olx0c3RydWN0IHBwcG9lX25ldCAqcG47XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTctXHRpbnQgaTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1OC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI1OTpcdHBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjAtXHRzcGluX2xvY2soXHUwMDI2cG4tXHUwMDNlaGFzaF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjYtXHRcdHdoaWxlIChwbykge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjY3Olx0XHRcdHdoaWxlIChwbyBcdTAwMjZcdTAwMjYgcG8tXHUwMDNlcHBwb2VfZGV2ICE9IGRldikge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjY4LVx0XHRcdFx0cG8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBvLVx1MDAzZW5leHQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjg4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjg5Olx0XHRcdGlmIChwby1cdTAwM2VwcHBvZV9kZXYgPT0gZGV2IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkwLVx0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5Mi1cdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyOTM6XHRcdFx0XHRwby1cdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjk0LVx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMwNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMwNTpcdFx0XHRCVUdfT04ocHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSkgPT0gTlVMTCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMDYtXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnBuLVx1MDAzZWhhc2hfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzEzLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzE0OnN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMxNS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI5LVx0XHQvKiBGaW5kIGV2ZXJ5IHNvY2tldCBvbiB0aGlzIGRldmljZSBhbmQga2lsbCBpdC4gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMzMDpcdFx0cHBwb2VfZmx1c2hfZGV2KGRldik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzEtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMzOS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM0MDpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwcG9lX25vdGlmaWVyID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQxOlx0Lm5vdGlmaWVyX2NhbGwgPSBwcHBvZV9kZXZpY2VfZXZlbnQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNDItfTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNDgtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQ5OnN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzUwLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNzYtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mzc3OnN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNzgtXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzc5LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM4MDpcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzgxLVx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgyOlx0c3RydWN0IHBwcG9lX25ldCAqcG47XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zODMtXHRpbnQgbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM5Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM5ODpcdHBoID0gcHBwb2VfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zOTktXHRsZW4gPSBudG9ocyhwaC1cdTAwM2VsZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQxMy1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQxNDpcdHBoID0gcHBwb2VfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTU6XHRwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDE2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQyOC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQyOTpzdGF0aWMgdm9pZCBwcHBvZV91bmJpbmRfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMC17XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MzEtXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBwcG94X3NvY2ssXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzI6XHRcdFx0XHRcdCAgICAgcHJvdG8ucHBwb2UucGFkdF93b3JrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMy1cdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnBvLVx1MDAzZXNrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzNS1cdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzY6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0Mzc6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQzODpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDUxOnN0YXRpYyBpbnQgcHBwb2VfZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ1Mi1cdFx0XHQgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTQte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDU1Olx0c3RydWN0IHBwcG9lX2hkciAqcGg7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTYtXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTc6XHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ1OC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NjUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NjY6XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY3LVx0XHRnb3RvIGFib3J0O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDY5Olx0cGggPSBwcHBvZV9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3MC1cdGlmIChwaC1cdTAwM2Vjb2RlICE9IFBBRFRfQ09ERSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzItXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NzM6XHRwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDc0LVx0cG8gPSBnZXRfaXRlbShwbiwgcGgtXHUwMDNlc2lkLCBldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsIGRldi1cdTAwM2VpZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3NS1cdGlmIChwbylcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ3NjpcdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwcG9lLnBhZHRfd29yaykpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzctXHRcdFx0c29ja19wdXQoXHUwMDI2cG8tXHUwMDNlc2spO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4NC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ4NTpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lc19wdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDg2LVx0LnR5cGVcdD0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyksXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0ODc6XHQuZnVuY1x0PSBwcHBvZV9yY3YsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00ODgtfTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ5MDpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDkxLVx0LnR5cGVcdD0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX0RJU0MpLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDkyOlx0LmZ1bmNcdD0gcHBwb2VfZGlzY19yY3YsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTMtfTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5NC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ5NTpzdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTYtXHQubmFtZVx0ICA9IFwmIzM0O1BQUE9FXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUwMC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUwMTpzdGF0aWMgdm9pZCBwcHBvZV9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MDIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxMC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUxMTpzdGF0aWMgaW50IHBwcG9lX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTEyLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MTQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MTU6XHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfUFBQT1gsIEdGUF9LRVJORUwsIFx1MDAyNnBwcG9lX3NrX3Byb3RvLCBrZXJuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxNi1cdGlmICghc2spXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTIyLVx0c29jay1cdTAwM2VzdGF0ZVx0PSBTU19VTkNPTk5FQ1RFRDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyMzpcdHNvY2stXHUwMDNlb3BzXHQ9IFx1MDAyNnBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNTpcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IHBwcG9lX3Jjdl9jb3JlO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTI2Olx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSBwcHBvZV9kZXN0cnVjdDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNy1cdHNrLVx1MDAzZXNrX3N0YXRlXHRcdD0gUFBQT1hfTk9ORTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzEtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MzI6XHRJTklUX1dPUksoXHUwMDI2cHBwb3hfc2soc2spLVx1MDAzZXByb3RvLnBwcG9lLnBhZHRfd29yayxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUzMzpcdFx0ICBwcHBvZV91bmJpbmRfc29ja193b3JrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUzNC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1Mzg6c3RhdGljIGludCBwcHBvZV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01Mzkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU0MS1cdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU0MjpcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQzLVx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NTY6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NTc6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU1ODpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU1OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NjYtXHRuZXQgPSBzb2NrX25ldChzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1Njc6XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTY4LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3MC1cdCAqIHByb3RlY3QgXCYjMzQ7cG9cJiMzNDsgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXNcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU3MTpcdCAqIG9uIHBwcG9lX2ZsdXNoX2RldlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTcyLVx0ICovXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzM6XHRkZWxldGVfaXRlbShwbiwgcG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzQ6XHRcdCAgICBwby1cdTAwM2VwcHBvZV9pZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3NS1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1ODU6c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODYtXHRcdFx0IGludCBzb2NrYWRkcl9sZW4sIGludCBmbGFncylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01OTEtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU5MjpcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTkzLVx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02MDgtXHRpZiAoKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAyNiBQUFBPWF9DT05ORUNURUQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjA5Olx0ICAgICBzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxMC1cdFx0Z290byBlbmQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjE0LVx0aWYgKChzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfREVBRCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MTU6XHQgICAgICFzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxNi1cdFx0Z290byBlbmQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIwLVx0LyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjIxOlx0aWYgKHN0YWdlX3Nlc3Npb24ocG8tXHUwMDNlcHBwb2VfcGEuc2lkKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIyLVx0XHRwcHBveF91bmJpbmRfc29jayhzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjM6XHRcdHBuID0gcHBwb2VfcGVybmV0KHNvY2tfbmV0KHNrKSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjQ6XHRcdGRlbGV0ZV9pdGVtKHBuLCBwby1cdTAwM2VwcHBvZV9wYS5zaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjU6XHRcdFx0ICAgIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgcG8tXHUwMDNlcHBwb2VfaWZpbmRleCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjY6XHRcdGlmIChwby1cdTAwM2VwcHBvZV9kZXYpIHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYyNzpcdFx0XHRkZXZfcHV0KHBvLVx1MDAzZXBwcG9lX2Rldik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Mjg6XHRcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyOS1cdFx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMwLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjMxOlx0XHRwby1cdTAwM2VwcHBvZV9pZmluZGV4ID0gMDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYzMjpcdFx0bWVtc2V0KFx1MDAyNnBvLVx1MDAzZXBwcG9lX3BhLCAwLCBzaXplb2YocG8tXHUwMDNlcHBwb2VfcGEpKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYzMy1cdFx0bWVtc2V0KFx1MDAyNnBvLVx1MDAzZWNoYW4sIDAsIHNpemVvZihwby1cdTAwM2VjaGFuKSk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQwLVx0LyogUmUtYmluZCBpbiBzZXNzaW9uIHN0YWdlIG9ubHkgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0MTpcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQyLVx0XHRlcnJvciA9IC1FTk9ERVY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDMtXHRcdG5ldCA9IHNvY2tfbmV0KHNrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0NDpcdFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5kZXYpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ1LVx0XHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NDg6XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IGRldjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0OTpcdFx0cG8tXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjUwOlx0XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjUxLVx0XHRpZiAoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTU6XHRcdG1lbWNweShcdTAwMjZwby1cdTAwM2VwcHBvZV9wYSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY1NjpcdFx0ICAgICAgIFx1MDAyNnNwLVx1MDAzZXNhX2FkZHIucHBwb2UsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTc6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY1OC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NjU6XHRcdHBvLVx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAmIzQzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY2LVx0XHRcdFx0ICAgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Njg6XHRcdHBvLVx1MDAzZWNoYW4ubXR1ID0gZGV2LVx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjktXHRcdHBvLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlx0XHRwby1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjcxLVx0XHRwby1cdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXHRcdGlmIChlcnJvcikge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1Olx0XHRcdGRlbGV0ZV9pdGVtKHBuLCBwby1cdTAwM2VwcHBvZV9wYS5zaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzY6XHRcdFx0XHQgICAgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBwby1cdTAwM2VwcHBvZV9pZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3Ny1cdFx0XHRnb3RvIGVycl9wdXQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjgyLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjgzOlx0cG8tXHUwMDNlbnVtID0gc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02ODQtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg4LWVycl9wdXQ6XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2ODk6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2OTA6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY5MTpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2OTY6c3RhdGljIGludCBwcHBvZV9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTctXHRcdCAgaW50IHBlZXIpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFUTSBhbmQgTDJUUCBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrZXkgZmlsZXMsIGJlZ2lubmluZyB3aXRoIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIGJvdGggQVRNIGFuZCBMMlRQOiBzcGVjaWZpY2FsbHksIGBuZXQvYXRtL01ha2VmaWxlYCwgYG5ldC9hdG0vS2NvbmZpZ2AsIGBuZXQvbDJ0cC9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBidWlsZCBpbnN0cnVjdGlvbnMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIG9mIEFUTSBhbmQgTDJUUCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0aGUgc3Vic2VxdWVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2F0bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xubmV0L2F0bS9NYWtlZmlsZS0xMS1cbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICYjNDM7PSBwcHBvYXRtLm9cbi0tXG5uZXQvYXRtL2lvY3RsLmM9NDM9c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvYXRtL2lvY3RsLmMtOTQtXHRcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxubmV0L2F0bS9pb2N0bC5jOjk1Olx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O3BwcG9hdG1cJiMzNDspO1xubmV0L2F0bS9pb2N0bC5jLTk2LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXG5uZXQvYXRtL3BwcG9hdG0uYy0zLVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxubmV0L2F0bS9wcHBvYXRtLmM6NTA6ZW51bSBwcHBvYXRtX2VuY2FwcyB7XG5uZXQvYXRtL3BwcG9hdG0uYy01MS1cdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNTUtXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xubmV0L2F0bS9wcHBvYXRtLmMtNTctXHRzdHJ1Y3QgYXRtX3ZjY1x0KmF0bXZjYztcdC8qIFZDQyBkZXNjcmlwdG9yICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNjItXHRcdFx0XHRcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlx0ZW51bSBwcHBvYXRtX2VuY2FwcyBlbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy02NC1cdGF0b21pY190IGluZmxpZ2h0O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTg4LVxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy05OC0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjk5OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDAte1xubmV0L2F0bS9wcHBvYXRtLmM6MTAxOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gZnJvbV90YXNrbGV0KHB2Y2MsIHQsIHdha2V1cF90YXNrbGV0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEwMi1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDUtXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6c3RhdGljIHZvaWQgcHBwb2F0bV9yZWxlYXNlX2NiKHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDcte1xubmV0L2F0bS9wcHBvYXRtLmM6MTA4Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEwOS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cdC8qXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTE6XHQgKiBBcyBpbiBwcHBvYXRtX3BvcCgpLCBpdCYjMzk7cyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjExMjpcdCAqIHRoZSB3YWtldXAgKmNhbiYjMzk7dCogcmFjZSB3aXRoIHBwcG9hdG1fc2VuZCgpLiBUaGV5IGJvdGggaG9sZCB0aGUgUFBQXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTMtXHQgKiBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxubmV0L2F0bS9wcHBvYXRtLmM6MTE0Olx0ICogd2hpY2ggbGVhZHMgdG8gdGhlIGRvdWJsZS1jaGVjayBkYW5jZSBpbiBwcHBvYXRtX21heV9zZW5kKCksIGRvZXNuJiMzOTt0XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTU6XHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jLTExNi1cdCAqIHNldCB0aGUgQkxPQ0tFRCBiaXQgd2hpbGUgdGhlIHNvY2tldCBpcyBzdGlsbCBsb2NrZWQuIFdlIGtub3cgdGhhdFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTEyOC0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjEyOTpzdGF0aWMgdm9pZCBwcHBvYXRtX3BvcChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTMwLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjEzMTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xMzItXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTM4LVx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzk6XHQgKiByZWZ1c2UgYW5vdGhlciBwYWNrZXQgaW4gcHBwb2F0bV9zZW5kKCkuIFRoaXMgd2FzIHF1aXRlIGluZWZmaWNpZW50LlxubmV0L2F0bS9wcHBvYXRtLmMtMTQwLVx0ICpcbm5ldC9hdG0vcHBwb2F0bS5jOjE0MTpcdCAqIEluIGZhY3QgaXQmIzM5O3MgT0suIFRoZSBQUFAgY29yZSB3aWxsIG9ubHkgZXZlciBjYWxsIHBwcG9hdG1fc2VuZCgpXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDItXHQgKiB3aGlsZSBob2xkaW5nIHRoZSBjaGFubmVsLVx1MDAzZWRvd25sIGxvY2suIEFuZCBwcHBfb3V0cHV0X3dha2V1cCgpIGFzXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBjYWxsZWQgYnkgdGhlIHRhc2tsZXQgd2lsbCAqYWxzbyogZ3JhYiB0aGF0IGxvY2suIFNvIGV2ZW4gaWYgYW5vdGhlclxubmV0L2F0bS9wcHBvYXRtLmM6MTQ0Olx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJiMzOTt0IGdvaW5nIHRvIHJhY2Vcbm5ldC9hdG0vcHBwb2F0bS5jLTE0NS1cdCAqIHdpdGggaXQuIFRoZSB3YWtldXAgKndpbGwqIGhhcHBlbiBhZnRlciB0aGUgb3RoZXIgQ1BVIGlzIHNhZmVseSBvdXRcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NjpcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxubmV0L2F0bS9wcHBvYXRtLmMtMTQ3LVx0ICpcbm5ldC9hdG0vcHBwb2F0bS5jOjE0ODpcdCAqIFNvIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgaGFzIGFscmVhZHkgc2V0IHRoZSBCTE9DS0VEIGJpdCBhbmRcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OS1cdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCYjMzk7cyBmaW5lLiBXZSB0cmlnZ2VyIGEgd2FrZXVwIHdoaWNoIHdpbGxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MDpcdCAqIGhhcHBlbiBsYXRlci4gQW5kIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgKmhhc24mIzM5O3QqIHNldCB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jLTE1MS1cdCAqIEJMT0NLRUQgYml0IHlldCwgdGhhdCYjMzk7cyBmaW5lIHRvbyBiZWNhdXNlIG9mIHRoZSBkb3VibGUgY2hlY2sgaW5cbm5ldC9hdG0vcHBwb2F0bS5jOjE1MjpcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTMtXHQgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjEtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjI6c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTE2My17XG5uZXQvYXRtL3BwcG9hdG0uYzoxNjQ6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYy0xNjUtXHRwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE3NjpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTE3Ny17XG5uZXQvYXRtL3BwcG9hdG0uYzoxNzg6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTc5LVx0cHJfZGVidWcoXCYjMzQ7XFxuXCYjMzQ7KTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRcdG1vZHVsZSA9IHB2Y2MtXHUwMDNlb2xkX293bmVyO1xubmV0L2F0bS9wcHBvYXRtLmM6MTg1Olx0XHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTg2LVx0XHRhdG12Y2MtXHUwMDNlcHVzaChhdG12Y2MsIE5VTEwpO1x0LyogUGFzcyBhbG9uZyBiYWQgbmV3cyAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTIyOC1cbm5ldC9hdG0vcHBwb2F0bS5jOjIyOTpzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMC17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjUxLVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjI1MjpcdCAqIFdlIG1heSBoYXZlIHJhY2VkIHdpdGggcHBwb2F0bV9wb3AoKS4gSWYgaXQgcmFuIGZvciB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jLTI1My1cdCAqIGxhc3QgcGFja2V0IGluIHRoZSBxdWV1ZSwgKmp1c3QqIGJlZm9yZSB3ZSBzZXQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTktXHQgKiBydW4gdGhlIHdha2V1cCB0YXNrbGV0LiBBbm90aGVyIHdha2V1cCB3aWxsIG5ldmVyIGh1cnQuXG5uZXQvYXRtL3BwcG9hdG0uYzoyNjA6XHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24mIzM5O3QgZ290IGFzIGZhciBhcyBtYWtpbmdcbm5ldC9hdG0vcHBwb2F0bS5jLTI2MS1cdCAqIHNwYWNlIG9uIHRoZSBxdWV1ZSB5ZXQsIHRoZW4gaXQgaGFzbiYjMzk7dCBjaGVja2VkIHRoZSBCTE9DS0VEXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjY0LVx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCYjMzk7cyAtXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIGNvZGUgcGF0aCB0aGF0IGNhbGxzIHBwcG9hdG1fc2VuZCgpLCBhbmQgaXMgdGh1cyBnb2luZyB0b1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogd2FpdCBmb3IgdXMgdG8gZmluaXNoLlxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI4My0jZGVmaW5lIERST1BfUEFDS0VUIDFcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NDpzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMjg1LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NjpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG5uZXQvYXRtL3BwcG9hdG0uYy0yODctXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMxOC1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6MzE5Olx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMzIwLVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyOC1cdFx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzozMjk6XHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMC1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzMzLVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzM0Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzYzLS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjQ6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvYXRtL3BwcG9hdG0uYy0zNjYte1xubmV0L2F0bS9wcHBvYXRtLmM6MzY3Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbm5ldC9hdG0vcHBwb2F0bS5jLTM2OC1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzctXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MDpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzgxLX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4NC17XG5uZXQvYXRtL3BwcG9hdG0uYy0zODUtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6Mzg2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDU6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDYtXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDc6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDgtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQwOS1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTA6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDE3Olx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTg6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTk6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQyMC1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDMyLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDMzOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDM0LVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM4LVxubmV0L2F0bS9wcHBvYXRtLmM6NDM5Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDQwLVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ1MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1MjpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDUzLVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDYzLVxubmV0L2F0bS9wcHBvYXRtLmM6NDY0OnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDY1LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2Olx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NjctfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ2OTpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo0NzE6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDcyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDc0LVxubmV0L2F0bS9wcHBvYXRtLmM6NDc1OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzc6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzgtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVxubmV0L2F0bS9wcHBvYXRtLmM6NDgwOm1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODE6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTDJUUC9QUFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFdoZW4gSSBzZWUgYGwydHBfcHBwYCBtZW50aW9uZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9sMnRwL01ha2VmaWxlYCB0byBzZWUgaG93IHRoYXQgYGwydHBfcHBwYCBjb21wb25lbnQgaXMgaGFuZGxlZCBkdXJpbmcgY29tcGlsYXRpb24sIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGdlbmVyYWxseSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gVGhlbiwgbmF0dXJhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBpbiB0aGUgbWVudWNvbmZpZyByZWxhdGVkIHRvIFBQUCBzdXBwb3J0IHdpdGhpbiBMMlRQLiBUaGF0IG1lYW5zIGEgbG9vayBpbnRvIGBuZXQvbDJ0cC9LY29uZmlnYC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBsMnRwX3BwcGAgaXMgZXhwb3NlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgc2V0dGluZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQmV0d2VlbiB0aG9zZSB0d28gZmlsZXMsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoZSBzeXN0ZW0gZXhwZWN0cyB3aXRoIHRoaXMgUFBQIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlPTg9Q0ZMQUdTX2wydHBfY29yZS5vICYjNDM7PSAtSSQoc3JjKVxuLS1cbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICYjNDM7PSBsMnRwX3BwcC5vXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSAmIzQzOz0gbDJ0cF9pcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgRHJpdmVyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ09ORklHIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIHRoZXkgcmVseSBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgc3BlY2lmaWMgUFBQIGRyaXZlcnMgdG8gYnJvYWRlciBuZXR3b3JrIHN0YWNrIGZlYXR1cmVzLCBoYXJkd2FyZSBzdXBwb3J0LCBvciBldmVuIG90aGVyIFBQUC1yZWxhdGVkIG1vZHVsZXMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgcmVxdWlyZWQgZWxlbWVudHMgZm9yIHRoaXMgYXNwZWN0LiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuICA0MTpcdFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXG4gIDQyOlx0XHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcbiAgNDM6XHRcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cbiAgNDQ6XHRcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsXG4gIDQ1Olx0XHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgVGhlIFBQUCBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAoXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDssXG4gIDQ4Olx0XHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxuICA0OTpcdFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIE5vdGUgdGhhdCB0aGUgQlNEIGNvbXByZXNzaW9uIGNvZGUgd2lsbCBhbHdheXMgYmUgY29tcGlsZWQgYXMgYVxuICA1MjpcdFx0ICBtb2R1bGU7IGl0IGlzIGNhbGxlZCBic2RfY29tcCBhbmQgd2lsbCBzaG93IHVwIGluIHRoZSBkaXJlY3RvcnlcbiAgNTM6XHRcdCAgbW9kdWxlcyBvbmNlIHlvdSBoYXZlIHNhaWQgXCYjMzQ7bWFrZSBtb2R1bGVzXCYjMzQ7LiBJZiB1bnN1cmUsIHNheSBOLlxuICA1NDpcdFxuICA1NTpcdGNvbmZpZyBQUFBfREVGTEFURVxuICA1NjpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDtcbiAgNTc6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiAgNTg6XHRcdHNlbGVjdCBaTElCX0RFRkxBVEVcbiAgNTk6XHRcdGhlbHBcbiAgNjA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXMgdGhlXG4gIDYxOlx0XHQgIERlZmxhdGUgYWxnb3JpdGhtICh0aGUgc2FtZSBhbGdvcml0aG0gdGhhdCBnemlwIHVzZXMpIHRvIGNvbXByZXNzXG4gIDYyOlx0XHQgIGVhY2ggUFBQIHBhY2tldCBiZWZvcmUgaXQgaXMgc2VudCBvdmVyIHRoZSB3aXJlLiAgVGhlIG1hY2hpbmUgYXQgdGhlXG4gIDYzOlx0XHQgIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmsgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZVxuICA2NDpcdFx0ICBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gIEV2ZW4gaWZcbiAgNjU6XHRcdCAgdGhleSBkb24mIzM5O3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxuICA2NjpcdFxuICA2NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBQUFBfRklMVEVSXG4gIDcwOlx0XHRib29sIFwmIzM0O1BQUCBmaWx0ZXJpbmdcJiMzNDtcbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGUgcGFja2V0cyBwYXNzaW5nIG92ZXJcbiAgNzM6XHRcdCAgUFBQIGludGVyZmFjZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGljaCBwYWNrZXRzIGNvdW50IGFzXG4gIDc0Olx0XHQgIGFjdGl2aXR5IChpLmUuIHdoaWNoIHBhY2tldHMgd2lsbCByZXNldCB0aGUgaWRsZSB0aW1lciBvciBicmluZyB1cFxuICA3NTpcdFx0ICBhIGRlbWFuZC1kaWFsZWQgbGluaykgYW5kIHdoaWNoIHBhY2tldHMgYXJlIHRvIGJlIGRyb3BwZWQgZW50aXJlbHkuXG4gIDc2Olx0XHQgIFlvdSBuZWVkIHRvIHNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBwYXNzLWZpbHRlciBhbmRcbiAgNzc6XHRcdCAgYWN0aXZlLWZpbHRlciBvcHRpb25zIHRvIHBwcGQuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDgwOlx0XG4gIDgxOlx0Y29uZmlnIFBQUF9NUFBFXG4gIDgyOlx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcJiMzNDtcbiAgODM6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgODQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIE1QUEUgRW5jcnlwdGlvbiBwcm90b2NvbCwgYXMgZW1wbG95ZWQgYnkgdGhlXG4gIDg3Olx0XHQgIE1pY3Jvc29mdCBQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wuXG4gIDg4Olx0XG4gIDg5Olx0XHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxuICA5MDpcdFx0ICBjb25maWd1cmluZyBQUFRQIGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gdXRpbGl6ZSB0aGlzIG1ldGhvZC5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUFBQX01VTFRJTElOS1xuICA5MzpcdFx0Ym9vbCBcJiMzNDtQUFAgbXVsdGlsaW5rIHN1cHBvcnRcJiMzNDtcbiAgOTQ6XHRcdGhlbHBcbiAgOTU6XHRcdCAgUFBQIG11bHRpbGluayBpcyBhIHByb3RvY29sIChkZWZpbmVkIGluIFJGQyAxOTkwKSB3aGljaCBhbGxvd3MgeW91XG4gIDk2Olx0XHQgIHRvIGNvbWJpbmUgc2V2ZXJhbCAobG9naWNhbCBvciBwaHlzaWNhbCkgbGluZXMgaW50byBvbmUgbG9naWNhbCBQUFBcbiAgOTc6XHRcdCAgY29ubmVjdGlvbiwgc28gdGhhdCB5b3UgY2FuIHV0aWxpemUgeW91ciBmdWxsIGJhbmR3aWR0aC5cbiAgOTg6XHRcbiAgOTk6XHRcdCAgVGhpcyBoYXMgdG8gYmUgc3VwcG9ydGVkIGF0IHRoZSBvdGhlciBlbmQgYXMgd2VsbCBhbmQgeW91IG5lZWQgYVxuIDEwMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ0MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBQUFAgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uIGZpbGUgaGVyZSwgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBidWlsZCBvZiB0aGUgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgbmV0d29yayBzdGFjayB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgUFBQIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIG1heWJlIHRyeWluZyB0byBpbmZlciB0aGUgaW50ZW50aW9ucyBvZiB0aGUgZGV2ZWxvcGVycyB3aG8gY3JlYXRlZCBpdC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBvcHRpb25zIGRlcGVuZCBvbiB3aGljaCB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IHRoZSBmaWxlIGhhbmRsZXMgdGhlIGNvbXBsZXhpdGllcyBvZiBkaWZmZXJlbnQgUFBQIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBvbmUgd2VsbC1jb21tZW50ZWQ/IEhvcGVmdWxseSwgaXQgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBvbiB0aGUgZGVzaWduIHJhdGlvbmFsZSBiZWhpbmQgUFBQJiMzOTtzIG5ldHdvcmsgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIFBQUE9BVE1cbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cbiAxMDk6XHRcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXG4gMTEwOlx0XHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcbiAxMTE6XHRcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIFBQUE9YXG4gMTE0Olx0XHR0cmlzdGF0ZVxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBQUFBPRVxuIDExNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBQUFBPWFxuIDExOTpcdFx0aGVscFxuIDEyMDpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBFdGhlcm5ldC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuIDEyMzpcdFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbiAxMjQ6XHRcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbiAxMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXHUwMDNlLlxuIDEyNjpcdFxuIDEyNzpcdGNob2ljZVxuIDEyODpcdFx0cHJvbXB0IFwmIzM0O051bWJlciBvZiBQUFBvRSBoYXNoIGJpdHNcJiMzNDtcbiAxMjk6XHRcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcbiAxMzA6XHRcdGRlcGVuZHMgb24gUFBQT0VcbiAxMzE6XHRcdGhlbHBcbiAxMzI6XHRcdFx0U2VsZWN0IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGZvciBoYXNoaW5nIFBQUG9FIGludGVyZmFjZXMuXG4gMTMzOlx0XG4gMTM0Olx0XHRcdExhcmdlciBzaXplcyByZWR1Y2VzIHRoZSByaXNrIG9mIGhhc2ggY29sbGlzaW9ucyBhdCB0aGUgY29zdFxuIDEzNTpcdFx0XHRvZiBzbGlnaHRseSBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlLlxuIDEzNjpcdFxuIDEzNzpcdFx0XHRUaGlzIGhhc2ggdGFibGUgaXMgb24gYSBwZXIgb3V0ZXIgZXRoZXJuZXQgaW50ZXJmYWNlLlxuIDEzODpcdFxuIDEzOTpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxuIDE0MDpcdFx0Ym9vbCBcJiMzNDsxIGJpdCAoMiBidWNrZXRzKVwmIzM0O1xuIDE0MTpcdFxuIDE0MjpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxuIDE0MzpcdFx0Ym9vbCBcJiMzNDsyIGJpdHMgKDQgYnVja2V0cylcJiMzNDtcbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7NCBiaXRzICgxNiBidWNrZXRzKVwmIzM0O1xuIDE0NzpcdFxuIDE0ODpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxuIDE0OTpcdFx0Ym9vbCBcJiMzNDs4IGJpdHMgKDI1NiBidWNrZXRzKVwmIzM0O1xuIDE1MDpcdFxuIDE1MTpcdGVuZGNob2ljZVxuIDE1MjpcdFxuIDE1MzpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcbiAxNTQ6XHRcdGludFxuIDE1NTpcdFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXG4gMTU2Olx0XHRkZWZhdWx0IDIgaWYgUFBQT0VfSEFTSF9CSVRTXzJcbiAxNTc6XHRcdGRlZmF1bHQgNCBpZiBQUFBPRV9IQVNIX0JJVFNfNFxuIDE1ODpcdFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XG4gMTU5Olx0XHRkZWZhdWx0IDRcbiAxNjA6XHRcbiAxNjE6XHRjb25maWcgUFBUUFxuIDE2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgSVB2NCAoUFBUUClcJiMzNDtcbiAxNjM6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMTY0Olx0XHRzZWxlY3QgUFBQT1hcbiAxNjU6XHRcdGhlbHBcbiAxNjY6XHRcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgSVB2NC4oUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKVxuIDE2NzpcdFxuIDE2ODpcdFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBwcHBkIHBsdWdpbiB0byB3b3JrIGluIGNsaWVudCBtb2RlIG9yXG4gMTY5Olx0XHQgIG1vZGlmaWVkIHBwdHBkIChwb3B0b3ApIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuXG4gMTcwOlx0XHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cbiAxNzE6XHRcdCAgdXRpbGl6ZSB0aGlzIG1vZHVsZS5cbiAxNzI6XHRcbiAxNzM6XHRjb25maWcgUFBQT0wyVFBcbiAxNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbiAxNzU6XHRcdGRlcGVuZHMgb24gTDJUUFxuIDE3NjpcdFx0c2VsZWN0IFBQUE9YXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFN1cHBvcnQgZm9yIFBQUC1vdmVyLUwyVFAgc29ja2V0IGZhbWlseS4gTDJUUCBpcyBhIHByb3RvY29sXG4gMTc5Olx0XHQgIHVzZWQgYnkgSVNQcyBhbmQgZW50ZXJwcmlzZXMgdG8gdHVubmVsIFBQUCB0cmFmZmljIG92ZXIgVURQXG4gMTgwOlx0XHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxuIDE4MTpcdGlmIFRUWVxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBQUFBfQVNZTkNcbiAxODQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDtcbiAxODU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3RhbmRhcmRcbiAxODg6XHRcdCAgYXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cywgc3VjaCBhcyBDT00xIG9yIENPTTIgb24gYSBQQy4gIElmIHlvdSB1c2VcbiAxODk6XHRcdCAgYSBtb2RlbSAobm90IGEgc3luY2hyb25vdXMgb3IgSVNETiBtb2RlbSkgdG8gY29udGFjdCB5b3VyIElTUCwgeW91XG4gMTkwOlx0XHQgIG5lZWQgdGhpcyBvcHRpb24uXG4gMTkxOlx0XG4gMTkyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gMTkzOlx0XG4gMTk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIFBQUF9TWU5DX1RUWVxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXCYjMzQ7XG4gMTk4Olx0XHRoZWxwXG4gMTk5Olx0XHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN5bmNocm9ub3VzXG4gMjAwOlx0XHQgIChIRExDKSB0dHkgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaGlnaC1zcGVlZCBsZWFzZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIEwyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTDJUUCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9sMnRwL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNlbnRyYWwgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYWxsIHRoaW5ncyBMMlRQLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgcHJvdG9jb2wgaXRzZWxmLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgcHJpbWFyeSBgTDJUUGAgc3ltYm9sLCB3aGljaCBhY3RzIGFzIHRoZSBtYXN0ZXIgc3dpdGNoLCBhbmQgdGhlbiBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgYW50aWNpcGF0ZSBgUFBQT0wyVFBgIHdpbGwgaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIHNlY3Rpb24sIGxpa2VseSBkZXBlbmRlbnQgb24gYEwyVFBgIGJlaW5nIGVuYWJsZWQsIGdpdmVuIHRoYXQgUFBQIG92ZXIgTDJUUCBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHVuZGVybHlpbmcgTDJUUCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0byB0d2VhayB0aGVtLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnLTUtXG5uZXQvbDJ0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBMMlRQXG5uZXQvbDJ0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctMzUtXG5uZXQvbDJ0cC9LY29uZmlnOjM2OmNvbmZpZyBMMlRQX0RFQlVHRlNcbm5ldC9sMnRwL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctNDgtXG5uZXQvbDJ0cC9LY29uZmlnOjQ5OmNvbmZpZyBMMlRQX1YzXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVx0Ym9vbCBcJiMzNDtMMlRQdjMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctNjktXG5uZXQvbDJ0cC9LY29uZmlnOjcwOmNvbmZpZyBMMlRQX0lQXG5uZXQvbDJ0cC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcJiMzNDtcbi0tXG5uZXQvbDJ0cC9LY29uZmlnLTg2LVxubmV0L2wydHAvS2NvbmZpZzo4Nzpjb25maWcgTDJUUF9FVEhcbm5ldC9sMnRwL0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzI4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQVRNIENvbmZpZ3VyYXRpb24gZm9yIFBQUE9BVE0qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzcywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgQVRNIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciBQUFBPQVRNLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIEFUTSBsYXllciBpcyBwcm9wZXJseSBzZXQgdXAgYmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IG1vdmluZyBvbiB0byB0aGUgUFBQb0UgYXNwZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBWUEkvVkNJIHZhbHVlcywgZW5jYXBzdWxhdGlvbiB0eXBlIChwcm9iYWJseSBBQUw1KSwgYW5kIGFueSByZWxldmFudCBzaGFwaW5nIG9yIHBvbGljaW5nIHBhcmFtZXRlcnMgZGVmaW5lZCBvbiB0aGUgQVRNIGludGVyZmFjZS4gQW55IG1pc2NvbmZpZ3VyYXRpb24gYXQgdGhpcyBmb3VuZGF0aW9uYWwgbGV2ZWwgd2lsbCBpbW1lZGlhdGVseSBicmVhayB0aGUgUFBQb0FUTSBjb25uZWN0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIEFUTSBwbHVtYmluZyBiZWZvcmUgdHJ5aW5nIHRvIHNlbmQgZGF0YSBvdmVyIHRoZSBwaXBlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBlc3BlY2lhbGx5IGluIGEgdHJvdWJsZXNob290aW5nIHNjZW5hcmlvLCBvciBiZWZvcmUgbWFraW5nIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZy01LVxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxubmV0L2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVwmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0yMS1cbm5ldC9hdG0vS2NvbmZpZzoyMjpjb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTMwLVxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXG5uZXQvYXRtL0tjb25maWctMzItXHRib29sIFwmIzM0O1Blci1WQyBJUCBmaWx0ZXIga2x1ZGdlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTE0CgkJCQkJCQlvdXRwdXQ6IDM0MgoJCQkJCQkJdGhvdWdodHM6IDk3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQUFAvTDJUUCBEcml2ZXIgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgUFBQLCBhbmQgYXNzb2NpYXRlZCBwcm90b2NvbHM6IFBQUCwgUFBQX0FTWU5DLCBQUFBfU1lOQ19UVFksIFBQUE9FLCBQUFRQLCBQUFBPQVRNLCBQUFBPTDJUUCwgQVRNLCBhbmQgTDJUUC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlICpGb2N1c1N5bWJvbHMqLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuIEkmIzM5O3ZlIGdvdCBhIGxpc3QsIHdoaWNoIEkmIzM5O2xsIHJldmlldyBhbmQgaW50ZXJuYWxpemUuIFRoaXMgaW5jbHVkZXMgc2VuZCBmdW5jdGlvbnMgKGBwcHBfYXN5bmNfc2VuZGAsIGBwcHBfc3luY19zZW5kYCwgYHBwcG9lX3htaXRgLCBgcHB0cF94bWl0YCwgYHBwcG9hdG1fc2VuZGAsIGBwcHBvbDJ0cF94bWl0YCksIElPQ1RMIGhhbmRsZXJzIChgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwdHBfcHBwX2lvY3RsYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcF9pb2N0bGApLCBhbmQgYSBmZXcga2V5IGZ1bmN0aW9ucyB3aXRoaW4gYHBwcF9nZW5lcmljLmNgIGxpa2UgYHBwcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHBfcHVzaGAsIGBwcHBfbXBfZXhwbG9kZWAsIGBfX3BwcF9jaGFubmVsX3B1c2hgLCBhbmQgYHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dGAsIGFsb25nIHdpdGggdGhlIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIG5vdyBwYXNzIHRoZSBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgYWNyb3NzIHRoZSBwcHAgZ2VuZXJpYyBhbmQgYXNzb2NpYXRlZCBkcml2ZXJzLgoKTm93LCBhIGNydWNpYWwgc2FuaXR5IGNoZWNrOiBhcmUgdGhlc2Ugc3ltYm9scyAqYWN0dWFsbHkqIGV4cG9ydGVkPyBTaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIGRyaXZlcnMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGVudHJ5IHBvaW50cyBvciBkaXJlY3RseSBpbnZvbHZlZCBpbiBwYWNrZXQgaGFuZGxpbmcuIE1hbnkgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgKGBvcHMtJmd0O3N0YXJ0X3htaXRgIGV0Yy4pLCBzbyB0aGV5IGFyZSAqZGVmaW5pdGVseSogc3ltYm9saXNlZC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgdGhlc2Ugc3ltYm9scyB3aWxsIGJlIHByZXNlbnQgaW4gdm1saW51eC9tb2R1bGVzLCBhbmQgYXJlIG5vdCBqdXN0IHN0YXRpYywgaW5saW5lYWJsZSBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhlIGFkZHJlc3NlcyBvZiBtYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnRha2VuKiBjb25maXJtcyB0aGlzLgoKRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIG1lZXRzIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIHNob3VsZCBiZSBgdHJ1ZWAsICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGFscmVhZHkgY29uZmlybWVkIChQUFAsIFBQUF9BU1lOQywgUFBQX1NZTkNfVFRZLCBQUFBPRSwgUFBUUCwgUFBQT0FUTSwgUFBQT0wyVFAsIEFUTSwgYW5kIEwyVFApLCBhbmQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmUgYWxsIGluIHBsYWNlLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBpbnZvbHZlIHJlZmFjdG9yaW5nIGNhbGxiYWNrIG1lY2hhbmlzbXMsIHdoaWNoIGFsbW9zdCBhbHdheXMgaW50cm9kdWNlcyBuZXcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGZ1bmN0aW9ucyBzZWxlY3RlZCBkZWFsIHdpdGggdGhlIHNwZWNpZmljcyBmb3IgZ2VuZXJpYyBwcHAsIGFzeW5jL3N5bmMgdHR5LCBQUFBvRSwgUFBUUCwgUFBQb0FUTSwgYW5kIFBQUE9MMlRQLiBBIHZlcnkgZm9jdXNlZCBzZXQgb2YgZHJpdmVycyB3aXRoIHRoaXMgY29kZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9BU1lOQyYjMzQ7LAogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQT0UmIzM0OywKICAgICYjMzQ7UFBUUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDssCiAgICAmIzM0O1BQUE9MMlRQJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtMMlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9lX3htaXQmIzM0OywKICAgICYjMzQ7cHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHB0cF94bWl0JiMzNDssCiAgICAmIzM0O3BwdHBfcHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2RldnBwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSBhY3Jvc3MgdGhlIGNvcmUgUFBQIGdlbmVyaWMgc3Vic3lzdGVtIGFuZCBzZXZlcmFsIGNoYW5uZWwgZHJpdmVycyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIGwydHBfcHBwKSB0byBhY2NlcHQgdGhlIGNoYW5uZWwmIzM5O3MgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0cywgdHR5IGxpbmUgZGlzY2lwbGluZXMsIGFuZCAvZGV2L3BwcCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBzaWduYXR1cmUgYW5kIGFyZ3VtZW50IHJlZmFjdG9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBvciBwYWRkaW5nIGZpZWxkcywgbm9yIGRvZXMgaXQgYWx0ZXIgZGF0YSBjb3B5aW5nIGxvZ2ljIHRvIHVzZXJzcGFjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb2ludGVyIG9yIHR5cGUgbWlzdXNlIGludHJvZHVjZWQgYnkgc3VjaCBhIHJlZmFjdG9yIHdvdWxkIG1hbmlmZXN0IGFzIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHR5cGUgY29uZnVzaW9uLCBvciBtZW1vcnkgYWNjZXNzIGZhdWx0cywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOThmNzAzNzg5MzEzZTViODg1OTU5ZjJkNWM0MWZiMWJjOTdkNTRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwppbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCkBAIC05MSwxMyAmIzQzOzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7CiAgKiBQcm90b3R5cGVzLgogICovCiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7Ci1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApOwogc3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCSAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTsKIAogc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSwKQEAgLTMyMSwxMCAmIzQzOzMyMCwxMCBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwogCXUzMiBhY2NtWzhdOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDExICYjNDM7MzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzCiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLgogICovCi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tJmd0O3ByaXZhdGU7CiAJc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlpbnQgdWhsZW4sIGhlYWRyb29tOwogCiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhKHNrLSZndDtza19zdGF0ZSAmYW1wOyBQUFBPWF9DT05ORUNURUQpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gbmVlZHMgdG8gYmUgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBwcHBfY2hhbm5lbF9vcHNgIHN0cnVjdHVyZSBpcyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmVzIGZvciBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBiZWluZyB0d2Vha2VkLiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGVudGlyZSBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYCBkaXJlY3RseSwgdGhleSYjMzk7cmUgbm93IGV4cGVjdGluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCAob3IganVzdCBgdm9pZCAqYCkuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGF1dGhvcnMgYXJlIGNsZXZlcmx5IHJlcGxhY2luZyB0aGUgZGlyZWN0IHVzZSBvZiBgY2hhbmAgd2l0aCBgY2hhbi0mZ3Q7cHJpdmF0ZWAgaW4gdGhlIGV4aXN0aW5nIGRyaXZlcnMuIFRoZSBpbXBsZW1lbnRhdGlvbnMgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgbGlrZSBpbiBgcHBwX2FzeW5jLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYW5kIGV2ZW4gdGhlIEFUTSBhbmQgTDJUUCBQUFAgbW9kdWxlcywgYXJlIGFsbCB1cGRhdGVkIHRvIGNhc3QgdGhlIGB2b2lkICpwcml2YXRlYCB0byB0aGUgYXBwcm9wcmlhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgc3VjaCBhcyBgc3RydWN0IGFzeW5jcHBwICphcGAsIGBzdHJ1Y3Qgc29jayAqc2tgLCBvciBgc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjYC4gSXQmIzM5O3MgYSBjbGVhbiByZWZhY3RvcmluZywgc3dhcHBpbmcgZnJvbSB0aGUgZGlyZWN0IHN0cnVjdHVyZSBhY2Nlc3MgdG8gdXNpbmcgYSBwcml2YXRlIGZpZWxkLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcHJhY3RpY2UgdG8gZW5jYXBzdWxhdGUgdGhlIGRhdGEuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpczogaGFzIHRoaXMgYmVlbiBkb25lIGNvbXByZWhlbnNpdmVseT8gSGF2ZSB3ZSBtaXNzZWQgYW55IG90aGVyIGNoYW5uZWwgb3BlcmF0aW9ucyBpbiB0aGUga2VybmVsIHRyZWUgdGhhdCB0aGlzIGNoYW5nZSBhZmZlY3RzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBidWdzIGx1cmtpbmcgd2hlcmUgdGhlIHR5cGUgY2FzdGluZyBpc24mIzM5O3QgcXVpdGUgcmlnaHQsIG9yIHBlcmhhcHMgc29tZXdoZXJlIHRoZSBgcHJpdmF0ZWAgZmllbGQgaXNuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjY2Vzc2VkPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNjYW4gb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgc2FmZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTEKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGNhbGxiYWNrIHNpZ25hdHVyZXMgZnJvbSBgKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCAuLi4pYCB0byBgKHZvaWQgKnByaXZhdGUsIC4uLilgIHdoZXJlIHRoZSBjYWxsZXIgbm93IGV4cGxpY2l0bHkgcGFzc2VzIGBjaGFuLSZndDtwcml2YXRlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgb3IgYWx0ZXJzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZy4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBkdWUgdG8gYm91bmRzIGNoZWNrcyBvciBpbmNvcnJlY3QgbGVuZ3RoIGhhbmRsaW5nLgoKSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIG1vZGlmaWVkIGlvY3RsIGZ1bmN0aW9ucy4gSSBzZWUgYHBwcF9hc3luY19pb2N0bGAsIGBwcHBfc3luY19pb2N0bGAsIGBwcHRwX3BwcF9pb2N0bGAsIGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGB2b2lkICpwcml2YXRlYCBjaGFuZ2UuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGBwcml2YXRlYCBpcyB1c2VkLiBGb3IgZXhhbXBsZSwgaW4gYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgSSBzZWUgYHB1dF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZylgLiBIb3dldmVyLCB0aGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgY29kZSB3aGVyZSB0aGUgYHB2Y2NgIHBvaW50ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgZmllbGQsIHNvIG5vIGNoYW5nZSBpbiBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTttIGNhcmVmdWxseSBjaGVja2luZyB0aGUgcG90ZW50aWFsIGZvciBjaGFuZ2VzIGluIHNlbWFudGljcywgYW5kIHZlcmlmeWluZyBob3cgdGhlIGRhdGEgdGhhdCBnZXRzIHJldHVybmVkIGZyb20gYW55IG9mIHRoZXNlIGlvY3RscyBpcyBzZXQuCgpCYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGVzZSBpb2N0bCBmdW5jdGlvbnMsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIHRoZSBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuIEl0IGlzIGEgc3RyYWlnaHQgcmVmYWN0b3IgdGhhdCBjaGFuZ2VzIHRoZSBhcmd1bWVudHMsIG5vdCB0aGUgZGF0YSB0aGV5IHBvaW50IHRvLCBzbyBubyBpc3N1ZXMgdGhlcmUuCgpUaGlzIGxvb2tzIGxpa2UgYSBwdXJlIHJlZmFjdG9yaW5nLCBwcmltYXJpbHkgYXJvdW5kIGNoYW5naW5nIHRoZSBjYWxsIHNpZ25hdHVyZXMgYW5kIGhvdyB3ZSBwYXNzIHRoZSBjb250ZXh0LCBtb3ZpbmcgZnJvbSBpbXBsaWNpdGx5IHBhc3NpbmcgYSBjaGFubmVsIHRvIGFuIGV4cGxpY2l0IHByaXZhdGUgY29udGV4dC4gVGhlIG9ubHkgcmVhbCB2dWxuZXJhYmlsaXR5IEkgZm9yZXNlZSBoZXJlIHdvdWxkIGJlIGEgdHlwZSBtaXNtYXRjaCBvciBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIOKAkyB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGNhdXNlIGEgbW9yZSBnZW5lcmFsIGZhdWx0LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBjb2RlIHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCk5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgbXkgd29yazoKCi0gICBgTmVlZHNLTVNBTjogZmFsc2VgCi0gICBgS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuYAoKTGV0JiMzOTtzIGRvIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIGNvbmZpZGVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwmIzM5O3MgYHByaXZhdGVgIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbGAgcG9pbnRlci5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBzaWduYXR1cmUgYW5kIGFyZ3VtZW50IHJlZmFjdG9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBvciBwYWRkaW5nIGZpZWxkcywgbm9yIGRvZXMgaXQgYWx0ZXIgZGF0YSBjb3B5aW5nIGxvZ2ljIHRvIHVzZXJzcGFjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb2ludGVyIG9yIHR5cGUgbWlzdXNlIGludHJvZHVjZWQgYnkgc3VjaCBhIHJlZmFjdG9yIHdvdWxkIG1hbmlmZXN0IGFzIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHR5cGUgY29uZnVzaW9uLCBvciBtZW1vcnkgYWNjZXNzIGZhdWx0cywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMyLjU2OTMxMzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODgyMzI2MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHVzaFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIixcbiAgICBcInBwcF9zeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBvZV94bWl0XCIsXG4gICAgXCJwcHBvZV9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHB0cF94bWl0XCIsXG4gICAgXCJwcHRwX3BwcF9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2RldnBwcF9pb2N0bFwiLFxuICAgIFwicHBwb2wydHBfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxgIHBvaW50ZXIuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSBhY3Jvc3MgdGhlIGNvcmUgUFBQIGdlbmVyaWMgc3Vic3lzdGVtIGFuZCBzZXZlcmFsIGNoYW5uZWwgZHJpdmVycyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIGwydHBfcHBwKSB0byBhY2NlcHQgdGhlIGNoYW5uZWwncyBwcml2YXRlIGRhdGEgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzb2NrZXRzLCB0dHkgbGluZSBkaXNjaXBsaW5lcywgYW5kIC9kZXYvcHBwIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6MzIuNTY5MzIwNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDQ3NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcXG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG5AQCAtMzIxLDEwICszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4tXFx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFx0aW50IF9fdXNlciAqcCA9IGFyZ3A7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFxuIFxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzkwLDcgKzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdFxcdGNoYW4gPSBwY2gtXFx1MDAzZWNoYW47XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9UVFk7XFxuIFxcdFxcdFxcdGlmIChjaGFuIFxcdTAwMjZcXHUwMDI2IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpXFxuLVxcdFxcdFxcdFxcdGVyciA9IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsKGNoYW4tXFx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWNoYW5fc2VtKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTYwMyw3ICsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0aWYgKCFjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4pO1xcbitcXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xcbkBAIC0xOTMyLDcgKzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXQgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcXG4rXFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYik7XFxuIFxcbiBvdXQ6XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWRvd25sKTtcXG5AQCAtMjE0Miw3ICsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cXG4gXFx0XFx0Y2hhbiA9IHBjaC1cXHUwMDNlY2hhbjtcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkgfHxcXG4tXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcXG4rXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLVxcdTAwM2Vwcml2YXRlLCBmcmFnKSlcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuIFxcdFxcdHBjaC1cXHUwMDNlaGFkX2ZyYWcgPSAxO1xcbiBcXHRcXHRwICs9IGZsZW47XFxuQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGlmIChwY2gtXFx1MDAzZWNoYW4pIHtcXG4gXFx0XFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkpIHtcXG4gXFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSk7XFxuLVxcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLCBza2IpKSB7XFxuK1xcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLVxcdTAwM2Vwcml2YXRlLCBza2IpKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbiBcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2cGNoLVxcdTAwM2VmaWxlLnhxLCBza2IpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cXHUwMDNlY2hhbl9uZXQsIHBjaGItXFx1MDAzZWNoYW5fbmV0KSk7XFxuLVxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuK1xcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYikpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG4gb3V0bDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XFxuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcXG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuK3BwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xcbiBcXG4gXFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTg0MSw5ICs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XFxuICAqXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKnByaXZhdGUpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcXG4gXFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcXHUwMDI2cG8tXFx1MDAzZXByb3RvLnBwdHA7XFxuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHRwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcXG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XFxuIFxcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxcbiBcXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cXG4tXFx0aW50XFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxuK1xcdGludFxcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFx0LyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovXFxuLVxcdGludFxcdCgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbitcXHRpbnRcXHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuIFxcdGludFxcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICopO1xcbiB9O1xcbiBcXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXFxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cXG5AQCAtMjg2LDkgKzI4MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAgKi9cXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XFxuK1xcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxuIFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuLVxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuLVxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbitcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4tXFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4tXFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuK1xcdFxcdHJldHVybiBnZXRfdXNlcihwdmNjLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XFxuIFxcdHN0cnVjdCBzb2NrXFx0XFx0Kl9fc2s7XFx0XFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XFxuIFxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuQEAgLTMyNywxMSArMzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcXG4gICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XFxuIFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xcbiBcXG4gXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMzLjE1MDU2NjQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTQzNTkwNzA0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjE3OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZixcbiBcdFx0XHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xuLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZyk7XG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcbkBAIC0zMjEsMTAgKzMyMCwxMCBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0XHRlcnIgPSAtRU5PVFRZO1xuIFx0XHRcdGlmIChjaGFuIFx1MDAyNlx1MDAyNiBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bClcbi1cdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4sIGNtZCwgYXJnKTtcbitcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyArMTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbitcdHJldHVybiBjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XG5AQCAtMTkzMiw3ICsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbitcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyArMjE0Miw3IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovXG4gXHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpIHx8XG4tXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgZnJhZykpXG4rXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgKz0gZmxlbjtcbkBAIC0yMTc1LDcgKzIxNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF9jaGFubmVsX3B1c2goc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHBwcCAqcHBwKVxuIFx0aWYgKHBjaC1cdTAwM2VjaGFuKSB7XG4gXHRcdHdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSkge1xuIFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbi1cdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLCBza2IpKSB7XG4rXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbitcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBvdXRsOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBzeW5jcHBwICphcCk7XG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IGVyciwgdmFsO1xuIFx0dTMyIGFjY21bOF07XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcbiBcdHBwcF9zeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC04NDEsOSArODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5pbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuQEAgLTE0Niw5ICsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG5AQCAtNTczLDEwICs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5pbmRleCAyZjYzZTlhNmNjODg5Li5kOWNmYjhlZjBmZmFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbkBAIC0yNywxMiArMjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4rXHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbitcdGludFx0KCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuIFx0aW50XHQoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICosXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbitcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXG4gICogZG9lc24ndCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxuICAqL1xuICNkZWZpbmUgRFJPUF9QQUNLRVQgMVxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbitcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4tc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuK1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuK1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIGdldF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNywxMSArMzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5c1xuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICovXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0aW50IHVobGVuLCBoZWFkcm9vbTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfQ09OTkVDVEVEKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMzLjE1MDU2ODExMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzAwNjQwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcHMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIGlkZW50aWZ5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXdvcmtpbmcgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgdGhlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX2NoYW5uZWxfb3BzYCBhcmUgbm93IHRha2luZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBmdWxsIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGhvdyB0aGVzZSBvcGVyYXRpb25zIGFyZSBjYWxsZWQuXG5cblRoZSBmaWxlcyBhZmZlY3RlZCBhcmUgcHJldHR5IHdpZGUtcmFuZ2luZywgdG91Y2hpbmcgYSBsb3Qgb2YgdGhlIFBQUCBpbXBsZW1lbnRhdGlvbnM6IGBwcHBfYXN5bmMuY2AsIGBwcHBfZ2VuZXJpYy5jYCwgYHBwcF9zeW5jdHR5LmNgLCBgcHBwb2UuY2AsIGBwcHRwLmNgLCB0aGUgaW5jbHVkZSBmaWxlLCBgcHBwb2F0bS5jYCBhbmQgYGwydHBfcHBwLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBpdOKAmXMgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudC4gTm93LCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGRldGVybWluZSBob3cgdG8gc3RhcnQgZnV6emluZywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHRydXN0eSBgZ3JlcHBlcmAgdG9vbCB0byBzZWFyY2ggZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBhbmQgb3RoZXIgY2FsbCBzaXRlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBicmVhZHRoIGFuZCBkZXB0aCBvZiB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6MzcuNTIwNjM2MTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg2ODQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjM5LjgyOTMzMTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNzg2NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFBQUCBJbXBsZW1lbnRhdGlvbiBFeHBsb3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBQUFAgY2hhbm5lbCBzdHVmZiwgYW5kIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGUga2VybmVsLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgaW1wbGVtZW50YXRpb25zLCBiZXlvbmQgdGhlIG9idmlvdXMgVENQL0lQIHJlYWxtPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IElTRE4sIG9yIG1heWJlIHNvbWUgb3RoZXIgb2JzY3VyZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgbGV2ZXJhZ2VzIGEgc2ltaWxhciBjaGFubmVsLWJhc2VkIGFwcHJvYWNoLiBJdCdzIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLCBub3QganVzdCB0aGUgUFBQIGFzIGEgcHJvdG9jb2wuXG5cblRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgcHJvYmFibHkgYSBnb29kIGBncmVwcGVyYCBzZXNzaW9uLiBJJ2xsIHNlYXJjaCBmb3Iga2V5IGluZGljYXRvcnMgb2YgYSBQUFAgY2hhbm5lbCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIHVzYWdlcyBvZiBgcHBwX3JlZ2lzdGVyX2NoYW5uZWxgLiBUaGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBoYWxsbWFyayBvZiBhbnkgY29kZSB0aGF0J3MgdHJ5aW5nIHRvIGhvb2sgaW50byB0aGF0IGZyYW1ld29yay4gQW5kIHdoaWxlIEknbSBhdCBpdCwgSSdsbCBhbHNvIHNjYW4gZm9yIGluc3RhbmNlcyBvZiBgc3RydWN0IHBwcF9jaGFubmVsYC4gVGhhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBpbnRlcmZhY2VzLCBhbmQgaG93IGRpZmZlcmVudCBtb2R1bGVzIG1pZ2h0IGludGVyYWN0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NDIuMzQ3MTk5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NTE4MTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfcmVnaXN0ZXJfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTY2PVRoZSBnZW5lcmljIFBQUCBsYXllciBwcm92aWRlcyBzZXZlbiBmdW5jdGlvbnMgdG8gY2hhbm5lbHM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC02Ny1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjY4OiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG9cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTY5LSAgbm90aWZ5IHRoZSBQUFAgZ2VuZXJpYyBsYXllciBvZiBpdHMgcHJlc2VuY2UuICBGb3IgZXhhbXBsZSwgc2V0dGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD0xMjk9aG93ZXZlciBpdCB3aXNoZXMuICBUaGUgY2hhbm5lbCBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgYGBtdHVgYCBhbmRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjEzMDpgYGhkcmxlbmBgIGZpZWxkcyBiZWZvcmUgY2FsbGluZyBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBub3QgY2hhbmdlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0xMzEtdGhlbSB1bnRpbCBhZnRlciBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgcmV0dXJucy4gIFRoZSBgYG10dWBgIGZpZWxkXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTIxMD1UaGUgZ2VuZXJpYyBsYXllciByZXF1aXJlcyB0aGVzZSBndWFyYW50ZWVzIGZyb20gdGhlIGNoYW5uZWw6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTIxMi0qIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjIxMzogIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHVudGlsIGFmdGVyIHRoZSBjYWxsIHRvXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMTQtICBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgcmV0dXJucy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMjIwLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MjIxOiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBhbmQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIG11c3QgYmUgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjItICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE5PXBwcF9hc3luY3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTUyLVxcdGFwLVxcdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE1MzpcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNTQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI3NDI9cHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5MDAtLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsLiAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5MDE6aW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjU9RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjY6RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfY2hhbm5lbCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2Ny1FWFBPUlRfU1lNQk9MKHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE0OS1cXHRhcC1cXHUwMDNlY2hhbi5zcGVlZCA9IHNwZWVkO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjE1MDpcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE1MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00MTU9c3RhdGljIGludCBwcHRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNDY5LVxcdHBvLVxcdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjQ3MDpcXHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy00NzEtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NjE9ZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNjMtLyogQXR0YWNoIGEgY2hhbm5lbCB0byBhIGdpdmVuIFBQUCB1bml0LiAqL1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo2NDpleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNjUtXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMC1cXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTE6XFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMi1cXHRpZiAoZXJyICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NDQuNTMyMzg5NTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEyNDY4MzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aGluZXNzIEFzc2Vzc21lbnQ6IFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgYHBwcF9jaGFubmVsX29wc2AgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgaW50ZXJmYWNlIOKAkyBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBhcmUgbm93IHJlY2VpdmluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYC4gVGhhdCdzIGEgcmVmYWN0b3JpbmcsIGFuZCBpdCdzIHRvdWNoaW5nIHF1aXRlIGEgYml0IG9mIGNvZGU6IGNvcmUgUFBQIChgcHBwX2dlbmVyaWMuY2ApLCBhc3luYy9zeW5jIHR0eSBkcml2ZXJzLCBQUFBvRSwgUFBUUCwgUFBQb0FUTSwgYW5kIEwyVFAgUFBQLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgY29uc3VsdCB0aGUgcmVsZXZhbnQgZ3VpZGVsaW5lcy5cblxuU2VjdGlvbiAxIGNsZWFybHkgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkbid0IGJsaW5kbHkgdHJ1c3QgXCJObyBGdW5jdGlvbmFsIENoYW5nZVwiIG9yIFwiUmVmYWN0b3JpbmdcIiBjbGFpbXMuIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgdG91Y2hlZCBkdXJpbmcgYSByZWZhY3RvciwgaXQgKm11c3QqIGJlIGZ1enplZC4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpczogYW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgXCJXb3J0aEZ1enppbmcgPSB0cnVlLlwiXG5cbkdpdmVuIHRoYXQgUFBQIGFuZCBpdHMgYXNzb2NpYXRlZCBkcml2ZXJzIChhc3luYy9zeW5jIHR0eSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIEwyVFApIGFyZSBzb2Z0d2FyZSBuZXR3b3JraW5nIGRyaXZlcnMgYWNjZXNzZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2Ugc29ja2V0cywgaW9jdGxzIG9uIGAvZGV2L3BwcGAsIGFuZCB0dHkgbGluZSBkaXNjaXBsaW5lcywgdGhleSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBjYW4gcmVhZGlseSBjb25zdHJ1Y3QgdGVzdCBjYXNlcyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBwcm90b2NvbHMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIGFsbCB0aGUgdG91Y2hlZCBjb2RlLiBUaGlzIG1lYW5zIHdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwdHAuY2AsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIHRob3NlIHBhdGhzIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjQ4LjY1NzA3NDg1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU3OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfYXN5bmN8cHBwX3N5bmN0dHl8cHBwb2V8cHB0cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTA0OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9ODE9Y29uZmlnIFBQUF9NUFBFXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04OC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4OTpcXHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkwLVxcdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMTY9Y29uZmlnIFBQUE9FXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjItXFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTIzOlxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTI0LVxcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMjU6XFx0ICBcXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXFx1MDAzZS5cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2OC1cXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNjk6XFx0ICBtb2RpZmllZCBwcHRwZCAocG9wdG9wKSB0byB3b3JrIGluIHNlcnZlciBtb2RlLlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3MDpcXHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzEtXFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1BQUCkgKz0gcHBwX2dlbmVyaWMub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QUFBfQVNZTkMpICs9IHBwcF9hc3luYy5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSArPSBic2RfY29tcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1BQUF9NUFBFKSArPSBwcHBfbXBwZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19QUFBfU1lOQ19UVFkpICs9IHBwcF9zeW5jdHR5Lm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX1BQUE9YKSArPSBwcHBveC5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19QUFBPRSkgKz0gcHBwb2Uub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUFBUUCkgKz0gcHB0cC5vXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9ODQ9bW9kdWxlX3BhcmFtKGZsYWdfdGltZSwgaW50LCAwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6ODU6TU9EVUxFX1BBUk1fREVTQyhmbGFnX3RpbWUsIFxcXCJwcHBfYXN5bmM6IGludGVydmFsIGJldHdlZW4gZmxhZ2dlZCBwYWNrZXRzIChpbiBjbG9jayB0aWNrcylcXFwiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtODYtTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQUFAgYXN5bmMgc2VyaWFsIGNoYW5uZWwgbW9kdWxlXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9ODg9TU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM6c3RhdGljIGludCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NDpzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NTpzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NjpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NzpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05OC1cXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5OTpzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwMDpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDEtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OlxcdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNzpcXHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTA4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTE5OnBwcF9hc3luY3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTQ1LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmFwLVxcdTAwM2VycXVldWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxNDY6XFx0dGFza2xldF9zZXR1cChcXHUwMDI2YXAtXFx1MDAzZXRzaywgcHBwX2FzeW5jX3Byb2Nlc3MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDctXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE3MjpwcHBfYXN5bmN0dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xOTM9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTk0OnBwcF9hc3luY3R0eV9yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xOTUtXFx0XFx0ICBzaXplX3QgY291bnQsIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIwND1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyMDU6cHBwX2FzeW5jdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yMDYtXFx0XFx0ICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIxNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjIxNzpwcHBfYXN5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjQzLVxcdFxcdGlmIChhcmcgPT0gVENJT0ZMVVNIIHx8IGFyZyA9PSBUQ09GTFVTSClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MjQ0OlxcdFxcdFxcdHBwcF9hc3luY19mbHVzaF9vdXRwdXQoYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNDUtXFx0XFx0ZXJyID0gbl90dHlfaW9jdGxfaGVscGVyKHR0eSwgY21kLCBhcmcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI2ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNjU6cHBwX2FzeW5jdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmNmbGFncyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjY2LVxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI3My1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXAtXFx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNzQ6XFx0cHBwX2FzeW5jX2lucHV0KGFwLCBidWYsIGNmbGFncywgY291bnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNzUtXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXAtXFx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI4MT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyODI6cHBwX2FzeW5jdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI5ND1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX2xkaXNjID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI5Ny1cXHQubmFtZVxcdD0gXFxcInBwcFxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI5ODpcXHQub3BlblxcdD0gcHBwX2FzeW5jdHR5X29wZW4sXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI5OTpcXHQuY2xvc2VcXHQ9IHBwcF9hc3luY3R0eV9jbG9zZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAwOlxcdC5yZWFkXFx0PSBwcHBfYXN5bmN0dHlfcmVhZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAxOlxcdC53cml0ZVxcdD0gcHBwX2FzeW5jdHR5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDI6XFx0LmlvY3RsXFx0PSBwcHBfYXN5bmN0dHlfaW9jdGwsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwMzpcXHQucmVjZWl2ZV9idWYgPSBwcHBfYXN5bmN0dHlfcmVjZWl2ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA0OlxcdC53cml0ZV93YWtldXAgPSBwcHBfYXN5bmN0dHlfd2FrZXVwLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMDUtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMDc9c3RhdGljIGludCBfX2luaXRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA4OnBwcF9hc3luY19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MzIyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzIzOnBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMzI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTQtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQxNTpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTQxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDI3LVxcdC8qIHRyeSB0byBwdXNoIG1vcmUgc3R1ZmYgb3V0ICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQyODpcXHRpZiAodGVzdF9iaXQoWE1JVF9XQUtFVVAsIFxcdTAwMjZhcC1cXHUwMDNleG1pdF9mbGFncykgXFx1MDAyNlxcdTAwMjYgcHBwX2FzeW5jX3B1c2goYXApKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjktXFx0XFx0cHBwX291dHB1dF93YWtldXAoXFx1MDAyNmFwLVxcdTAwM2VjaGFuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz00NTI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo0NTM6cHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00NTQte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTU1MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU1MjpwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU1NS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTU2OlxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU2Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTYzOlxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTY0LVxcdHJldHVybiAxO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTU3MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU3MTpwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NzIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTYwMy1cXHRcXHRpZiAoYXAtXFx1MDAzZW9wdHIgXFx1MDAzZT0gYXAtXFx1MDAzZW9saW0gXFx1MDAyNlxcdTAwMjYgYXAtXFx1MDAzZXRwa3QpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NjA0OlxcdFxcdFxcdGlmIChwcHBfYXN5bmNfZW5jb2RlKGFwKSkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDUtXFx0XFx0XFx0XFx0LyogZmluaXNoZWQgcHJvY2Vzc2luZyBhcC1cXHUwMDNldHBrdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTY1MD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo2NTE6cHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02NTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTc1ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo3NTU6cHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy03NTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg3Mz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTkzOC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM5OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBfYXN5bmNfY2xlYW51cCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0My1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ0Om1vZHVsZV9pbml0KHBwcF9hc3luY19pbml0KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ1Om1vZHVsZV9leGl0KHBwcF9hc3luY19jbGVhbnVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTEwMT1wcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy1cXHRpZiAobmFtZSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwNDpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwicHBwX3N5bmN0dHk6ICVzLCBjb3VudCA9ICVkXFxcXG5cXFwiLCBuYW1lLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA1LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDg6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTItXFx0LndyaXRlXFx0PSBwcHBfc3luY193cml0ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyOTM6XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTQtXFx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1LSAqXFx0XFx0KE9oLCBCVFcsIHRoaXMgb25lIGlzIFlZTU1ERCwgaW4gY2FzZSB5b3Ugd2VyZSB3b25kZXJpbmcgLi4uKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE2OiAqIDIyMDEwMiA6XFx0Rml4IG1vZHVsZSB1c2UgY291bnQgb24gZmFpbHVyZSBpbiBwcHBvZV9jcmVhdGUsIHBwcG94X3NrIC1hY21lXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTctICogMDMwNzAwIDpcXHRGaXhlZCBjb25uZWN0IGxvZ2ljIHRvIGFsbG93IGZvciBkaXNjb25uZWN0Llxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjEtICogMDQwODAwIDpcXHRSZXNwZWN0IHJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc21zIG9uIG5ldC1kZXZpY2VzLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyOiAqIDIwMDgwMCA6XFx0Zml4IGtmcmVlKHNrYikgaW4gcHBwb2VfcmN2IChhY21lKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTIzLSAqXFx0XFx0TW9kdWxlIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBpbiB0aGUgcmlnaHQgc3BvdCBub3csXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjQtICpcXHRcXHRndWFyZHMgYWdhaW5zdCBzb2NrX3B1dCBub3QgYWN0dWFsbHkgZnJlZWluZyB0aGUgc2tcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyNTogKlxcdFxcdGluIHBwcG9lX3JlbGVhc2UuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjYtICogMDUxMDAwIDpcXHRJbml0aWFsaXphdGlvbiBjbGVhbnVwLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjgtICogMDUwMTAxIDpcXHRGaXggUEFEVCBwcm9jZXNzaW5nLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI5OiAqIDE0MDUwMSA6XFx0VXNlIHBwcG9lX3Jjdl9jb3JlIHRvIGhhbmRsZSBhbGwgYmFja2xvZy4gKEFsZXhleSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMC0gKiAxNzA3MDEgOlxcdERvIG5vdCBsb2NrX3NvY2sgd2l0aCByd2xvY2sgaGVsZC4gKERhdmVNKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzItICpcXHRcXHRsb2NrZWQuIChEYXZlTSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMzogKlxcdFxcdElnbm9yZSByZXR1cm4gdmFsdWUgb2YgZGV2X3F1ZXVlX3htaXQgaW4gX19wcHBvZV94bWl0XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQtICpcXHRcXHRvciBlbHNlIHdlIG1heSBrZnJlZSBhbiBTS0IgdHdpY2UuIChEYXZlTSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNTogKiAxOTA3MDEgOlxcdFdoZW4gZG9pbmcgY29waWVzIG9mIHNrYidzIGluIF9fcHBwb2VfeG1pdCwgYWx3YXlzIGRlbGV0ZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM2LSAqXFx0XFx0dGhlIG9yaWdpbmFsIHNrYiB0aGF0IHdhcyBwYXNzZWQgaW4gb24gc3VjY2VzcywgbmV2ZXIgb25cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MS0vKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MjpzdGF0aWMgdW5zaWduZWQgaW50IHBwcG9lX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzOnN0cnVjdCBwcHBvZV9uZXQge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk0LVxcdC8qXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMTQ9c3RhdGljIGlubGluZSBib29sIHN0YWdlX3Nlc3Npb24oX19iZTE2IHNpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTExOC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEyMC17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTIxOlxcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIyLX1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEyNS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI5OnN0YXRpYyBpbmxpbmUgaW50IGNtcF9hZGRyKHN0cnVjdCBwcHBvZV9hZGRyICphLCBfX2JlMTYgc2lkLCBjaGFyICphZGRyKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMzg9c3RhdGljIHU4IGhhc2hfaXRlbShfX2JlMTYgc2lkLCBjb25zdCB1OCBhZGRyW0VUSF9BTEVOXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1Ny0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNTg6c3RhdGljIHN0cnVjdCBwcHBveF9zb2NrICpfX2dldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE2NS1cXHR3aGlsZSAocmV0KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTY2OlxcdFxcdGlmIChjbXBfYWRkcihcXHUwMDI2cmV0LVxcdTAwM2VwcHBvZV9wYSwgc2lkLCBhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE2NzpcXHRcXHQgICAgcmV0LVxcdTAwM2VwcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTY4LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNzUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc2OnN0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3Ny17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc4OlxcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3OS1cXHRzdHJ1Y3QgcHBwb3hfc29jayAqcmV0LCAqZmlyc3Q7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODMtXFx0d2hpbGUgKHJldCkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE4NDpcXHRcXHRpZiAoY21wXzJfYWRkcihcXHUwMDI2cmV0LVxcdTAwM2VwcHBvZV9wYSwgXFx1MDAyNnBvLVxcdTAwM2VwcHBvZV9wYSkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxODU6XFx0XFx0ICAgIHJldC1cXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBwby1cXHUwMDNlcHBwb2VfaWZpbmRleClcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQUxSRUFEWTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE5Ni1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxOTc6c3RhdGljIHZvaWQgX19kZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xOTgtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDYtXFx0d2hpbGUgKHJldCkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIwNzpcXHRcXHRpZiAoY21wX2FkZHIoXFx1MDAyNnJldC1cXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDg6XFx0XFx0ICAgIHJldC1cXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjA5LVxcdFxcdFxcdHN0cnVjdCBwcHBveF9zb2NrICpuZXh0O1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI2LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMjgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMzgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjM5OnN0YXRpYyBpbmxpbmUgdm9pZCBkZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNDAtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU0OnN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1NS17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU2OlxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1Ny1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU5OlxcdHBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjYwLVxcdHNwaW5fbG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjYtXFx0XFx0d2hpbGUgKHBvKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjY3OlxcdFxcdFxcdHdoaWxlIChwbyBcXHUwMDI2XFx1MDAyNiBwby1cXHUwMDNlcHBwb2VfZGV2ICE9IGRldikge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI2OC1cXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG8tXFx1MDAzZW5leHQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yODgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjg5OlxcdFxcdFxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2ID09IGRldiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5MC1cXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwMjYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkyLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI5MzpcXHRcXHRcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yOTQtXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMwNTpcXHRcXHRcXHRCVUdfT04ocHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSkgPT0gTlVMTCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA2LVxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMTMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzE0OnN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMTUtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI5LVxcdFxcdC8qIEZpbmQgZXZlcnkgc29ja2V0IG9uIHRoaXMgZGV2aWNlIGFuZCBraWxsIGl0LiAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMzMDpcXHRcXHRwcHBvZV9mbHVzaF9kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzktXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQwOnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBwb2Vfbm90aWZpZXIgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQxOlxcdC5ub3RpZmllcl9jYWxsID0gcHBwb2VfZGV2aWNlX2V2ZW50LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM0Mi19O1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQ4LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNDk6c3RhdGljIGludCBwcHBvZV9yY3ZfY29yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM3Ni0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mzc3OnN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzc4LVxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM3OS17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgwOlxcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM4MS1cXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgyOlxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM4My1cXHRpbnQgbGVuO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzk3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM5ODpcXHRwaCA9IHBwcG9lX2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM5OS1cXHRsZW4gPSBudG9ocyhwaC1cXHUwMDNlbGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQxMy1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTQ6XFx0cGggPSBwcHBvZV9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTU6XFx0cG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MTYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MjgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDI5OnN0YXRpYyB2b2lkIHBwcG9lX3VuYmluZF9zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMC17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDMxLVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHBwb3hfc29jayxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzI6XFx0XFx0XFx0XFx0XFx0ICAgICBwcm90by5wcHBvZS5wYWR0X3dvcmspO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMy1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cG8tXFx1MDAzZXNrO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDM1LVxcdGxvY2tfc29jayhzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM2OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM3OlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM4OlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ1MTpzdGF0aWMgaW50IHBwcG9lX2Rpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDUyLVxcdFxcdFxcdCAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU0LXtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTU6XFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU2LVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTc6XFx0c3RydWN0IHBwcG9lX25ldCAqcG47XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY1LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ2NjpcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ2Ny1cXHRcXHRnb3RvIGFib3J0O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ2OC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0Njk6XFx0cGggPSBwcHBvZV9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzAtXFx0aWYgKHBoLVxcdTAwM2Vjb2RlICE9IFBBRFRfQ09ERSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NzM6XFx0cG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzQtXFx0cG8gPSBnZXRfaXRlbShwbiwgcGgtXFx1MDAzZXNpZCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgZGV2LVxcdTAwM2VpZmluZGV4KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzUtXFx0aWYgKHBvKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ3NjpcXHRcXHRpZiAoIXNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHBvZS5wYWR0X3dvcmspKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3Ny1cXHRcXHRcXHRzb2NrX3B1dChcXHUwMDI2cG8tXFx1MDAzZXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0ODU6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZXNfcHR5cGUgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00ODYtXFx0LnR5cGVcXHQ9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ4NzpcXHQuZnVuY1xcdD0gcHBwb2VfcmN2LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OC19O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTA6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZWRfcHR5cGUgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTEtXFx0LnR5cGVcXHQ9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9ESVNDKSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTI6XFx0LmZ1bmNcXHQ9IHBwcG9lX2Rpc2NfcmN2LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5My19O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTU6c3RhdGljIHN0cnVjdCBwcm90byBwcHBvZV9za19wcm90byBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5Ni1cXHQubmFtZVxcdCAgPSBcXFwiUFBQT0VcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTAwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUwMTpzdGF0aWMgdm9pZCBwcHBvZV9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxMC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MTE6c3RhdGljIGludCBwcHBvZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybilcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTE0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUxNTpcXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfUFBQT1gsIEdGUF9LRVJORUwsIFxcdTAwMjZwcHBvZV9za19wcm90bywga2Vybik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTE2LVxcdGlmICghc2spXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MjItXFx0c29jay1cXHUwMDNlc3RhdGVcXHQ9IFNTX1VOQ09OTkVDVEVEO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyMzpcXHRzb2NrLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTI0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNTpcXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3ZcXHQ9IHBwcG9lX3Jjdl9jb3JlO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNjpcXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHBwcG9lX2Rlc3RydWN0O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNy1cXHRzay1cXHUwMDNlc2tfc3RhdGVcXHRcXHQ9IFBQUE9YX05PTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzEtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTMyOlxcdElOSVRfV09SSyhcXHUwMDI2cHBwb3hfc2soc2spLVxcdTAwM2Vwcm90by5wcHBvZS5wYWR0X3dvcmssXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTMzOlxcdFxcdCAgcHBwb2VfdW5iaW5kX3NvY2tfd29yayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTM0LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTM3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUzODpzdGF0aWMgaW50IHBwcG9lX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQxLVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NDI6XFx0c3RydWN0IHBwcG9lX25ldCAqcG47XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQzLVxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NTUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU2OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU3OlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU4OlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU1OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NjYtXFx0bmV0ID0gc29ja19uZXQoc2spO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU2NzpcXHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3MC1cXHQgKiBwcm90ZWN0IFxcXCJwb1xcXCIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzE6XFx0ICogb24gcHBwb2VfZmx1c2hfZGV2XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTcyLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU3MzpcXHRkZWxldGVfaXRlbShwbiwgcG8tXFx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzQ6XFx0XFx0ICAgIHBvLVxcdTAwM2VwcHBvZV9pZmluZGV4KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NzUtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTg1OnN0YXRpYyBpbnQgcHBwb2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdXNlcnZhZGRyLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU4Ni1cXHRcXHRcXHQgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTkxLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU5MjpcXHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01OTMtXFx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYwOC1cXHRpZiAoKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MDk6XFx0ICAgICBzdGFnZV9zZXNzaW9uKHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLnNpZCkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjEwLVxcdFxcdGdvdG8gZW5kO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjE0LVxcdGlmICgoc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwMjYgUFBQT1hfREVBRCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MTU6XFx0ICAgICAhc3RhZ2Vfc2Vzc2lvbihzcC1cXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxNi1cXHRcXHRnb3RvIGVuZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyMC1cXHQvKiBEZWxldGUgdGhlIG9sZCBiaW5kaW5nICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjIxOlxcdGlmIChzdGFnZV9zZXNzaW9uKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQpKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIyLVxcdFxcdHBwcG94X3VuYmluZF9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjM6XFx0XFx0cG4gPSBwcHBvZV9wZXJuZXQoc29ja19uZXQoc2spKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjQ6XFx0XFx0ZGVsZXRlX2l0ZW0ocG4sIHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI1OlxcdFxcdFxcdCAgICBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBwby1cXHUwMDNlcHBwb2VfaWZpbmRleCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI2OlxcdFxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI3OlxcdFxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI4OlxcdFxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyOS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYzMTpcXHRcXHRwby1cXHUwMDNlcHBwb2VfaWZpbmRleCA9IDA7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjMyOlxcdFxcdG1lbXNldChcXHUwMDI2cG8tXFx1MDAzZXBwcG9lX3BhLCAwLCBzaXplb2YocG8tXFx1MDAzZXBwcG9lX3BhKSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMzLVxcdFxcdG1lbXNldChcXHUwMDI2cG8tXFx1MDAzZWNoYW4sIDAsIHNpemVvZihwby1cXHUwMDNlY2hhbikpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQwLVxcdC8qIFJlLWJpbmQgaW4gc2Vzc2lvbiBzdGFnZSBvbmx5ICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjQxOlxcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLnNpZCkpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDItXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY0My1cXHRcXHRuZXQgPSBzb2NrX25ldChzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjQ0OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfbmFtZShuZXQsIHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLmRldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ1LVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0ODpcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0OTpcXHRcXHRwby1cXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTA6XFx0XFx0cG4gPSBwcHBvZV9wZXJuZXQobmV0KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTEtXFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY1NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTU6XFx0XFx0bWVtY3B5KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjU2OlxcdFxcdCAgICAgICBcXHUwMDI2c3AtXFx1MDAzZXNhX2FkZHIucHBwb2UsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjU3OlxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTgtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjY1OlxcdFxcdHBvLVxcdTAwM2VjaGFuLmhkcmxlbiA9IChzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgK1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2Ni1cXHRcXHRcXHRcXHQgICBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY2ODpcXHRcXHRwby1cXHUwMDNlY2hhbi5tdHUgPSBkZXYtXFx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY5LVxcdFxcdHBvLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBzaztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzA6XFx0XFx0cG8tXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3MS1cXHRcXHRwby1cXHUwMDNlY2hhbi5kaXJlY3RfeG1pdCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXFx0XFx0aWYgKGVycm9yKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1OlxcdFxcdFxcdGRlbGV0ZV9pdGVtKHBuLCBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3NjpcXHRcXHRcXHRcXHQgICAgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgcG8tXFx1MDAzZXBwcG9lX2lmaW5kZXgpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3Ny1cXHRcXHRcXHRnb3RvIGVycl9wdXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02ODItXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjgzOlxcdHBvLVxcdTAwM2VudW0gPSBzcC1cXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQ7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg4LWVycl9wdXQ6XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njg5OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjkwOlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjkxOlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njk2OnN0YXRpYyBpbnQgcHBwb2VfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Ny1cXHRcXHQgIGludCBwZWVyKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo0OC43NDY2NjA3NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODIzOTQ4NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFUTSBhbmQgTDJUUCBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrZXkgZmlsZXMsIGJlZ2lubmluZyB3aXRoIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIGJvdGggQVRNIGFuZCBMMlRQOiBzcGVjaWZpY2FsbHksIGBuZXQvYXRtL01ha2VmaWxlYCwgYG5ldC9hdG0vS2NvbmZpZ2AsIGBuZXQvbDJ0cC9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBidWlsZCBpbnN0cnVjdGlvbnMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIG9mIEFUTSBhbmQgTDJUUCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0aGUgc3Vic2VxdWVudCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1MC41NzA2MTQxOThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTM2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtOTQtXFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jOjk1OlxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxubmV0L2F0bS9pb2N0bC5jLTk2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXFxubmV0L2F0bS9wcHBvYXRtLmMtMy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTUxLVxcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy01NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVxcdHN0cnVjdCBhdG1fdmNjXFx0KmF0bXZjYztcXHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNjItXFx0XFx0XFx0XFx0XFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTY0LVxcdGF0b21pY190IGluZmxpZ2h0O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9ODY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6OTE6XFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy05OC0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo5OTpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwMC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTAxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGZyb21fdGFza2xldChwdmNjLCB0LCB3YWtldXBfdGFza2xldCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTAyLVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTA1LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNjpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDcte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwODpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTEwOS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTE6XFx0ICogQXMgaW4gcHBwb2F0bV9wb3AoKSwgaXQncyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTI6XFx0ICogdGhlIHdha2V1cCAqY2FuJ3QqIHJhY2Ugd2l0aCBwcHBvYXRtX3NlbmQoKS4gVGhleSBib3RoIGhvbGQgdGhlIFBQUFxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMy1cXHQgKiBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNDpcXHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24ndFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNTpcXHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTYtXFx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMjgtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTI5OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTMwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzE6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzItXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzgtXFx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM5OlxcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQwLVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQxOlxcdCAqIEluIGZhY3QgaXQncyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDItXFx0ICogd2hpbGUgaG9sZGluZyB0aGUgY2hhbm5lbC1cXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXFx0ICogY2FsbGVkIGJ5IHRoZSB0YXNrbGV0IHdpbGwgKmFsc28qIGdyYWIgdGhhdCBsb2NrLiBTbyBldmVuIGlmIGFub3RoZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDQ6XFx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJ3QgZ29pbmcgdG8gcmFjZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0NS1cXHQgKiB3aXRoIGl0LiBUaGUgd2FrZXVwICp3aWxsKiBoYXBwZW4gYWZ0ZXIgdGhlIG90aGVyIENQVSBpcyBzYWZlbHkgb3V0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2OlxcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cXHQgKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjE0ODpcXHQgKiBTbyBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpIGhhcyBhbHJlYWR5IHNldCB0aGUgQkxPQ0tFRCBiaXQgYW5kXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQ5LVxcdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCdzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MDpcXHQgKiBoYXBwZW4gbGF0ZXIuIEFuZCBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpICpoYXNuJ3QqIHNldCB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTEtXFx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0J3MgZmluZSB0b28gYmVjYXVzZSBvZiB0aGUgZG91YmxlIGNoZWNrIGluXFxubmV0L2F0bS9wcHBvYXRtLmM6MTUyOlxcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUzLVxcdCAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTYxLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE2MjpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2My17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTY0OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjUtXFx0cHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNzY6c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTc3LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNzg6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzktXFx0cHJfZGVidWcoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXFx0XFx0bW9kdWxlID0gcHZjYy1cXHUwMDNlb2xkX293bmVyO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4NTpcXHRcXHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Ni1cXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2goYXRtdmNjLCBOVUxMKTtcXHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMjgtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjI5OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMC17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTEtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNTI6XFx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1My1cXHQgKiBsYXN0IHBhY2tldCBpbiB0aGUgcXVldWUsICpqdXN0KiBiZWZvcmUgd2Ugc2V0IHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTktXFx0ICogcnVuIHRoZSB3YWtldXAgdGFza2xldC4gQW5vdGhlciB3YWtldXAgd2lsbCBuZXZlciBodXJ0Llxcbm5ldC9hdG0vcHBwb2F0bS5jOjI2MDpcXHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24ndCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI2MS1cXHQgKiBzcGFjZSBvbiB0aGUgcXVldWUgeWV0LCB0aGVuIGl0IGhhc24ndCBjaGVja2VkIHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjQtXFx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCdzIC1cXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNjU6XFx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXFxubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVxcdCAqIHdhaXQgZm9yIHVzIHRvIGZpbmlzaC5cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI4My0jZGVmaW5lIERST1BfUEFDS0VUIDFcXG5uZXQvYXRtL3BwcG9hdG0uYzoyODQ6c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0yODUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI4Ny1cXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzE4LVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozMTk6XFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyMC1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMjgtXFx0XFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjMyOTpcXHRcXHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMC1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzMtXFx0Y2FzZSBlX3ZjOlxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzNDpcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzM1LVxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2My0vKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM2NDpzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6MzY3OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzY4LVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxubmV0L2F0bS9wcHBvYXRtLmM6MzgwOlxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4Mi1cXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG5uZXQvYXRtL3BwcG9hdG0uYy0zODQte1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4NS1cXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDA1OlxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDA2LVxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDA3OlxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQwOC1cXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQwOS1cXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxMDpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTc6XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxODpcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxOTpcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDIwLVxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MzItICovXFxubmV0L2F0bS9wcHBvYXRtLmM6NDMzOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNC1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzOC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0Mzk6XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ0MC1cXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1MjpcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDUzLVxcdFxcdH1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2My1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjQ6c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDY1LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2OlxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjctfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjgtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY5OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOlxcdHJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzU6c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc3OlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc4LX1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzktXFxubmV0L2F0bS9wcHBvYXRtLmM6NDgwOm1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDgxOm1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1MC42NTE1NTg0MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTA1OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEwyVFAvUFBQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFdoZW4gSSBzZWUgYGwydHBfcHBwYCBtZW50aW9uZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L2wydHAvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhhdCBgbDJ0cF9wcHBgIGNvbXBvbmVudCBpcyBoYW5kbGVkIGR1cmluZyBjb21waWxhdGlvbiwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGhvdyBpdCdzIGludGVncmF0ZWQuIFRoZW4sIG5hdHVyYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCdzIGluIHRoZSBtZW51Y29uZmlnIHJlbGF0ZWQgdG8gUFBQIHN1cHBvcnQgd2l0aGluIEwyVFAuIFRoYXQgbWVhbnMgYSBsb29rIGludG8gYG5ldC9sMnRwL0tjb25maWdgLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYGwydHBfcHBwYCBpcyBleHBvc2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBCZXR3ZWVuIHRob3NlIHR3byBmaWxlcywgSSBzaG91bGQgZ2V0IGEgcHJldHR5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHN5c3RlbSBleHBlY3RzIHdpdGggdGhpcyBQUFAgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTk4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTIuNjEyNjIxNDY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIxMzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX3BwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9NYWtlZmlsZT04PUNGTEFHU19sMnRwX2NvcmUubyArPSAtSSQoc3JjKVxcbi0tXFxubmV0L2wydHAvTWFrZWZpbGUtMTAtIyBCdWlsZCBsMnRwIGFzIG1vZHVsZXMgaWYgTDJUUCBpcyBNXFxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICs9IGwydHBfcHBwLm9cXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSArPSBsMnRwX2lwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTIuNjg4ODQwNTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI5NDAxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ09ORklHIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJIGtub3cgdGhpcyBmaWxlIGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgdGhleSByZWx5IG9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBsaW5raW5nIHNwZWNpZmljIFBQUCBkcml2ZXJzIHRvIGJyb2FkZXIgbmV0d29yayBzdGFjayBmZWF0dXJlcywgaGFyZHdhcmUgc3VwcG9ydCwgb3IgZXZlbiBvdGhlciBQUFAtcmVsYXRlZCBtb2R1bGVzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIHJlcXVpcmVkIGVsZW1lbnRzIGZvciB0aGlzIGFzcGVjdC4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVyaWVuY2UuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1NC41NTE3ODM2MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXFxuICA1MjpcXHRcXHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxcbiAgNTM6XFx0XFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcXFwibWFrZSBtb2R1bGVzXFxcIi4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0Y29uZmlnIFBQUF9ERUZMQVRFXFxuICA1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuICA1NzpcXHRcXHRzZWxlY3QgWkxJQl9JTkZMQVRFXFxuICA1ODpcXHRcXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxcbiAgNjE6XFx0XFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xcbiAgNjI6XFx0XFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxcbiAgNjM6XFx0XFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcXG4gIDY0OlxcdFxcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXFxuICA2NTpcXHRcXHQgIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQUFBfRklMVEVSXFxuICA3MDpcXHRcXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxcbiAgNzM6XFx0XFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcXG4gIDc0OlxcdFxcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXFxuICA3NTpcXHRcXHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cXG4gIDc2OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxcbiAgNzc6XFx0XFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODA6XFx0XFxuICA4MTpcXHRjb25maWcgUFBQX01QUEVcXG4gIDgyOlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcXFwiXFxuICA4MzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XFxuICA4NDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBNUFBFIEVuY3J5cHRpb24gcHJvdG9jb2wsIGFzIGVtcGxveWVkIGJ5IHRoZVxcbiAgODc6XFx0XFx0ICBNaWNyb3NvZnQgUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxcbiAgOTA6XFx0XFx0ICBjb25maWd1cmluZyBQUFRQIGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gdXRpbGl6ZSB0aGlzIG1ldGhvZC5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIlBQUCBtdWx0aWxpbmsgc3VwcG9ydFxcXCJcXG4gIDk0OlxcdFxcdGhlbHBcXG4gIDk1OlxcdFxcdCAgUFBQIG11bHRpbGluayBpcyBhIHByb3RvY29sIChkZWZpbmVkIGluIFJGQyAxOTkwKSB3aGljaCBhbGxvd3MgeW91XFxuICA5NjpcXHRcXHQgIHRvIGNvbWJpbmUgc2V2ZXJhbCAobG9naWNhbCBvciBwaHlzaWNhbCkgbGluZXMgaW50byBvbmUgbG9naWNhbCBQUFBcXG4gIDk3OlxcdFxcdCAgY29ubmVjdGlvbiwgc28gdGhhdCB5b3UgY2FuIHV0aWxpemUgeW91ciBmdWxsIGJhbmR3aWR0aC5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ICBUaGlzIGhhcyB0byBiZSBzdXBwb3J0ZWQgYXQgdGhlIG90aGVyIGVuZCBhcyB3ZWxsIGFuZCB5b3UgbmVlZCBhXFxuIDEwMDpcXHRcXHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjU0LjU1MTg5MDczNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNzQ4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyBhIHR5cGljYWwgY29uZmlndXJhdGlvbiBmaWxlIGhlcmUsIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBvZiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgYnVpbGQgb2YgdGhlIFBQUCAoUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wpIG5ldHdvcmsgc3RhY2sgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgUFBQIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgbWF5YmUgdHJ5aW5nIHRvIGluZmVyIHRoZSBpbnRlbnRpb25zIG9mIHRoZSBkZXZlbG9wZXJzIHdobyBjcmVhdGVkIGl0LiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gd2hpY2ggdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyB0aGUgZmlsZSBoYW5kbGVzIHRoZSBjb21wbGV4aXRpZXMgb2YgZGlmZmVyZW50IFBQUCBpbXBsZW1lbnRhdGlvbnMuIElzIHRoaXMgb25lIHdlbGwtY29tbWVudGVkPyBIb3BlZnVsbHksIGl0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIFBQUCdzIG5ldHdvcmsgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTYuNzg1NjQzNjk4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGNvbmZpZyBQUFBPQVRNXFxuIDEwNTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbiAxMDY6XFx0XFx0ZGVwZW5kcyBvbiBBVE1cXG4gMTA3OlxcdFxcdGhlbHBcXG4gMTA4OlxcdFxcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cXG4gMTA5OlxcdFxcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXFxuIDExMDpcXHRcXHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcXG4gMTExOlxcdFxcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBQUFBPWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGVcXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIFBQUE9FXFxuIDExNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgRXRoZXJuZXRcXFwiXFxuIDExODpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgRXRoZXJuZXQuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxcbiAxMjM6XFx0XFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcXG4gMTI0OlxcdFxcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcXG4gMTI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZGlhbm5lLnNrb2xsLmNhL3Byb2plY3RzL3JwLXBwcG9lL1xcdTAwM2UuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNob2ljZVxcbiAxMjg6XFx0XFx0cHJvbXB0IFxcXCJOdW1iZXIgb2YgUFBQb0UgaGFzaCBiaXRzXFxcIlxcbiAxMjk6XFx0XFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxMzA6XFx0XFx0ZGVwZW5kcyBvbiBQUFBPRVxcbiAxMzE6XFx0XFx0aGVscFxcbiAxMzI6XFx0XFx0XFx0U2VsZWN0IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGZvciBoYXNoaW5nIFBQUG9FIGludGVyZmFjZXMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdFxcdExhcmdlciBzaXplcyByZWR1Y2VzIHRoZSByaXNrIG9mIGhhc2ggY29sbGlzaW9ucyBhdCB0aGUgY29zdFxcbiAxMzU6XFx0XFx0XFx0b2Ygc2xpZ2h0bHkgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZS5cXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0VGhpcyBoYXNoIHRhYmxlIGlzIG9uIGEgcGVyIG91dGVyIGV0aGVybmV0IGludGVyZmFjZS5cXG4gMTM4OlxcdFxcbiAxMzk6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXFxuIDE0MDpcXHRcXHRib29sIFxcXCIxIGJpdCAoMiBidWNrZXRzKVxcXCJcXG4gMTQxOlxcdFxcbiAxNDI6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXFxuIDE0MzpcXHRcXHRib29sIFxcXCIyIGJpdHMgKDQgYnVja2V0cylcXFwiXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxNDY6XFx0XFx0Ym9vbCBcXFwiNCBiaXRzICgxNiBidWNrZXRzKVxcXCJcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XFxuIDE0OTpcXHRcXHRib29sIFxcXCI4IGJpdHMgKDI1NiBidWNrZXRzKVxcXCJcXG4gMTUwOlxcdFxcbiAxNTE6XFx0ZW5kY2hvaWNlXFxuIDE1MjpcXHRcXG4gMTUzOlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcXG4gMTU0OlxcdFxcdGludFxcbiAxNTU6XFx0XFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXFxuIDE1NjpcXHRcXHRkZWZhdWx0IDIgaWYgUFBQT0VfSEFTSF9CSVRTXzJcXG4gMTU3OlxcdFxcdGRlZmF1bHQgNCBpZiBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxNTg6XFx0XFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XFxuIDE1OTpcXHRcXHRkZWZhdWx0IDRcXG4gMTYwOlxcdFxcbiAxNjE6XFx0Y29uZmlnIFBQVFBcXG4gMTYyOlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4gMTYzOlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuIDE2NDpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTY1OlxcdFxcdGhlbHBcXG4gMTY2OlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgSVB2NC4oUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKVxcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcXG4gMTY5OlxcdFxcdCAgbW9kaWZpZWQgcHB0cGQgKHBvcHRvcCkgdG8gd29yayBpbiBzZXJ2ZXIgbW9kZS5cXG4gMTcwOlxcdFxcdCAgU2VlIGh0dHA6Ly9hY2NlbC1wcHRwLnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIGhvdyB0b1xcbiAxNzE6XFx0XFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgUFBQT0wyVFBcXG4gMTc0OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQXFxuIDE3NjpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTc3OlxcdFxcdGhlbHBcXG4gMTc4OlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQLW92ZXItTDJUUCBzb2NrZXQgZmFtaWx5LiBMMlRQIGlzIGEgcHJvdG9jb2xcXG4gMTc5OlxcdFxcdCAgdXNlZCBieSBJU1BzIGFuZCBlbnRlcnByaXNlcyB0byB0dW5uZWwgUFBQIHRyYWZmaWMgb3ZlciBVRFBcXG4gMTgwOlxcdFxcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXFxuIDE4MTpcXHRpZiBUVFlcXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIFBQUF9BU1lOQ1xcbiAxODQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiXFxuIDE4NTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN0YW5kYXJkXFxuIDE4ODpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMsIHN1Y2ggYXMgQ09NMSBvciBDT00yIG9uIGEgUEMuICBJZiB5b3UgdXNlXFxuIDE4OTpcXHRcXHQgIGEgbW9kZW0gKG5vdCBhIHN5bmNocm9ub3VzIG9yIElTRE4gbW9kZW0pIHRvIGNvbnRhY3QgeW91ciBJU1AsIHlvdVxcbiAxOTA6XFx0XFx0ICBuZWVkIHRoaXMgb3B0aW9uLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIFBQUF9TWU5DX1RUWVxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcXG4gMjAwOlxcdFxcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1Ni43ODU3NDUzODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMTA1NjE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBMMlRQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBMMlRQIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjZW50cmFsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFsbCB0aGluZ3MgTDJUUCwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgcHJvdG9jb2wgaXRzZWxmLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBwcmltYXJ5IGBMMlRQYCBzeW1ib2wsIHdoaWNoIGFjdHMgYXMgdGhlIG1hc3RlciBzd2l0Y2gsIGFuZCB0aGVuIEknbGwgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIGFudGljaXBhdGUgYFBQUE9MMlRQYCB3aWxsIGhhdmUgaXRzIG93biBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBsaWtlbHkgZGVwZW5kZW50IG9uIGBMMlRQYCBiZWluZyBlbmFibGVkLCBnaXZlbiB0aGF0IFBQUCBvdmVyIEwyVFAgaXMgYnVpbHQgb24gdG9wIG9mIHRoZSB1bmRlcmx5aW5nIEwyVFAgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYXQgY29tcGlsZSB0aW1lIGFuZCBob3cgdG8gdHdlYWsgdGhlbS4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjU4LjkwNjgwNjU5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4NDIyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvS2NvbmZpZy01LVxcbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcXG5uZXQvbDJ0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkxheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy0zNS1cXG5uZXQvbDJ0cC9LY29uZmlnOjM2OmNvbmZpZyBMMlRQX0RFQlVHRlNcXG5uZXQvbDJ0cC9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJMMlRQIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctNDgtXFxubmV0L2wydHAvS2NvbmZpZzo0OTpjb25maWcgTDJUUF9WM1xcbm5ldC9sMnRwL0tjb25maWctNTAtXFx0Ym9vbCBcXFwiTDJUUHYzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTY5LVxcbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcXG5uZXQvbDJ0cC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1xcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctODYtXFxubmV0L2wydHAvS2NvbmZpZzo4Nzpjb25maWcgTDJUUF9FVEhcXG5uZXQvbDJ0cC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1OC45OTU2NTg2MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwNDk3NTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQVRNIENvbmZpZ3VyYXRpb24gZm9yIFBQUE9BVE0qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIEFUTSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBmb3IgUFBQT0FUTS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBBVE0gbGF5ZXIgaXMgcHJvcGVybHkgc2V0IHVwIGJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBtb3Zpbmcgb24gdG8gdGhlIFBQUG9FIGFzcGVjdHMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBWUEkvVkNJIHZhbHVlcywgZW5jYXBzdWxhdGlvbiB0eXBlIChwcm9iYWJseSBBQUw1KSwgYW5kIGFueSByZWxldmFudCBzaGFwaW5nIG9yIHBvbGljaW5nIHBhcmFtZXRlcnMgZGVmaW5lZCBvbiB0aGUgQVRNIGludGVyZmFjZS4gQW55IG1pc2NvbmZpZ3VyYXRpb24gYXQgdGhpcyBmb3VuZGF0aW9uYWwgbGV2ZWwgd2lsbCBpbW1lZGlhdGVseSBicmVhayB0aGUgUFBQb0FUTSBjb25uZWN0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHZlcmlmeWluZyB0aGUgQVRNIHBsdW1iaW5nIGJlZm9yZSB0cnlpbmcgdG8gc2VuZCBkYXRhIG92ZXIgdGhlIHBpcGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgZXNwZWNpYWxseSBpbiBhIHRyb3VibGVzaG9vdGluZyBzY2VuYXJpbywgb3IgYmVmb3JlIG1ha2luZyBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTcyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE4OjAwLjcwMDYzODEyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vS2NvbmZpZy01LVxcbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cXG5uZXQvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMjEtXFxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMzAtXFxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxODowMC43ODIxNzk3OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY2NTM2MDIyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUFBQL0wyVFAgRHJpdmVyIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBQUFAsIGFuZCBhc3NvY2lhdGVkIHByb3RvY29sczogUFBQLCBQUFBfQVNZTkMsIFBQUF9TWU5DX1RUWSwgUFBQT0UsIFBQVFAsIFBQUE9BVE0sIFBQUE9MMlRQLCBBVE0sIGFuZCBMMlRQLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlICpGb2N1c1N5bWJvbHMqLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuIEkndmUgZ290IGEgbGlzdCwgd2hpY2ggSSdsbCByZXZpZXcgYW5kIGludGVybmFsaXplLiBUaGlzIGluY2x1ZGVzIHNlbmQgZnVuY3Rpb25zIChgcHBwX2FzeW5jX3NlbmRgLCBgcHBwX3N5bmNfc2VuZGAsIGBwcHBvZV94bWl0YCwgYHBwdHBfeG1pdGAsIGBwcHBvYXRtX3NlbmRgLCBgcHBwb2wydHBfeG1pdGApLCBJT0NUTCBoYW5kbGVycyAoYHBwcF9hc3luY19pb2N0bGAsIGBwcHBfc3luY19pb2N0bGAsIGBwcHRwX3BwcF9pb2N0bGAsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIGBwcHBfaW9jdGxgKSwgYW5kIGEgZmV3IGtleSBmdW5jdGlvbnMgd2l0aGluIGBwcHBfZ2VuZXJpYy5jYCBsaWtlIGBwcHBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYW5kIGBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRgLCBhbG9uZyB3aXRoIHRoZSBgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyBub3cgcGFzcyB0aGUgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGFjcm9zcyB0aGUgcHBwIGdlbmVyaWMgYW5kIGFzc29jaWF0ZWQgZHJpdmVycy5cblxuTm93LCBhIGNydWNpYWwgc2FuaXR5IGNoZWNrOiBhcmUgdGhlc2Ugc3ltYm9scyAqYWN0dWFsbHkqIGV4cG9ydGVkPyBTaW5jZSB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZW50cnkgcG9pbnRzIG9yIGRpcmVjdGx5IGludm9sdmVkIGluIHBhY2tldCBoYW5kbGluZy4gTWFueSBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyAoYG9wcy1cdTAwM2VzdGFydF94bWl0YCBldGMuKSwgc28gdGhleSBhcmUgKmRlZmluaXRlbHkqIHN5bWJvbGlzZWQuIEknbSBjb25maXJtaW5nIHRoYXQgdGhlc2Ugc3ltYm9scyB3aWxsIGJlIHByZXNlbnQgaW4gdm1saW51eC9tb2R1bGVzLCBhbmQgYXJlIG5vdCBqdXN0IHN0YXRpYywgaW5saW5lYWJsZSBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhlIGFkZHJlc3NlcyBvZiBtYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnRha2VuKiBjb25maXJtcyB0aGlzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgbWVldHMgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgc2hvdWxkIGJlIGB0cnVlYCwgXCJFbmFibGVDb25maWdzXCIgYWxyZWFkeSBjb25maXJtZWQgKFBQUCwgUFBQX0FTWU5DLCBQUFBfU1lOQ19UVFksIFBQUE9FLCBQUFRQLCBQUFBPQVRNLCBQUFBPTDJUUCwgQVRNLCBhbmQgTDJUUCksIGFuZCBcIkZvY3VzU3ltYm9sc1wiIGFyZSBhbGwgaW4gcGxhY2UuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGludm9sdmUgcmVmYWN0b3JpbmcgY2FsbGJhY2sgbWVjaGFuaXNtcywgd2hpY2ggYWxtb3N0IGFsd2F5cyBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgZnVuY3Rpb25zIHNlbGVjdGVkIGRlYWwgd2l0aCB0aGUgc3BlY2lmaWNzIGZvciBnZW5lcmljIHBwcCwgYXN5bmMvc3luYyB0dHksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgUFBQT0wyVFAuIEEgdmVyeSBmb2N1c2VkIHNldCBvZiBkcml2ZXJzIHdpdGggdGhpcyBjb2RlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMTQsIk91dHB1dFRva2VucyI6MzQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjA3LjQzNTc4NTYxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODQ4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9BU1lOQ1wiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBPRVwiLFxuICAgIFwiUFBUUFwiLFxuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiUFBQT0wyVFBcIixcbiAgICBcIkFUTVwiLFxuICAgIFwiTDJUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX3B1c2hcIixcbiAgICBcInBwcF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHBwX21wX2V4cGxvZGVcIixcbiAgICBcIl9fcHBwX2NoYW5uZWxfcHVzaFwiLFxuICAgIFwicHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0XCIsXG4gICAgXCJwcHBfYXN5bmNfc2VuZFwiLFxuICAgIFwicHBwX2FzeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJ3MgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0cywgdHR5IGxpbmUgZGlzY2lwbGluZXMsIGFuZCAvZGV2L3BwcCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxOTowNy41MDk2NDA0MTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxOTkwNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTk6MDcuNTEwMTIyMDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM5NDE1MDQzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwncyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHNpZ25hdHVyZSBhbmQgYXJndW1lbnQgcmVmYWN0b3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIG9yIHBhZGRpbmcgZmllbGRzLCBub3IgZG9lcyBpdCBhbHRlciBkYXRhIGNvcHlpbmcgbG9naWMgdG8gdXNlcnNwYWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvaW50ZXIgb3IgdHlwZSBtaXN1c2UgaW50cm9kdWNlZCBieSBzdWNoIGEgcmVmYWN0b3Igd291bGQgbWFuaWZlc3QgYXMgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdHlwZSBjb25mdXNpb24sIG9yIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxOThmNzAzNzg5MzEzZTViODg1OTU5ZjJkNWM0MWZiMWJjOTdkNTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuaW5kZXggZWE3ZmU5NjA4ZmZkNi4uZTBiYTQ0OGYyOTdjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5AQCAtOTEsMTMgKzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIFxuIHN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG5AQCAtMzIxLDEwICszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbi1cdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IF9fdXNlciAqcCA9IGFyZ3A7XG4gXHRpbnQgZXJyLCB2YWw7XG4gXHR1MzIgYWNjbVs4XTtcbkBAIC01NTAsOSArNTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyArNzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4rXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWNoYW5fc2VtKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4rXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyArMTkzMiw3IEBAIHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XG4rXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgKzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuK1x0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4tXHUwMDNlcHJpdmF0ZSwgZnJhZykpXG4gXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuIFx0XHRwY2gtXHUwMDNlaGFkX2ZyYWcgPSAxO1xuIFx0XHRwICs9IGZsZW47XG5AQCAtMjE3NSw3ICsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuK1x0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSkge1xuIFx0XHRcdFx0LyogcHV0IHRoZSBwYWNrZXQgYmFjayBhbmQgdHJ5IGFnYWluIGxhdGVyICovXG4gXHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgc2tiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIzMDAsNyArMjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4rXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSArODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgKzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgKzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHNlbmRzIFBQUCBmcmFtZSBvdmVyIFBQUG9FIHNvY2tldFxuICAqXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLXN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSArODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuK1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcbiBcdHJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfcHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcbiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHtcbiBcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxuIFx0ICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovXG4tXHRpbnRcdCgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopO1xuK1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4rXHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4rXHRcdFx0XHQgICAgIHZvaWQgKik7XG4gfTtcbiBcbiBzdHJ1Y3QgcHBwX2NoYW5uZWwge1xuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJ3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cbkBAIC0yODYsOSArMjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJ3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbitcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFBQUElPQ0dGTEFHUzpcbi1cdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4rXHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uOWU5MzJmZGRhMzg3MiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbisrKyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24ge1xuIFx0c3RydWN0IHNvY2tcdFx0Kl9fc2s7XHRcdC8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqL1xuIH07XG4gXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsMTEgKzMyNywxMSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbjtcbiBcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdGludCB1aGxlbiwgaGVhZHJvb207XG4gXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxOTowNy41MTAxMjMxNzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg3MzkzMzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCB0aGUgc2lnbmF0dXJlcyBmb3IgYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgYmVpbmcgdHdlYWtlZC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbmAgZGlyZWN0bHksIHRoZXkncmUgbm93IGV4cGVjdGluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCAob3IganVzdCBgdm9pZCAqYCkuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgcGF0Y2ggYXV0aG9ycyBhcmUgY2xldmVybHkgcmVwbGFjaW5nIHRoZSBkaXJlY3QgdXNlIG9mIGBjaGFuYCB3aXRoIGBjaGFuLVx1MDAzZXByaXZhdGVgIGluIHRoZSBleGlzdGluZyBkcml2ZXJzLiBUaGUgaW1wbGVtZW50YXRpb25zIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIGxpa2UgaW4gYHBwcF9hc3luYy5jYCwgYHBwcF9zeW5jdHR5LmNgLCBgcHBwb2UuY2AsIGFuZCBldmVuIHRoZSBBVE0gYW5kIEwyVFAgUFBQIG1vZHVsZXMsIGFyZSBhbGwgdXBkYXRlZCB0byBjYXN0IHRoZSBgdm9pZCAqcHJpdmF0ZWAgdG8gdGhlIGFwcHJvcHJpYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIHN1Y2ggYXMgYHN0cnVjdCBhc3luY3BwcCAqYXBgLCBgc3RydWN0IHNvY2sgKnNrYCwgb3IgYHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjY2AuIEl0J3MgYSBjbGVhbiByZWZhY3RvcmluZywgc3dhcHBpbmcgZnJvbSB0aGUgZGlyZWN0IHN0cnVjdHVyZSBhY2Nlc3MgdG8gdXNpbmcgYSBwcml2YXRlIGZpZWxkLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcHJhY3RpY2UgdG8gZW5jYXBzdWxhdGUgdGhlIGRhdGEuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzOiBoYXMgdGhpcyBiZWVuIGRvbmUgY29tcHJlaGVuc2l2ZWx5PyBIYXZlIHdlIG1pc3NlZCBhbnkgb3RoZXIgY2hhbm5lbCBvcGVyYXRpb25zIGluIHRoZSBrZXJuZWwgdHJlZSB0aGF0IHRoaXMgY2hhbmdlIGFmZmVjdHM/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGJ1Z3MgbHVya2luZyB3aGVyZSB0aGUgdHlwZSBjYXN0aW5nIGlzbid0IHF1aXRlIHJpZ2h0LCBvciBwZXJoYXBzIHNvbWV3aGVyZSB0aGUgYHByaXZhdGVgIGZpZWxkIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjY2Vzc2VkPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNjYW4gb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgc2FmZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjE0LjM4NDA2MDcxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTg0Nzg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjE2LjEyMzkxNTAyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI3NjkwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCdzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGNhbGxiYWNrIHNpZ25hdHVyZXMgZnJvbSBgKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCAuLi4pYCB0byBgKHZvaWQgKnByaXZhdGUsIC4uLilgIHdoZXJlIHRoZSBjYWxsZXIgbm93IGV4cGxpY2l0bHkgcGFzc2VzIGBjaGFuLVx1MDAzZXByaXZhdGVgLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBhbHRlcnMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLlxuXG5JJ20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBkdWUgdG8gYm91bmRzIGNoZWNrcyBvciBpbmNvcnJlY3QgbGVuZ3RoIGhhbmRsaW5nLlxuXG5JIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgbW9kaWZpZWQgaW9jdGwgZnVuY3Rpb25zLiBJIHNlZSBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwdHBfcHBwX2lvY3RsYCwgYW5kIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgYHZvaWQgKnByaXZhdGVgIGNoYW5nZS4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgcHJpdmF0ZWAgaXMgdXNlZC4gRm9yIGV4YW1wbGUsIGluIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIEkgc2VlIGBwdXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZylgLiBIb3dldmVyLCB0aGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgY29kZSB3aGVyZSB0aGUgYHB2Y2NgIHBvaW50ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBmaWVsZCwgc28gbm8gY2hhbmdlIGluIGhvdyB0aGF0IGlzIGJlaW5nIGhhbmRsZWQuIEknbSBjYXJlZnVsbHkgY2hlY2tpbmcgdGhlIHBvdGVudGlhbCBmb3IgY2hhbmdlcyBpbiBzZW1hbnRpY3MsIGFuZCB2ZXJpZnlpbmcgaG93IHRoZSBkYXRhIHRoYXQgZ2V0cyByZXR1cm5lZCBmcm9tIGFueSBvZiB0aGVzZSBpb2N0bHMgaXMgc2V0LlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGVzZSBpb2N0bCBmdW5jdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgdGhlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gSXQgaXMgYSBzdHJhaWdodCByZWZhY3RvciB0aGF0IGNoYW5nZXMgdGhlIGFyZ3VtZW50cywgbm90IHRoZSBkYXRhIHRoZXkgcG9pbnQgdG8sIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuVGhpcyBsb29rcyBsaWtlIGEgcHVyZSByZWZhY3RvcmluZywgcHJpbWFyaWx5IGFyb3VuZCBjaGFuZ2luZyB0aGUgY2FsbCBzaWduYXR1cmVzIGFuZCBob3cgd2UgcGFzcyB0aGUgY29udGV4dCwgbW92aW5nIGZyb20gaW1wbGljaXRseSBwYXNzaW5nIGEgY2hhbm5lbCB0byBhbiBleHBsaWNpdCBwcml2YXRlIGNvbnRleHQuIFRoZSBvbmx5IHJlYWwgdnVsbmVyYWJpbGl0eSBJIGZvcmVzZWUgaGVyZSB3b3VsZCBiZSBhIHR5cGUgbWlzbWF0Y2ggb3IgYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSDigJMgd2hpY2ggc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBjYXVzZSBhIG1vcmUgZ2VuZXJhbCBmYXVsdC5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBjb2RlIHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTm93LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrOlxuXG4tICAgYE5lZWRzS01TQU46IGZhbHNlYFxuLSAgIGBLTVNBTlJlYXNvbmluZzogRGV0YWlsZWQgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5gXG5cbkxldCdzIGRvIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjIxLjQ1MTYwODcxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxgIHBvaW50ZXIuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwncyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHNpZ25hdHVyZSBhbmQgYXJndW1lbnQgcmVmYWN0b3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIG9yIHBhZGRpbmcgZmllbGRzLCBub3IgZG9lcyBpdCBhbHRlciBkYXRhIGNvcHlpbmcgbG9naWMgdG8gdXNlcnNwYWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvaW50ZXIgb3IgdHlwZSBtaXN1c2UgaW50cm9kdWNlZCBieSBzdWNoIGEgcmVmYWN0b3Igd291bGQgbWFuaWZlc3QgYXMgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdHlwZSBjb25mdXNpb24sIG9yIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 22:57:58 +0000 UTC FinishedAt: 2026-09-06 23:19:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP", "PPP_ASYNC", "PPP_SYNC_TTY", "PPPOE", "PPTP", "PPPOATM", "PPPOL2TP", "ATM", "L2TP" ], "series_id": "5e6bdad1-6c19-4400-9962-7e18b9752549" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_ioctl", "ppp_push", "ppp_fill_forward_path", "ppp_mp_explode", "__ppp_channel_push", "ppp_channel_bridge_input", "ppp_async_send", "ppp_async_ioctl", "ppp_sync_send", "ppp_sync_ioctl", "pppoe_xmit", "pppoe_fill_forward_path", "pptp_xmit", "pptp_ppp_ioctl", "pppoatm_send", "pppoatm_devppp_ioctl", "pppol2tp_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwmIzM5O3MgYHByaXZhdGVgIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbGAgcG9pbnRlci5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTk4ZjcwMzc4OTMxM2U1Yjg4NTk1OWYyZDVjNDFmYjFiYzk3ZDU0Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjM6MTc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbkBAIC05MSwxMyAmIzQzOzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxuIFx0XHRcdCAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcbkBAIC0zMjEsMTAgJiM0MzszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4mIzQzO1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuQEAgLTU1MCw5ICYjNDM7NTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICYjNDM7NzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwoY2hhbi1cdTAwM2Vwcml2YXRlLCBjbWQsIGFyZyk7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBjaC1cdTAwM2VjaGFuX3NlbSk7XG4gXHRcdH1cbiBcdFx0Z290byBvdXQ7XG5AQCAtMTYwMyw3ICYjNDM7MTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbiYjNDM7XHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyAmIzQzOzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyAmIzQzOzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuJiM0MztcdFx0XHQhY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIGZyYWcpKVxuIFx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBmcmFnKTtcbiBcdFx0cGNoLVx1MDAzZWhhZF9mcmFnID0gMTtcbiBcdFx0cCAmIzQzOz0gZmxlbjtcbkBAIC0yMTc1LDcgJiM0MzsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuJiM0MztcdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLVx1MDAzZXByaXZhdGUsIHNrYikpIHtcbiBcdFx0XHRcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xuIFx0XHRcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIHNrYik7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0yMzAwLDcgJiM0MzsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbiYjNDM7XHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAge1xuICAqIFByb3RvdHlwZXMuXG4gICovXG4gc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XG4tc3RhdGljIGludCBwcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZyk7XG4mIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjNDM7c3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuJiM0MztwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgJiM0Mzs0OTAsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgJiM0Mzs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiBzZW5kcyBQUFAgZnJhbWUgb3ZlciBQUFBvRSBzb2NrZXRcbiAgKlxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi1zdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSAmIzQzOzg5NSw5IEBAIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbiYjNDM7XHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSAmIzQzOzE0Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpwcHRwX3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgcHBwb3hfc29jayAqcG8sXG4gXHRyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbiB9XG4gXG4tc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybilcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbiYjNDM7c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgJiM0MzsyNywxMiBAQCBzdHJ1Y3QgcHBwX2NoYW5uZWw7XG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XG4gXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cbiBcdCAgIFJldHVybnMgMSBpZiBpdCB3YXMgYWNjZXB0ZWQsIDAgaWYgbm90LiAqL1xuLVx0aW50XHQoKnN0YXJ0X3htaXQpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiYjNDM7XHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiYjNDM7XHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4mIzQzO1x0XHRcdFx0ICAgICB2b2lkICopO1xuIH07XG4gXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcbmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jXG5pbmRleCA2ZGE1MmQxMmRmNjhlLi45MTMzMjRmOTY4NWY2IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9hdG0vcHBwb2F0bS5jXG5AQCAtOTEsMTEgJiM0Mzs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJiMzOTt0IHdhbnQgdG8gYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBkbyBpdCBmcm9tXG5AQCAtMjg2LDkgJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gY2hhbl90b19wdmNjKGNoYW4pO1xuJiM0MztcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4mIzQzO1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBQUFBJT0NHRkxBR1M6XG4tXHRcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4mIzQzO1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbiYjNDM7XHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uOWU5MzJmZGRhMzg3MiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uIHtcbiBcdHN0cnVjdCBzb2NrXHRcdCpfX3NrO1x0XHQvKiBDb3B5IG9mIC5zaywgZm9yIGNsZWFudXAgKi9cbiB9O1xuIFxuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNywxMSAmIzQzOzMyNywxMSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0aW50IHVobGVuLCBoZWFkcm9vbTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfQ09OTkVDVEVEKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQX0FTWU5DJiMzNDssCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFBPRSYjMzQ7LAogICAgJiMzNDtQUFRQJiMzNDssCiAgICAmIzM0O1BQUE9BVE0mIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O0wyVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwcF9tcF9leHBsb2RlJiMzNDssCiAgICAmIzM0O19fcHBwX2NoYW5uZWxfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX2FzeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2VfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHBvZV9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHRwX3htaXQmIzM0OywKICAgICYjMzQ7cHB0cF9wcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9zZW5kJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fZGV2cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCYjMzk7cyBwcml2YXRlIGRhdGEgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzb2NrZXRzLCB0dHkgbGluZSBkaXNjaXBsaW5lcywgYW5kIC9kZXYvcHBwIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIzOjE3OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCmluZGV4IGVhN2ZlOTYwOGZmZDYuLmUwYmE0NDhmMjk3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKQEAgLTkxLDEzICYjNDM7OTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTsKICAqIFByb3RvdHlwZXMuCiAgKi8KIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTsKLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogCiBzdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtMzIxLDEwICYjNDM7MzIwLDEwIEBAIHBwcF9hc3luY19pbml0KHZvaWQpCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludAotcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CkBAIC01NTAsOSAmIzQzOzU0OSw5IEBAIHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCkKICAqIGF0IHNvbWUgbGF0ZXIgdGltZS4KICAqLwogc3RhdGljIGludAotcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCiAJcHBwX2FzeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC03OTAsNyAmIzQzOzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCQljaGFuID0gcGNoLSZndDtjaGFuOwogCQkJZXJyID0gLUVOT1RUWTsKIAkJCWlmIChjaGFuICZhbXA7JmFtcDsgY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bCkKLQkJCQllcnIgPSBjaGFuLSZndDtvcHMtJmd0O2lvY3RsKGNoYW4sIGNtZCwgYXJnKTsKJiM0MzsJCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLSZndDtwcml2YXRlLCBjbWQsIGFyZyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtwY2gtJmd0O2NoYW5fc2VtKTsKIAkJfQogCQlnb3RvIG91dDsKQEAgLTE2MDMsNyAmIzQzOzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCWlmICghY2hhbi0mZ3Q7b3BzLSZndDtmaWxsX2ZvcndhcmRfcGF0aCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTsKJiM0MzsJcmV0dXJuIGNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLSZndDtwcml2YXRlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHsKQEAgLTE5MzIsNyAmIzQzOzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLCBza2IpOwomIzQzOwkJcmV0ID0gY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4tJmd0O3ByaXZhdGUsIHNrYik7CiAKIG91dDoKIAkJc3Bpbl91bmxvY2soJmFtcDtwY2gtJmd0O2Rvd25sKTsKQEAgLTIxNDIsNyAmIzQzOzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJLyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqLwogCQljaGFuID0gcGNoLSZndDtjaGFuOwogCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkgfHwKLQkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgZnJhZykpCiYjNDM7CQkJIWNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZhbXA7cGNoLSZndDtmaWxlLnhxLCBmcmFnKTsKIAkJcGNoLSZndDtoYWRfZnJhZyA9IDE7CiAJCXAgJiM0Mzs9IGZsZW47CkBAIC0yMTc1LDcgJiM0MzsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcCkKIAlpZiAocGNoLSZndDtjaGFuKSB7CiAJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cGNoLSZndDtmaWxlLnhxKSkgewogCQkJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtwY2gtJmd0O2ZpbGUueHEpOwotCQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4sIHNrYikpIHsKJiM0MzsJCQlpZiAoIXBjaC0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaC0mZ3Q7Y2hhbi0mZ3Q7cHJpdmF0ZSwgc2tiKSkgewogCQkJCS8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqLwogCQkJCXNrYl9xdWV1ZV9oZWFkKCZhbXA7cGNoLSZndDtmaWxlLnhxLCBza2IpOwogCQkJCWJyZWFrOwpAQCAtMjMwMCw3ICYjNDM7MjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC0mZ3Q7Y2hhbl9uZXQsIHBjaGItJmd0O2NoYW5fbmV0KSk7Ci0JaWYgKCFwY2hiLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoYi0mZ3Q7Y2hhbiwgc2tiKSkKJiM0MzsJaWYgKCFwY2hiLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoYi0mZ3Q7Y2hhbi0mZ3Q7cHJpdmF0ZSwgc2tiKSkKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIG91dGw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC04MSw5ICYjNDM7ODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7CiAgKiBQcm90b3R5cGVzLgogICovCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYXJnKTsKJiM0MztzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7CiBzdGF0aWMgaW50IHBwcF9zeW5jX3B1c2goc3RydWN0IHN5bmNwcHAgKmFwKTsKIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApOwpAQCAtMzEyLDkgJiM0MzszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludAotcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKJiM0MztwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCWludCBlcnIsIHZhbDsKIAl1MzIgYWNjbVs4XTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTQ5MSw5ICYjNDM7NDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlOwogCiAJcHBwX3N5bmNfcHVzaChhcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKQEAgLTg0MSw5ICYjNDM7ODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sCiAgKiBzZW5kcyBQUFAgZnJhbWUgb3ZlciBQUFBvRSBzb2NrZXQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHBwb2VfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCXN0cnVjdCBwcHBvZV9oZHIgKnBoOwpAQCAtODk1LDkgJiM0Mzs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiYjNDM7CQkJCSAgIHZvaWQgKnByaXZhdGUpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLSZndDtwcHBvZV9kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCmluZGV4IGE3OTdhMDYwNmY2YjQuLjhmNzE5MGQ3MDY3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwpAQCAtMTQ2LDkgJiM0MzsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLAogCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogfQogCi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwpAQCAtNTczLDEwICYjNDM7NTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKQogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9ICZhbXA7cG8tJmd0O3Byb3RvLnBwdHA7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaApAQCAtMjcsMTIgJiM0MzsyNywxMiBAQCBzdHJ1Y3QgcHBwX2NoYW5uZWw7CiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHsKIAkvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC4KIAkgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi8KLQlpbnQJKCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiYjNDM7CWludAkoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiAJLyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovCi0JaW50CSgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwomIzQzOwlpbnQJKCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCWludAkoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICopOwomIzQzOwkJCQkgICAgIHZvaWQgKik7CiB9OwogCiBzdHJ1Y3QgcHBwX2NoYW5uZWwgewpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uYwppbmRleCA2ZGE1MmQxMmRmNjhlLi45MTMzMjRmOTY4NWY2IDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtOTEsMTEgJiM0Mzs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKQogCXJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtJmd0O3VzZXJfYmFjayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICpjaGFuX3RvX3B2Y2MoY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQotewotCXJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChjaGFuLSZndDtwcml2YXRlKTsKLX0KLQogLyoKICAqIFdlIGNhbiYjMzk7dCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlCiAgKiBkb2VzbiYjMzk7dCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbQpAQCAtMjg2LDkgJiM0MzsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSkKICAqIGFzIHN1Y2Nlc3MsIGp1c3QgdG8gYmUgY2xlYXIgd2hhdCB3ZSYjMzk7cmUgcmVhbGx5IGRvaW5nLgogICovCiAjZGVmaW5lIERST1BfUEFDS0VUIDEKLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCWludCByZXQ7CiAKQEAgLTM2NiwxNiAmIzQzOzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKJiM0MztzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewomIzQzOwlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlOwomIzQzOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NHRkxBR1M6Ci0JCXJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIHB1dF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAljYXNlIFBQUElPQ1NGTEFHUzoKLQkJcmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS0mZ3Q7ZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykKLQkJICAgID8gLUVGQVVMVCA6IDA7CiYjNDM7CQlyZXR1cm4gZ2V0X3VzZXIocHZjYy0mZ3Q7ZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwOwogCX0KIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jCmluZGV4IGVmOGZkZmFmMDUxZDQuLjllOTMyZmRkYTM4NzIgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9wcHAuYwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7CiAJc3RydWN0IHNvY2sJCSpfX3NrOwkJLyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovCiB9OwogCi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsCkBAIC0zMjcsMTEgJiM0MzszMjcsMTEgQEAgc3RhdGljIGludCBwcHBvbDJ0cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sCiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXMKICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwogCXN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCWludCB1aGxlbiwgaGVhZHJvb207CiAKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stJmd0O3NrX3N0YXRlICZhbXA7IFBQUE9YX0NPTk5FQ1RFRCkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCwgaWRlbnRpZnkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgcGlucG9pbnQgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2Agc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIHRoZSBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9ucyB3aXRoaW4gYHBwcF9jaGFubmVsX29wc2AgYXJlIG5vdyB0YWtpbmcgYSBgdm9pZCAqcHJpdmF0ZWAgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgZnVsbCBgc3RydWN0IHBwcF9jaGFubmVsICpgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2FsbGVkLgoKVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBwcmV0dHkgd2lkZS1yYW5naW5nLCB0b3VjaGluZyBhIGxvdCBvZiB0aGUgUFBQIGltcGxlbWVudGF0aW9uczogYHBwcF9hc3luYy5jYCwgYHBwcF9nZW5lcmljLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYHBwdHAuY2AsIHRoZSBpbmNsdWRlIGZpbGUsIGBwcHBvYXRtLmNgIGFuZCBgbDJ0cF9wcHAuY2AuIFRoYXQgZ2l2ZXMgbWUgYSBjbHVlIGl04oCZcyBwcm9iYWJseSBwcmV0dHkgaW1wb3J0YW50LiBOb3csIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCBhbmQgZGV0ZXJtaW5lIGhvdyB0byBzdGFydCBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIG15IHRydXN0eSBgZ3JlcHBlcmAgdG9vbCB0byBzZWFyY2ggZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBhbmQgb3RoZXIgY2FsbCBzaXRlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBicmVhZHRoIGFuZCBkZXB0aCBvZiB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9jaGFubmVsX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTAyPXN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDU6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgYXN5bmNfb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTEtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkzLVx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM9ODk2PXN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MTgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MTk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXHQuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHB0cF9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNTEtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHB0cF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz01NzY9c3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM6NjA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNy1cdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxuLS1cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0yNT1zdHJ1Y3QgcHBwX2NoYW5uZWw7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6Mjc6c3RydWN0IHBwcF9jaGFubmVsX29wcyB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjgtXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9Mzg9c3RydWN0IHBwcF9jaGFubmVsIHtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cdHZvaWRcdFx0KnByaXZhdGU7XHQvKiBjaGFubmVsIHByaXZhdGUgZGF0YSAqL1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjQwOlx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC00MS1cdGludFx0XHRtdHU7XHRcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTM2ND1zdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LVxubmV0L2F0bS9wcHBvYXRtLmM6Mzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjYtXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjEyNzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFBQUCBJbXBsZW1lbnRhdGlvbiBFeHBsb3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFBQUCBjaGFubmVsIHN0dWZmLCBhbmQgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGUga2VybmVsLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgaW1wbGVtZW50YXRpb25zLCBiZXlvbmQgdGhlIG9idmlvdXMgVENQL0lQIHJlYWxtPyBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBJU0ROLCBvciBtYXliZSBzb21lIG90aGVyIG9ic2N1cmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGxldmVyYWdlcyBhIHNpbWlsYXIgY2hhbm5lbC1iYXNlZCBhcHByb2FjaC4gSXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHJlYWxseSBpbnRlcmVzdGVkIGluLCBub3QganVzdCB0aGUgUFBQIGFzIGEgcHJvdG9jb2wuCgpUaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSYjMzk7bGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBhIFBQUCBjaGFubmVsIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGxvb2sgZm9yIHVzYWdlcyBvZiBgcHBwX3JlZ2lzdGVyX2NoYW5uZWxgLiBUaGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBoYWxsbWFyayBvZiBhbnkgY29kZSB0aGF0JiMzOTtzIHRyeWluZyB0byBob29rIGludG8gdGhhdCBmcmFtZXdvcmsuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBJJiMzOTtsbCBhbHNvIHNjYW4gZm9yIGluc3RhbmNlcyBvZiBgc3RydWN0IHBwcF9jaGFubmVsYC4gVGhhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBpbnRlcmZhY2VzLCBhbmQgaG93IGRpZmZlcmVudCBtb2R1bGVzIG1pZ2h0IGludGVyYWN0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9yZWdpc3Rlcl9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q9NjY9VGhlIGdlbmVyaWMgUFBQIGxheWVyIHByb3ZpZGVzIHNldmVuIGZ1bmN0aW9ucyB0byBjaGFubmVsczpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtNjctXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjY4OiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtNjktICBub3RpZnkgdGhlIFBQUCBnZW5lcmljIGxheWVyIG9mIGl0cyBwcmVzZW5jZS4gIEZvciBleGFtcGxlLCBzZXR0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD0xMjk9aG93ZXZlciBpdCB3aXNoZXMuICBUaGUgY2hhbm5lbCBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgYGBtdHVgYCBhbmRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MTMwOmBgaGRybGVuYGAgZmllbGRzIGJlZm9yZSBjYWxsaW5nIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIG5vdCBjaGFuZ2VcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMTMxLXRoZW0gdW50aWwgYWZ0ZXIgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuICBUaGUgYGBtdHVgYCBmaWVsZFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q9MjEwPVRoZSBnZW5lcmljIGxheWVyIHJlcXVpcmVzIHRoZXNlIGd1YXJhbnRlZXMgZnJvbSB0aGUgY2hhbm5lbDpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTIxMi0qIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MjEzOiAgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMjE0LSAgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjAtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjIyMToqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBtdXN0IGJlIGNhbGxlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjItICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTExOT1wcHBfYXN5bmN0dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNTItXHRhcC1cdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTUzOlx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXHUwMDI2YXAtXHUwMDNlY2hhbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTU0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0yNzQyPXBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMjkwMC0vKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyOTAxOmludCBwcHBfcmVnaXN0ZXJfY2hhbm5lbChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTAyLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNjY1PUVYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjY6RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfY2hhbm5lbCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNjY3LUVYUE9SVF9TWU1CT0wocHBwX3VucmVnaXN0ZXJfY2hhbm5lbCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0xNDktXHRhcC1cdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNTA6XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZhcC1cdTAwM2VjaGFuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE1MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00MTU9c3RhdGljIGludCBwcHRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTQ2OS1cdHBvLVx1MDAzZWNoYW4uZGlyZWN0X3htaXQgPSB0cnVlO1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYzo0NzA6XHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFx1MDAyNnBvLVx1MDAzZWNoYW4pO1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy00NzEtXHRpZiAoZXJyb3IpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NjE9ZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTYzLS8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdC4gKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo2NDpleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC02NS1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MTAtXHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTE6XHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xubmV0L2F0bS9wcHBvYXRtLmMtNDEyLVx0aWYgKGVyciAhPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhpbmVzcyBBc3Nlc3NtZW50OiBQUFAgQ2hhbm5lbCBPcGVyYXRpb25zIFJlZmFjdG9yaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgYHBwcF9jaGFubmVsX29wc2AgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgaW50ZXJmYWNlIOKAkyBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBhcmUgbm93IHJlY2VpdmluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYC4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBiaXQgb2YgY29kZTogY29yZSBQUFAgKGBwcHBfZ2VuZXJpYy5jYCksIGFzeW5jL3N5bmMgdHR5IGRyaXZlcnMsIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gTGV0JiMzOTtzIGNvbnN1bHQgdGhlIHJlbGV2YW50IGd1aWRlbGluZXMuCgpTZWN0aW9uIDEgY2xlYXJseSBzdGF0ZXMgdGhhdCB3ZSBzaG91bGRuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgJiMzNDtObyBGdW5jdGlvbmFsIENoYW5nZSYjMzQ7IG9yICYjMzQ7UmVmYWN0b3JpbmcmIzM0OyBjbGFpbXMuIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgdG91Y2hlZCBkdXJpbmcgYSByZWZhY3RvciwgaXQgKm11c3QqIGJlIGZ1enplZC4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpczogYW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgJiMzNDtXb3J0aEZ1enppbmcgPSB0cnVlLiYjMzQ7CgpHaXZlbiB0aGF0IFBQUCBhbmQgaXRzIGFzc29jaWF0ZWQgZHJpdmVycyAoYXN5bmMvc3luYyB0dHksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBMMlRQKSBhcmUgc29mdHdhcmUgbmV0d29ya2luZyBkcml2ZXJzIGFjY2Vzc2VkIHZpYSBzdGFuZGFyZCBzeXNjYWxscyBsaWtlIHNvY2tldHMsIGlvY3RscyBvbiBgL2Rldi9wcHBgLCBhbmQgdHR5IGxpbmUgZGlzY2lwbGluZXMsIHRoZXkgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgY2FuIHJlYWRpbHkgY29uc3RydWN0IHRlc3QgY2FzZXMgYW5kIGludGVyYWN0IHdpdGggdGhlc2UgcHJvdG9jb2xzLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgYWxsIHRoZSB0b3VjaGVkIGNvZGUuIFRoaXMgbWVhbnMgd2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwdHAuY2AsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIHRob3NlIHBhdGhzIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwcF9hc3luY3xwcHBfc3luY3R0eXxwcHBvZXxwcHRwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTA0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9ODE9Y29uZmlnIFBQUF9NUFBFXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctODgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4OTpcdCAgU2VlIGh0dHA6Ly9wcHRwY2xpZW50LnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIG9uXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05MC1cdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTE2PWNvbmZpZyBQUFBPRVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEyMi1cdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTIzOlx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEyNC1cdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEyNTpcdCAgXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXHUwMDNlLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTI2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2OC1cdCAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgcHBwZCBwbHVnaW4gdG8gd29yayBpbiBjbGllbnQgbW9kZSBvclxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTY5Olx0ICBtb2RpZmllZCBwcHRwZCAocG9wdG9wKSB0byB3b3JrIGluIHNlcnZlciBtb2RlLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTcwOlx0ICBTZWUgaHR0cDovL2FjY2VsLXBwdHAuc291cmNlZm9yZ2UubmV0LyBmb3IgaW5mb3JtYXRpb24gaG93IHRvXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzEtXHQgIHV0aWxpemUgdGhpcyBtb2R1bGUuXG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1BQUCkgJiM0Mzs9IHBwcF9nZW5lcmljLm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QUFBfQVNZTkMpICYjNDM7PSBwcHBfYXN5bmMub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSAmIzQzOz0gYnNkX2NvbXAub1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1BQUE9FKSAmIzQzOz0gcHBwb2Uub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QUFRQKSAmIzQzOz0gcHB0cC5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg0PW1vZHVsZV9wYXJhbShmbGFnX3RpbWUsIGludCwgMCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6ODU6TU9EVUxFX1BBUk1fREVTQyhmbGFnX3RpbWUsIFwmIzM0O3BwcF9hc3luYzogaW50ZXJ2YWwgYmV0d2VlbiBmbGFnZ2VkIHBhY2tldHMgKGluIGNsb2NrIHRpY2tzKVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtODYtTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1BQUCBhc3luYyBzZXJpYWwgY2hhbm5lbCBtb2R1bGVcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz04OD1NT0RVTEVfQUxJQVNfTERJU0MoTl9QUFApO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05Mi0gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5MzpzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ6c3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NTpzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk2OnN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTc6c3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05OC1cdFx0XHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk5OnN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDA6c3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDEtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwNT1zdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2Olx0LnN0YXJ0X3htaXQgPSBwcHBfYXN5bmNfc2VuZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMDc6XHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDgtfTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxMTk6cHBwX2FzeW5jdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMjAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDUtXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmFwLVx1MDAzZXJxdWV1ZSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTQ2Olx0dGFza2xldF9zZXR1cChcdTAwMjZhcC1cdTAwM2V0c2ssIHBwcF9hc3luY19wcm9jZXNzKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDctXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE3MjpwcHBfYXN5bmN0dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xOTM9c3RhdGljIHNzaXplX3RcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxOTQ6cHBwX2FzeW5jdHR5X3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHU4ICpidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTk1LVx0XHQgIHNpemVfdCBjb3VudCwgdm9pZCAqKmNvb2tpZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIwND1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjIwNTpwcHBfYXN5bmN0dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHU4ICpidWYsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjA2LVx0XHQgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIxNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MjE3OnBwcF9hc3luY3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yMTgte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNDMtXHRcdGlmIChhcmcgPT0gVENJT0ZMVVNIIHx8IGFyZyA9PSBUQ09GTFVTSClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNDQ6XHRcdFx0cHBwX2FzeW5jX2ZsdXNoX291dHB1dChhcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjQ1LVx0XHRlcnIgPSBuX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBjbWQsIGFyZyk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI2ND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI2NTpwcHBfYXN5bmN0dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqY2ZsYWdzLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI2Ni1cdFx0ICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI3My1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFwLVx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI3NDpcdHBwcF9hc3luY19pbnB1dChhcCwgYnVmLCBjZmxhZ3MsIGNvdW50KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNzUtXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFwLVx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0yODE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyODI6cHBwX2FzeW5jdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI4My17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI5ND1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX2xkaXNjID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yOTctXHQubmFtZVx0PSBcJiMzNDtwcHBcJiMzNDssXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6Mjk4Olx0Lm9wZW5cdD0gcHBwX2FzeW5jdHR5X29wZW4sXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6Mjk5Olx0LmNsb3NlXHQ9IHBwcF9hc3luY3R0eV9jbG9zZSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDA6XHQucmVhZFx0PSBwcHBfYXN5bmN0dHlfcmVhZCxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDE6XHQud3JpdGVcdD0gcHBwX2FzeW5jdHR5X3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwMjpcdC5pb2N0bFx0PSBwcHBfYXN5bmN0dHlfaW9jdGwsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAzOlx0LnJlY2VpdmVfYnVmID0gcHBwX2FzeW5jdHR5X3JlY2VpdmUsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA0Olx0LndyaXRlX3dha2V1cCA9IHBwcF9hc3luY3R0eV93YWtldXAsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMzA1LX07XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMwNz1zdGF0aWMgaW50IF9faW5pdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwODpwcHBfYXN5bmNfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMwOS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMyMj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzIzOnBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMjQte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTQtICovXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NDE1OnN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTYte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjctXHQvKiB0cnkgdG8gcHVzaCBtb3JlIHN0dWZmIG91dCAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQyODpcdGlmICh0ZXN0X2JpdChYTUlUX1dBS0VVUCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncykgXHUwMDI2XHUwMDI2IHBwcF9hc3luY19wdXNoKGFwKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjktXHRcdHBwcF9vdXRwdXRfd2FrZXVwKFx1MDAyNmFwLVx1MDAzZWNoYW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz00NTI9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQ1MzpwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDU0LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NTUxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo1NTI6cHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTMte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTU2Olx0cHBwX2FzeW5jX3B1c2goYXApO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU1Ny1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTYyLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU2MzpcdHBwcF9hc3luY19wdXNoKGFwKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NjQtXHRyZXR1cm4gMTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NTcwPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo1NzE6cHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NzIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDMtXHRcdGlmIChhcC1cdTAwM2VvcHRyIFx1MDAzZT0gYXAtXHUwMDNlb2xpbSBcdTAwMjZcdTAwMjYgYXAtXHUwMDNldHBrdCkge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjYwNDpcdFx0XHRpZiAocHBwX2FzeW5jX2VuY29kZShhcCkpIHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDUtXHRcdFx0XHQvKiBmaW5pc2hlZCBwcm9jZXNzaW5nIGFwLVx1MDAzZXRwa3QgKi9cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9NjUwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NjUxOnBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcClcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02NTIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz03NTQ9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo3NTU6cHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTc1Ni17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg3Mz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05MzgtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM5OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBfYXN5bmNfY2xlYW51cCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0MC17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0My1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NDQ6bW9kdWxlX2luaXQocHBwX2FzeW5jX2luaXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjk0NTptb2R1bGVfZXhpdChwcHBfYXN5bmNfY2xlYW51cCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTAxPXBwcF9wcmludF9idWZmZXIgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IF9fdTggKmJ1ZiwgaW50IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy1cdGlmIChuYW1lICE9IE5VTEwpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDQ6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3BwcF9zeW5jdHR5OiAlcywgY291bnQgPSAlZFxcblwmIzM0OywgbmFtZSwgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA1LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwNz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDg6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yMDkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjkyLVx0LndyaXRlXHQ9IHBwcF9zeW5jX3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MjkzOlx0LmlvY3RsXHQ9IHBwcF9zeW5jdHR5X2lvY3RsLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjk0LVx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNS0gKlx0XHQoT2gsIEJUVywgdGhpcyBvbmUgaXMgWVlNTURELCBpbiBjYXNlIHlvdSB3ZXJlIHdvbmRlcmluZyAuLi4pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjogKiAyMjAxMDIgOlx0Rml4IG1vZHVsZSB1c2UgY291bnQgb24gZmFpbHVyZSBpbiBwcHBvZV9jcmVhdGUsIHBwcG94X3NrIC1hY21lXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNy0gKiAwMzA3MDAgOlx0Rml4ZWQgY29ubmVjdCBsb2dpYyB0byBhbGxvdyBmb3IgZGlzY29ubmVjdC5cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMS0gKiAwNDA4MDAgOlx0UmVzcGVjdCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBvbiBuZXQtZGV2aWNlcy5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyOiAqIDIwMDgwMCA6XHRmaXgga2ZyZWUoc2tiKSBpbiBwcHBvZV9yY3YgKGFjbWUpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMy0gKlx0XHRNb2R1bGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIGluIHRoZSByaWdodCBzcG90IG5vdyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI0LSAqXHRcdGd1YXJkcyBhZ2FpbnN0IHNvY2tfcHV0IG5vdCBhY3R1YWxseSBmcmVlaW5nIHRoZSBza1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU6ICpcdFx0aW4gcHBwb2VfcmVsZWFzZS5cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI2LSAqIDA1MTAwMCA6XHRJbml0aWFsaXphdGlvbiBjbGVhbnVwLlxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI4LSAqIDA1MDEwMSA6XHRGaXggUEFEVCBwcm9jZXNzaW5nLlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjk6ICogMTQwNTAxIDpcdFVzZSBwcHBvZV9yY3ZfY29yZSB0byBoYW5kbGUgYWxsIGJhY2tsb2cuIChBbGV4ZXkpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMC0gKiAxNzA3MDEgOlx0RG8gbm90IGxvY2tfc29jayB3aXRoIHJ3bG9jayBoZWxkLiAoRGF2ZU0pXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzItICpcdFx0bG9ja2VkLiAoRGF2ZU0pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMzogKlx0XHRJZ25vcmUgcmV0dXJuIHZhbHVlIG9mIGRldl9xdWV1ZV94bWl0IGluIF9fcHBwb2VfeG1pdFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQtICpcdFx0b3IgZWxzZSB3ZSBtYXkga2ZyZWUgYW4gU0tCIHR3aWNlLiAoRGF2ZU0pXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNTogKiAxOTA3MDEgOlx0V2hlbiBkb2luZyBjb3BpZXMgb2Ygc2tiJiMzOTtzIGluIF9fcHBwb2VfeG1pdCwgYWx3YXlzIGRlbGV0ZVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzYtICpcdFx0dGhlIG9yaWdpbmFsIHNrYiB0aGF0IHdhcyBwYXNzZWQgaW4gb24gc3VjY2VzcywgbmV2ZXIgb25cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy04Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MS0vKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkyOnN0YXRpYyB1bnNpZ25lZCBpbnQgcHBwb2VfbmV0X2lkIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MzpzdHJ1Y3QgcHBwb2VfbmV0IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk0LVx0Lypcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMTQ9c3RhdGljIGlubGluZSBib29sIHN0YWdlX3Nlc3Npb24oX19iZTE2IHNpZClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMTgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIwLXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjEyMTpcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjItfVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIzLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTI1LXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMjk6c3RhdGljIGlubGluZSBpbnQgY21wX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMzAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTEzOD1zdGF0aWMgdTggaGFzaF9pdGVtKF9fYmUxNiBzaWQsIGNvbnN0IHU4IGFkZHJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1Ny0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE1ODpzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNTktXHRcdFx0XHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNjUtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjY6XHRcdGlmIChjbXBfYWRkcihcdTAwMjZyZXQtXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNjc6XHRcdCAgICByZXQtXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTY4LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTc1LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc2OnN0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTc3LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE3ODpcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3OS1cdHN0cnVjdCBwcHBveF9zb2NrICpyZXQsICpmaXJzdDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODMtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxODQ6XHRcdGlmIChjbXBfMl9hZGRyKFx1MDAyNnJldC1cdTAwM2VwcHBvZV9wYSwgXHUwMDI2cG8tXHUwMDNlcHBwb2VfcGEpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTg1Olx0XHQgICAgcmV0LVx1MDAzZXBwcG9lX2lmaW5kZXggPT0gcG8tXHUwMDNlcHBwb2VfaWZpbmRleClcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE4Ni1cdFx0XHRyZXR1cm4gLUVBTFJFQURZO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE5Ni1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE5NzpzdGF0aWMgdm9pZCBfX2RlbGV0ZV9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTk4LVx0XHRcdFx0XHRjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDYtXHR3aGlsZSAocmV0KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDc6XHRcdGlmIChjbXBfYWRkcihcdTAwMjZyZXQtXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDg6XHRcdCAgICByZXQtXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDktXHRcdFx0c3RydWN0IHBwcG94X3NvY2sgKm5leHQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI2LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjI3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmdldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI4LVx0XHRcdFx0XHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMzgtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMzk6c3RhdGljIGlubGluZSB2b2lkIGRlbGV0ZV9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjQwLVx0XHRcdFx0XHRjaGFyICphZGRyLCBpbnQgaWZpbmRleClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTMtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyNTQ6c3RhdGljIHZvaWQgcHBwb2VfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTUte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU2Olx0c3RydWN0IHBwcG9lX25ldCAqcG47XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTctXHRpbnQgaTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1OC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI1OTpcdHBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjAtXHRzcGluX2xvY2soXHUwMDI2cG4tXHUwMDNlaGFzaF9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjYtXHRcdHdoaWxlIChwbykge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjY3Olx0XHRcdHdoaWxlIChwbyBcdTAwMjZcdTAwMjYgcG8tXHUwMDNlcHBwb2VfZGV2ICE9IGRldikge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjY4LVx0XHRcdFx0cG8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBvLVx1MDAzZW5leHQsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjg4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjg5Olx0XHRcdGlmIChwby1cdTAwM2VwcHBvZV9kZXYgPT0gZGV2IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkwLVx0XHRcdCAgICBzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5Mi1cdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyOTM6XHRcdFx0XHRwby1cdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjk0LVx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMwNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMwNTpcdFx0XHRCVUdfT04ocHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSkgPT0gTlVMTCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMDYtXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnBuLVx1MDAzZWhhc2hfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzEzLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzE0OnN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMxNS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI5LVx0XHQvKiBGaW5kIGV2ZXJ5IHNvY2tldCBvbiB0aGlzIGRldmljZSBhbmQga2lsbCBpdC4gKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMzMDpcdFx0cHBwb2VfZmx1c2hfZGV2KGRldik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzEtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTMzOS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM0MDpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwcG9lX25vdGlmaWVyID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQxOlx0Lm5vdGlmaWVyX2NhbGwgPSBwcHBvZV9kZXZpY2VfZXZlbnQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNDItfTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNDgtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQ5OnN0YXRpYyBpbnQgcHBwb2VfcmN2X2NvcmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzUwLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNzYtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mzc3OnN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zNzgtXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzc5LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM4MDpcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzgxLVx0c3RydWN0IHBwcG94X3NvY2sgKnBvO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgyOlx0c3RydWN0IHBwcG9lX25ldCAqcG47XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zODMtXHRpbnQgbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM5Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM5ODpcdHBoID0gcHBwb2VfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zOTktXHRsZW4gPSBudG9ocyhwaC1cdTAwM2VsZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQxMy1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQxNDpcdHBoID0gcHBwb2VfaGRyKHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTU6XHRwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDE2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQyOC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQyOTpzdGF0aWMgdm9pZCBwcHBvZV91bmJpbmRfc29ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMC17XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MzEtXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBwcG94X3NvY2ssXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzI6XHRcdFx0XHRcdCAgICAgcHJvdG8ucHBwb2UucGFkdF93b3JrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMy1cdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnBvLVx1MDAzZXNrO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzNS1cdGxvY2tfc29jayhzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzY6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0Mzc6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQzODpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzOS1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDUxOnN0YXRpYyBpbnQgcHBwb2VfZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ1Mi1cdFx0XHQgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTQte1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDU1Olx0c3RydWN0IHBwcG9lX2hkciAqcGg7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTYtXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTc6XHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ1OC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NjUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NjY6XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY3LVx0XHRnb3RvIGFib3J0O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDY5Olx0cGggPSBwcHBvZV9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3MC1cdGlmIChwaC1cdTAwM2Vjb2RlICE9IFBBRFRfQ09ERSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzItXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NzM6XHRwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDc0LVx0cG8gPSBnZXRfaXRlbShwbiwgcGgtXHUwMDNlc2lkLCBldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsIGRldi1cdTAwM2VpZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3NS1cdGlmIChwbylcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ3NjpcdFx0aWYgKCFzY2hlZHVsZV93b3JrKFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwcG9lLnBhZHRfd29yaykpXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzctXHRcdFx0c29ja19wdXQoXHUwMDI2cG8tXHUwMDNlc2spO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4NC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ4NTpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lc19wdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDg2LVx0LnR5cGVcdD0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyksXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0ODc6XHQuZnVuY1x0PSBwcHBvZV9yY3YsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00ODgtfTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ5MDpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDkxLVx0LnR5cGVcdD0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX0RJU0MpLFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDkyOlx0LmZ1bmNcdD0gcHBwb2VfZGlzY19yY3YsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTMtfTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5NC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ5NTpzdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTYtXHQubmFtZVx0ICA9IFwmIzM0O1BQUE9FXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUwMC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUwMTpzdGF0aWMgdm9pZCBwcHBvZV9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MDIte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxMC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUxMTpzdGF0aWMgaW50IHBwcG9lX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTEyLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MTQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MTU6XHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfUFBQT1gsIEdGUF9LRVJORUwsIFx1MDAyNnBwcG9lX3NrX3Byb3RvLCBrZXJuKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxNi1cdGlmICghc2spXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTIyLVx0c29jay1cdTAwM2VzdGF0ZVx0PSBTU19VTkNPTk5FQ1RFRDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyMzpcdHNvY2stXHUwMDNlb3BzXHQ9IFx1MDAyNnBwcG9lX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNC1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNTpcdHNrLVx1MDAzZXNrX2JhY2tsb2dfcmN2XHQ9IHBwcG9lX3Jjdl9jb3JlO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTI2Olx0c2stXHUwMDNlc2tfZGVzdHJ1Y3RcdFx0PSBwcHBvZV9kZXN0cnVjdDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNy1cdHNrLVx1MDAzZXNrX3N0YXRlXHRcdD0gUFBQT1hfTk9ORTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzEtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MzI6XHRJTklUX1dPUksoXHUwMDI2cHBwb3hfc2soc2spLVx1MDAzZXByb3RvLnBwcG9lLnBhZHRfd29yayxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUzMzpcdFx0ICBwcHBvZV91bmJpbmRfc29ja193b3JrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUzNC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1Mzg6c3RhdGljIGludCBwcHBvZV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01Mzkte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU0MS1cdHN0cnVjdCBwcHBveF9zb2NrICpwbztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU0MjpcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQzLVx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NTY6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NTc6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU1ODpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU1OS1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NjYtXHRuZXQgPSBzb2NrX25ldChzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1Njc6XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTY4LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3MC1cdCAqIHByb3RlY3QgXCYjMzQ7cG9cJiMzNDsgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXNcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU3MTpcdCAqIG9uIHBwcG9lX2ZsdXNoX2RldlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTcyLVx0ICovXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzM6XHRkZWxldGVfaXRlbShwbiwgcG8tXHUwMDNlcHBwb2VfcGEuc2lkLCBwby1cdTAwM2VwcHBvZV9wYS5yZW1vdGUsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzQ6XHRcdCAgICBwby1cdTAwM2VwcHBvZV9pZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3NS1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1ODU6c3RhdGljIGludCBwcHBvZV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODYtXHRcdFx0IGludCBzb2NrYWRkcl9sZW4sIGludCBmbGFncylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01OTEtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU5MjpcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTkzLVx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02MDgtXHRpZiAoKHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAyNiBQUFBPWF9DT05ORUNURUQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjA5Olx0ICAgICBzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxMC1cdFx0Z290byBlbmQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjE0LVx0aWYgKChzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfREVBRCkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MTU6XHQgICAgICFzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxNi1cdFx0Z290byBlbmQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIwLVx0LyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjIxOlx0aWYgKHN0YWdlX3Nlc3Npb24ocG8tXHUwMDNlcHBwb2VfcGEuc2lkKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIyLVx0XHRwcHBveF91bmJpbmRfc29jayhzayk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjM6XHRcdHBuID0gcHBwb2VfcGVybmV0KHNvY2tfbmV0KHNrKSk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjQ6XHRcdGRlbGV0ZV9pdGVtKHBuLCBwby1cdTAwM2VwcHBvZV9wYS5zaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjU6XHRcdFx0ICAgIHBvLVx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgcG8tXHUwMDNlcHBwb2VfaWZpbmRleCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjY6XHRcdGlmIChwby1cdTAwM2VwcHBvZV9kZXYpIHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYyNzpcdFx0XHRkZXZfcHV0KHBvLVx1MDAzZXBwcG9lX2Rldik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Mjg6XHRcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyOS1cdFx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMwLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjMxOlx0XHRwby1cdTAwM2VwcHBvZV9pZmluZGV4ID0gMDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYzMjpcdFx0bWVtc2V0KFx1MDAyNnBvLVx1MDAzZXBwcG9lX3BhLCAwLCBzaXplb2YocG8tXHUwMDNlcHBwb2VfcGEpKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYzMy1cdFx0bWVtc2V0KFx1MDAyNnBvLVx1MDAzZWNoYW4sIDAsIHNpemVvZihwby1cdTAwM2VjaGFuKSk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQwLVx0LyogUmUtYmluZCBpbiBzZXNzaW9uIHN0YWdlIG9ubHkgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0MTpcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVx1MDAzZXNhX2FkZHIucHBwb2Uuc2lkKSkge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQyLVx0XHRlcnJvciA9IC1FTk9ERVY7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDMtXHRcdG5ldCA9IHNvY2tfbmV0KHNrKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0NDpcdFx0ZGV2ID0gZGV2X2dldF9ieV9uYW1lKG5ldCwgc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5kZXYpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ1LVx0XHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NDg6XHRcdHBvLVx1MDAzZXBwcG9lX2RldiA9IGRldjtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0OTpcdFx0cG8tXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjUwOlx0XHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjUxLVx0XHRpZiAoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpIHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTU6XHRcdG1lbWNweShcdTAwMjZwby1cdTAwM2VwcHBvZV9wYSxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY1NjpcdFx0ICAgICAgIFx1MDAyNnNwLVx1MDAzZXNhX2FkZHIucHBwb2UsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTc6XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY1OC1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjQtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NjU6XHRcdHBvLVx1MDAzZWNoYW4uaGRybGVuID0gKHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAmIzQzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY2LVx0XHRcdFx0ICAgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjctXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2Njg6XHRcdHBvLVx1MDAzZWNoYW4ubXR1ID0gZGV2LVx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjktXHRcdHBvLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHNrO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjcwOlx0XHRwby1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjcxLVx0XHRwby1cdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXHRcdGlmIChlcnJvcikge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1Olx0XHRcdGRlbGV0ZV9pdGVtKHBuLCBwby1cdTAwM2VwcHBvZV9wYS5zaWQsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzY6XHRcdFx0XHQgICAgcG8tXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBwby1cdTAwM2VwcHBvZV9pZmluZGV4KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3Ny1cdFx0XHRnb3RvIGVycl9wdXQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjgyLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjgzOlx0cG8tXHUwMDNlbnVtID0gc3AtXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQ7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02ODQtXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg4LWVycl9wdXQ6XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2ODk6XHRpZiAocG8tXHUwMDNlcHBwb2VfZGV2KSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2OTA6XHRcdGRldl9wdXQocG8tXHUwMDNlcHBwb2VfZGV2KTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY5MTpcdFx0cG8tXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTUtXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2OTY6c3RhdGljIGludCBwcHBvZV9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTctXHRcdCAgaW50IHBlZXIpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFUTSBhbmQgTDJUUCBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrZXkgZmlsZXMsIGJlZ2lubmluZyB3aXRoIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIGJvdGggQVRNIGFuZCBMMlRQOiBzcGVjaWZpY2FsbHksIGBuZXQvYXRtL01ha2VmaWxlYCwgYG5ldC9hdG0vS2NvbmZpZ2AsIGBuZXQvbDJ0cC9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBidWlsZCBpbnN0cnVjdGlvbnMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIG9mIEFUTSBhbmQgTDJUUCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0aGUgc3Vic2VxdWVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwb2F0bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9NYWtlZmlsZT0xMD1hdG0tJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xubmV0L2F0bS9NYWtlZmlsZS0xMS1cbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICYjNDM7PSBwcHBvYXRtLm9cbi0tXG5uZXQvYXRtL2lvY3RsLmM9NDM9c3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvYXRtL2lvY3RsLmMtOTQtXHRcdGNhc2UgQVRNX0JBQ0tFTkRfUFBQOlxubmV0L2F0bS9pb2N0bC5jOjk1Olx0XHRcdHJlcXVlc3RfbW9kdWxlKFwmIzM0O3BwcG9hdG1cJiMzNDspO1xubmV0L2F0bS9pb2N0bC5jLTk2LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXG5uZXQvYXRtL3BwcG9hdG0uYy0zLVxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxubmV0L2F0bS9wcHBvYXRtLmM6NTA6ZW51bSBwcHBvYXRtX2VuY2FwcyB7XG5uZXQvYXRtL3BwcG9hdG0uYy01MS1cdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNTUtXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xubmV0L2F0bS9wcHBvYXRtLmMtNTctXHRzdHJ1Y3QgYXRtX3ZjY1x0KmF0bXZjYztcdC8qIFZDQyBkZXNjcmlwdG9yICovXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNjItXHRcdFx0XHRcdC8qIGtlZXAgb2xkIHB1c2gvcG9wIGZvciBkZXRhY2hpbmcgKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlx0ZW51bSBwcHBvYXRtX2VuY2FwcyBlbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy02NC1cdGF0b21pY190IGluZmxpZ2h0O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jPTg2PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBwcGxsY1s2XSA9IHsgMHhGRSwgMHhGRSwgMHgwMywgMHhDRiwgMHhDMCwgMHgyMSB9O1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTg4LVxubmV0L2F0bS9wcHBvYXRtLmM6ODk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmF0bXZjY190b19wdmNjKGNvbnN0IHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo5MTpcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTkyLX1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy05OC0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjk5OnN0YXRpYyB2b2lkIHBwcG9hdG1fd2FrZXVwX3NlbmRlcihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDAte1xubmV0L2F0bS9wcHBvYXRtLmM6MTAxOlx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gZnJvbV90YXNrbGV0KHB2Y2MsIHQsIHdha2V1cF90YXNrbGV0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEwMi1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDUtXG5uZXQvYXRtL3BwcG9hdG0uYzoxMDY6c3RhdGljIHZvaWQgcHBwb2F0bV9yZWxlYXNlX2NiKHN0cnVjdCBhdG1fdmNjICphdG12Y2MpXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDcte1xubmV0L2F0bS9wcHBvYXRtLmM6MTA4Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbm5ldC9hdG0vcHBwb2F0bS5jLTEwOS1cbm5ldC9hdG0vcHBwb2F0bS5jLTExMC1cdC8qXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTE6XHQgKiBBcyBpbiBwcHBvYXRtX3BvcCgpLCBpdCYjMzk7cyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2Vcbm5ldC9hdG0vcHBwb2F0bS5jOjExMjpcdCAqIHRoZSB3YWtldXAgKmNhbiYjMzk7dCogcmFjZSB3aXRoIHBwcG9hdG1fc2VuZCgpLiBUaGV5IGJvdGggaG9sZCB0aGUgUFBQXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTMtXHQgKiBjaGFubmVsJiMzOTtzIC1cdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxubmV0L2F0bS9wcHBvYXRtLmM6MTE0Olx0ICogd2hpY2ggbGVhZHMgdG8gdGhlIGRvdWJsZS1jaGVjayBkYW5jZSBpbiBwcHBvYXRtX21heV9zZW5kKCksIGRvZXNuJiMzOTt0XG5uZXQvYXRtL3BwcG9hdG0uYzoxMTU6XHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2Vcbm5ldC9hdG0vcHBwb2F0bS5jLTExNi1cdCAqIHNldCB0aGUgQkxPQ0tFRCBiaXQgd2hpbGUgdGhlIHNvY2tldCBpcyBzdGlsbCBsb2NrZWQuIFdlIGtub3cgdGhhdFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTEyOC0gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjEyOTpzdGF0aWMgdm9pZCBwcHBvYXRtX3BvcChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMTMwLXtcbm5ldC9hdG0vcHBwb2F0bS5jOjEzMTpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XG5uZXQvYXRtL3BwcG9hdG0uYy0xMzItXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMTM4LVx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzk6XHQgKiByZWZ1c2UgYW5vdGhlciBwYWNrZXQgaW4gcHBwb2F0bV9zZW5kKCkuIFRoaXMgd2FzIHF1aXRlIGluZWZmaWNpZW50LlxubmV0L2F0bS9wcHBvYXRtLmMtMTQwLVx0ICpcbm5ldC9hdG0vcHBwb2F0bS5jOjE0MTpcdCAqIEluIGZhY3QgaXQmIzM5O3MgT0suIFRoZSBQUFAgY29yZSB3aWxsIG9ubHkgZXZlciBjYWxsIHBwcG9hdG1fc2VuZCgpXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDItXHQgKiB3aGlsZSBob2xkaW5nIHRoZSBjaGFubmVsLVx1MDAzZWRvd25sIGxvY2suIEFuZCBwcHBfb3V0cHV0X3dha2V1cCgpIGFzXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXHQgKiBjYWxsZWQgYnkgdGhlIHRhc2tsZXQgd2lsbCAqYWxzbyogZ3JhYiB0aGF0IGxvY2suIFNvIGV2ZW4gaWYgYW5vdGhlclxubmV0L2F0bS9wcHBvYXRtLmM6MTQ0Olx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJiMzOTt0IGdvaW5nIHRvIHJhY2Vcbm5ldC9hdG0vcHBwb2F0bS5jLTE0NS1cdCAqIHdpdGggaXQuIFRoZSB3YWtldXAgKndpbGwqIGhhcHBlbiBhZnRlciB0aGUgb3RoZXIgQ1BVIGlzIHNhZmVseSBvdXRcbm5ldC9hdG0vcHBwb2F0bS5jOjE0NjpcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxubmV0L2F0bS9wcHBvYXRtLmMtMTQ3LVx0ICpcbm5ldC9hdG0vcHBwb2F0bS5jOjE0ODpcdCAqIFNvIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgaGFzIGFscmVhZHkgc2V0IHRoZSBCTE9DS0VEIGJpdCBhbmRcbm5ldC9hdG0vcHBwb2F0bS5jLTE0OS1cdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCYjMzk7cyBmaW5lLiBXZSB0cmlnZ2VyIGEgd2FrZXVwIHdoaWNoIHdpbGxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MDpcdCAqIGhhcHBlbiBsYXRlci4gQW5kIGlmIHRoZSBDUFUgaW4gcHBwb2F0bV9zZW5kKCkgKmhhc24mIzM5O3QqIHNldCB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jLTE1MS1cdCAqIEJMT0NLRUQgYml0IHlldCwgdGhhdCYjMzk7cyBmaW5lIHRvbyBiZWNhdXNlIG9mIHRoZSBkb3VibGUgY2hlY2sgaW5cbm5ldC9hdG0vcHBwb2F0bS5jOjE1MjpcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTMtXHQgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjEtICovXG5uZXQvYXRtL3BwcG9hdG0uYzoxNjI6c3RhdGljIHZvaWQgcHBwb2F0bV91bmFzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbm5ldC9hdG0vcHBwb2F0bS5jLTE2My17XG5uZXQvYXRtL3BwcG9hdG0uYzoxNjQ6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYy0xNjUtXHRwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cbm5ldC9hdG0vcHBwb2F0bS5jOjE3NjpzdGF0aWMgdm9pZCBwcHBvYXRtX3B1c2goc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9hdG0vcHBwb2F0bS5jLTE3Ny17XG5uZXQvYXRtL3BwcG9hdG0uYzoxNzg6XHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTc5LVx0cHJfZGVidWcoXCYjMzQ7XFxuXCYjMzQ7KTtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXHRcdG1vZHVsZSA9IHB2Y2MtXHUwMDNlb2xkX293bmVyO1xubmV0L2F0bS9wcHBvYXRtLmM6MTg1Olx0XHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xubmV0L2F0bS9wcHBvYXRtLmMtMTg2LVx0XHRhdG12Y2MtXHUwMDNlcHVzaChhdG12Y2MsIE5VTEwpO1x0LyogUGFzcyBhbG9uZyBiYWQgbmV3cyAqL1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTIyOC1cbm5ldC9hdG0vcHBwb2F0bS5jOjIyOTpzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMC17XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjUxLVx0Lypcbm5ldC9hdG0vcHBwb2F0bS5jOjI1MjpcdCAqIFdlIG1heSBoYXZlIHJhY2VkIHdpdGggcHBwb2F0bV9wb3AoKS4gSWYgaXQgcmFuIGZvciB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jLTI1My1cdCAqIGxhc3QgcGFja2V0IGluIHRoZSBxdWV1ZSwgKmp1c3QqIGJlZm9yZSB3ZSBzZXQgdGhlIEJMT0NLRURcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTktXHQgKiBydW4gdGhlIHdha2V1cCB0YXNrbGV0LiBBbm90aGVyIHdha2V1cCB3aWxsIG5ldmVyIGh1cnQuXG5uZXQvYXRtL3BwcG9hdG0uYzoyNjA6XHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24mIzM5O3QgZ290IGFzIGZhciBhcyBtYWtpbmdcbm5ldC9hdG0vcHBwb2F0bS5jLTI2MS1cdCAqIHNwYWNlIG9uIHRoZSBxdWV1ZSB5ZXQsIHRoZW4gaXQgaGFzbiYjMzk7dCBjaGVja2VkIHRoZSBCTE9DS0VEXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMjY0LVx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCYjMzk7cyAtXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcbm5ldC9hdG0vcHBwb2F0bS5jOjI2NTpcdCAqIGNvZGUgcGF0aCB0aGF0IGNhbGxzIHBwcG9hdG1fc2VuZCgpLCBhbmQgaXMgdGh1cyBnb2luZyB0b1xubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVx0ICogd2FpdCBmb3IgdXMgdG8gZmluaXNoLlxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTI4My0jZGVmaW5lIERST1BfUEFDS0VUIDFcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NDpzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2F0bS9wcHBvYXRtLmMtMjg1LXtcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NjpcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG5uZXQvYXRtL3BwcG9hdG0uYy0yODctXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMxOC1cdFx0XHRpZiAobiAhPSBOVUxMIFx1MDAyNlx1MDAyNlxubmV0L2F0bS9wcHBvYXRtLmM6MzE5Olx0XHRcdCAgICAhcHBwb2F0bV9tYXlfc2VuZChwdmNjLCBuLVx1MDAzZXRydWVzaXplKSkge1xubmV0L2F0bS9wcHBvYXRtLmMtMzIwLVx0XHRcdFx0a2ZyZWVfc2tiKG4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTMyOC1cdFx0XHR9XG5uZXQvYXRtL3BwcG9hdG0uYzozMjk6XHRcdH0gZWxzZSBpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMC1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzMzLVx0Y2FzZSBlX3ZjOlxubmV0L2F0bS9wcHBvYXRtLmM6MzM0Olx0XHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVx1MDAzZXRydWVzaXplKSlcbm5ldC9hdG0vcHBwb2F0bS5jLTMzNS1cdFx0XHRnb3RvIG5vc3BhY2U7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtMzYzLS8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG5uZXQvYXRtL3BwcG9hdG0uYzozNjQ6c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG5uZXQvYXRtL3BwcG9hdG0uYy0zNjYte1xubmV0L2F0bS9wcHBvYXRtLmM6MzY3Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbm5ldC9hdG0vcHBwb2F0bS5jLTM2OC1cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy0zNzctXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6XHQuc3RhcnRfeG1pdCA9IHBwcG9hdG1fc2VuZCxcbm5ldC9hdG0vcHBwb2F0bS5jOjM4MDpcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxubmV0L2F0bS9wcHBvYXRtLmMtMzgxLX07XG5uZXQvYXRtL3BwcG9hdG0uYy0zODItXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcbm5ldC9hdG0vcHBwb2F0bS5jLTM4NC17XG5uZXQvYXRtL3BwcG9hdG0uYy0zODUtXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xubmV0L2F0bS9wcHBvYXRtLmM6Mzg2Olx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVx0aW50IGVycjtcbi0tXG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXHRwdmNjLVx1MDAzZW9sZF9yZWxlYXNlX2NiID0gYXRtdmNjLVx1MDAzZXJlbGVhc2VfY2I7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDU6XHRwdmNjLVx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDYtXHRwdmNjLVx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MDc6XHRwdmNjLVx1MDAzZWNoYW4ub3BzID0gXHUwMDI2cHBwb2F0bV9vcHM7XG5uZXQvYXRtL3BwcG9hdG0uYy00MDgtXHRwdmNjLVx1MDAzZWNoYW4ubXR1ID0gYXRtdmNjLVx1MDAzZXFvcy50eHRwLm1heF9zZHUgLSBQUFBfSERSTEVOIC1cbm5ldC9hdG0vcHBwb2F0bS5jLTQwOS1cdCAgICAoYmUuZW5jYXBzID09IGVfdmMgPyAwIDogTExDX0xFTik7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTA6XHR0YXNrbGV0X3NldHVwKFx1MDAyNnB2Y2MtXHUwMDNld2FrZXVwX3Rhc2tsZXQsIHBwcG9hdG1fd2FrZXVwX3NlbmRlcik7XG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZwdmNjLVx1MDAzZWNoYW4pO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQxNi1cdGF0bXZjYy1cdTAwM2V1c2VyX2JhY2sgPSBwdmNjO1xubmV0L2F0bS9wcHBvYXRtLmM6NDE3Olx0YXRtdmNjLVx1MDAzZXB1c2ggPSBwcHBvYXRtX3B1c2g7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTg6XHRhdG12Y2MtXHUwMDNlcG9wID0gcHBwb2F0bV9wb3A7XG5uZXQvYXRtL3BwcG9hdG0uYzo0MTk6XHRhdG12Y2MtXHUwMDNlcmVsZWFzZV9jYiA9IHBwcG9hdG1fcmVsZWFzZV9jYjtcbm5ldC9hdG0vcHBwb2F0bS5jLTQyMC1cdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDMyLSAqL1xubmV0L2F0bS9wcHBvYXRtLmM6NDMzOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxubmV0L2F0bS9wcHBvYXRtLmMtNDM0LVx0dW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDM4LVxubmV0L2F0bS9wcHBvYXRtLmM6NDM5Olx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcdTAwMjZcdTAwMjYgYXRtdmNjLVx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxubmV0L2F0bS9wcHBvYXRtLmMtNDQwLVx0XHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTQ1MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1MjpcdFx0cmV0dXJuIHBwcG9hdG1fYXNzaWduX3ZjYyhhdG12Y2MsIGFyZ3ApO1xubmV0L2F0bS9wcHBvYXRtLmMtNDUzLVx0XHR9XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDYzLVxubmV0L2F0bS9wcHBvYXRtLmM6NDY0OnN0YXRpYyBzdHJ1Y3QgYXRtX2lvY3RsIHBwcG9hdG1faW9jdGxfb3BzID0ge1xubmV0L2F0bS9wcHBvYXRtLmMtNDY1LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2Olx0LmlvY3RsXHQ9IHBwcG9hdG1faW9jdGwsXG5uZXQvYXRtL3BwcG9hdG0uYy00NjctfTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2OC1cbm5ldC9hdG0vcHBwb2F0bS5jOjQ2OTpzdGF0aWMgaW50IF9faW5pdCBwcHBvYXRtX2luaXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC17XG5uZXQvYXRtL3BwcG9hdG0uYzo0NzE6XHRyZWdpc3Rlcl9hdG1faW9jdGwoXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xubmV0L2F0bS9wcHBvYXRtLmMtNDcyLVx0cmV0dXJuIDA7XG4tLVxubmV0L2F0bS9wcHBvYXRtLmMtNDc0LVxubmV0L2F0bS9wcHBvYXRtLmM6NDc1OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvYXRtX2V4aXQodm9pZClcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni17XG5uZXQvYXRtL3BwcG9hdG0uYzo0Nzc6XHRkZXJlZ2lzdGVyX2F0bV9pb2N0bChcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XG5uZXQvYXRtL3BwcG9hdG0uYy00NzgtfVxubmV0L2F0bS9wcHBvYXRtLmMtNDc5LVxubmV0L2F0bS9wcHBvYXRtLmM6NDgwOm1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XG5uZXQvYXRtL3BwcG9hdG0uYzo0ODE6bW9kdWxlX2V4aXQocHBwb2F0bV9leGl0KTtcbm5ldC9hdG0vcHBwb2F0bS5jLTQ4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTDJUUC9QUFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFdoZW4gSSBzZWUgYGwydHBfcHBwYCBtZW50aW9uZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9sMnRwL01ha2VmaWxlYCB0byBzZWUgaG93IHRoYXQgYGwydHBfcHBwYCBjb21wb25lbnQgaXMgaGFuZGxlZCBkdXJpbmcgY29tcGlsYXRpb24sIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGdlbmVyYWxseSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gVGhlbiwgbmF0dXJhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBpbiB0aGUgbWVudWNvbmZpZyByZWxhdGVkIHRvIFBQUCBzdXBwb3J0IHdpdGhpbiBMMlRQLiBUaGF0IG1lYW5zIGEgbG9vayBpbnRvIGBuZXQvbDJ0cC9LY29uZmlnYC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIGBsMnRwX3BwcGAgaXMgZXhwb3NlZCwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgc2V0dGluZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQmV0d2VlbiB0aG9zZSB0d28gZmlsZXMsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoZSBzeXN0ZW0gZXhwZWN0cyB3aXRoIHRoaXMgUFBQIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3BwcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL01ha2VmaWxlPTg9Q0ZMQUdTX2wydHBfY29yZS5vICYjNDM7PSAtSSQoc3JjKVxuLS1cbm5ldC9sMnRwL01ha2VmaWxlLTEwLSMgQnVpbGQgbDJ0cCBhcyBtb2R1bGVzIGlmIEwyVFAgaXMgTVxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICYjNDM7PSBsMnRwX3BwcC5vXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSAmIzQzOz0gbDJ0cF9pcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgRHJpdmVyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ09ORklHIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIHRoZXkgcmVseSBvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgc3BlY2lmaWMgUFBQIGRyaXZlcnMgdG8gYnJvYWRlciBuZXR3b3JrIHN0YWNrIGZlYXR1cmVzLCBoYXJkd2FyZSBzdXBwb3J0LCBvciBldmVuIG90aGVyIFBQUC1yZWxhdGVkIG1vZHVsZXMuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgcmVxdWlyZWQgZWxlbWVudHMgZm9yIHRoaXMgYXNwZWN0LiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuICA0MTpcdFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXG4gIDQyOlx0XHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcbiAgNDM6XHRcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cbiAgNDQ6XHRcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJiMzOTt0IHN1cHBvcnQgaXQsXG4gIDQ1Olx0XHQgIGl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgVGhlIFBQUCBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAoXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDssXG4gIDQ4Olx0XHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxuICA0OTpcdFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIE5vdGUgdGhhdCB0aGUgQlNEIGNvbXByZXNzaW9uIGNvZGUgd2lsbCBhbHdheXMgYmUgY29tcGlsZWQgYXMgYVxuICA1MjpcdFx0ICBtb2R1bGU7IGl0IGlzIGNhbGxlZCBic2RfY29tcCBhbmQgd2lsbCBzaG93IHVwIGluIHRoZSBkaXJlY3RvcnlcbiAgNTM6XHRcdCAgbW9kdWxlcyBvbmNlIHlvdSBoYXZlIHNhaWQgXCYjMzQ7bWFrZSBtb2R1bGVzXCYjMzQ7LiBJZiB1bnN1cmUsIHNheSBOLlxuICA1NDpcdFxuICA1NTpcdGNvbmZpZyBQUFBfREVGTEFURVxuICA1NjpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDtcbiAgNTc6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiAgNTg6XHRcdHNlbGVjdCBaTElCX0RFRkxBVEVcbiAgNTk6XHRcdGhlbHBcbiAgNjA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIERlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXMgdGhlXG4gIDYxOlx0XHQgIERlZmxhdGUgYWxnb3JpdGhtICh0aGUgc2FtZSBhbGdvcml0aG0gdGhhdCBnemlwIHVzZXMpIHRvIGNvbXByZXNzXG4gIDYyOlx0XHQgIGVhY2ggUFBQIHBhY2tldCBiZWZvcmUgaXQgaXMgc2VudCBvdmVyIHRoZSB3aXJlLiAgVGhlIG1hY2hpbmUgYXQgdGhlXG4gIDYzOlx0XHQgIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmsgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZVxuICA2NDpcdFx0ICBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBhcyB3ZWxsIGZvciB0aGlzIHRvIGJlIHVzZWZ1bC4gIEV2ZW4gaWZcbiAgNjU6XHRcdCAgdGhleSBkb24mIzM5O3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxuICA2NjpcdFxuICA2NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBQUFBfRklMVEVSXG4gIDcwOlx0XHRib29sIFwmIzM0O1BQUCBmaWx0ZXJpbmdcJiMzNDtcbiAgNzE6XHRcdGhlbHBcbiAgNzI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGUgcGFja2V0cyBwYXNzaW5nIG92ZXJcbiAgNzM6XHRcdCAgUFBQIGludGVyZmFjZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGljaCBwYWNrZXRzIGNvdW50IGFzXG4gIDc0Olx0XHQgIGFjdGl2aXR5IChpLmUuIHdoaWNoIHBhY2tldHMgd2lsbCByZXNldCB0aGUgaWRsZSB0aW1lciBvciBicmluZyB1cFxuICA3NTpcdFx0ICBhIGRlbWFuZC1kaWFsZWQgbGluaykgYW5kIHdoaWNoIHBhY2tldHMgYXJlIHRvIGJlIGRyb3BwZWQgZW50aXJlbHkuXG4gIDc2Olx0XHQgIFlvdSBuZWVkIHRvIHNheSBZIGhlcmUgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBwYXNzLWZpbHRlciBhbmRcbiAgNzc6XHRcdCAgYWN0aXZlLWZpbHRlciBvcHRpb25zIHRvIHBwcGQuXG4gIDc4Olx0XG4gIDc5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDgwOlx0XG4gIDgxOlx0Y29uZmlnIFBQUF9NUFBFXG4gIDgyOlx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcJiMzNDtcbiAgODM6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FSQzRcbiAgODQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcbiAgODU6XHRcdGhlbHBcbiAgODY6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIE1QUEUgRW5jcnlwdGlvbiBwcm90b2NvbCwgYXMgZW1wbG95ZWQgYnkgdGhlXG4gIDg3Olx0XHQgIE1pY3Jvc29mdCBQb2ludC10by1Qb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wuXG4gIDg4Olx0XG4gIDg5Olx0XHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxuICA5MDpcdFx0ICBjb25maWd1cmluZyBQUFRQIGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gdXRpbGl6ZSB0aGlzIG1ldGhvZC5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgUFBQX01VTFRJTElOS1xuICA5MzpcdFx0Ym9vbCBcJiMzNDtQUFAgbXVsdGlsaW5rIHN1cHBvcnRcJiMzNDtcbiAgOTQ6XHRcdGhlbHBcbiAgOTU6XHRcdCAgUFBQIG11bHRpbGluayBpcyBhIHByb3RvY29sIChkZWZpbmVkIGluIFJGQyAxOTkwKSB3aGljaCBhbGxvd3MgeW91XG4gIDk2Olx0XHQgIHRvIGNvbWJpbmUgc2V2ZXJhbCAobG9naWNhbCBvciBwaHlzaWNhbCkgbGluZXMgaW50byBvbmUgbG9naWNhbCBQUFBcbiAgOTc6XHRcdCAgY29ubmVjdGlvbiwgc28gdGhhdCB5b3UgY2FuIHV0aWxpemUgeW91ciBmdWxsIGJhbmR3aWR0aC5cbiAgOTg6XHRcbiAgOTk6XHRcdCAgVGhpcyBoYXMgdG8gYmUgc3VwcG9ydGVkIGF0IHRoZSBvdGhlciBlbmQgYXMgd2VsbCBhbmQgeW91IG5lZWQgYVxuIDEwMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcHBkIGRhZW1vbiB3aGljaCB1bmRlcnN0YW5kcyB0aGUgbXVsdGlsaW5rIHByb3RvY29sLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ0MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBQUFAgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZXhwZWN0aW5nIGEgdHlwaWNhbCBjb25maWd1cmF0aW9uIGZpbGUgaGVyZSwgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBidWlsZCBvZiB0aGUgUFBQIChQb2ludC10by1Qb2ludCBQcm90b2NvbCkgbmV0d29yayBzdGFjayB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgUFBQIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMsIG1heWJlIHRyeWluZyB0byBpbmZlciB0aGUgaW50ZW50aW9ucyBvZiB0aGUgZGV2ZWxvcGVycyB3aG8gY3JlYXRlZCBpdC4gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBvcHRpb25zIGRlcGVuZCBvbiB3aGljaCB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IHRoZSBmaWxlIGhhbmRsZXMgdGhlIGNvbXBsZXhpdGllcyBvZiBkaWZmZXJlbnQgUFBQIGltcGxlbWVudGF0aW9ucy4gSXMgdGhpcyBvbmUgd2VsbC1jb21tZW50ZWQ/IEhvcGVmdWxseSwgaXQgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBvbiB0aGUgZGVzaWduIHJhdGlvbmFsZSBiZWhpbmQgUFBQJiMzOTtzIG5ldHdvcmsgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0XG4gMTAyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIFBQUE9BVE1cbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBBVE1cbiAxMDc6XHRcdGhlbHBcbiAxMDg6XHRcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cbiAxMDk6XHRcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXG4gMTEwOlx0XHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcbiAxMTE6XHRcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIFBQUE9YXG4gMTE0Olx0XHR0cmlzdGF0ZVxuIDExNTpcdFxuIDExNjpcdGNvbmZpZyBQUFBPRVxuIDExNzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgRXRoZXJuZXRcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBQUFBPWFxuIDExOTpcdFx0aGVscFxuIDEyMDpcdFx0ICBTdXBwb3J0IGZvciBQUFAgb3ZlciBFdGhlcm5ldC5cbiAxMjE6XHRcbiAxMjI6XHRcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxuIDEyMzpcdFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcbiAxMjQ6XHRcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcbiAxMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXHUwMDNlLlxuIDEyNjpcdFxuIDEyNzpcdGNob2ljZVxuIDEyODpcdFx0cHJvbXB0IFwmIzM0O051bWJlciBvZiBQUFBvRSBoYXNoIGJpdHNcJiMzNDtcbiAxMjk6XHRcdGRlZmF1bHQgUFBQT0VfSEFTSF9CSVRTXzRcbiAxMzA6XHRcdGRlcGVuZHMgb24gUFBQT0VcbiAxMzE6XHRcdGhlbHBcbiAxMzI6XHRcdFx0U2VsZWN0IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGZvciBoYXNoaW5nIFBQUG9FIGludGVyZmFjZXMuXG4gMTMzOlx0XG4gMTM0Olx0XHRcdExhcmdlciBzaXplcyByZWR1Y2VzIHRoZSByaXNrIG9mIGhhc2ggY29sbGlzaW9ucyBhdCB0aGUgY29zdFxuIDEzNTpcdFx0XHRvZiBzbGlnaHRseSBpbmNyZWFzZWQgbWVtb3J5IHVzYWdlLlxuIDEzNjpcdFxuIDEzNzpcdFx0XHRUaGlzIGhhc2ggdGFibGUgaXMgb24gYSBwZXIgb3V0ZXIgZXRoZXJuZXQgaW50ZXJmYWNlLlxuIDEzODpcdFxuIDEzOTpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMVxuIDE0MDpcdFx0Ym9vbCBcJiMzNDsxIGJpdCAoMiBidWNrZXRzKVwmIzM0O1xuIDE0MTpcdFxuIDE0MjpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfMlxuIDE0MzpcdFx0Ym9vbCBcJiMzNDsyIGJpdHMgKDQgYnVja2V0cylcJiMzNDtcbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgUFBQT0VfSEFTSF9CSVRTXzRcbiAxNDY6XHRcdGJvb2wgXCYjMzQ7NCBiaXRzICgxNiBidWNrZXRzKVwmIzM0O1xuIDE0NzpcdFxuIDE0ODpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfOFxuIDE0OTpcdFx0Ym9vbCBcJiMzNDs4IGJpdHMgKDI1NiBidWNrZXRzKVwmIzM0O1xuIDE1MDpcdFxuIDE1MTpcdGVuZGNob2ljZVxuIDE1MjpcdFxuIDE1MzpcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcbiAxNTQ6XHRcdGludFxuIDE1NTpcdFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXG4gMTU2Olx0XHRkZWZhdWx0IDIgaWYgUFBQT0VfSEFTSF9CSVRTXzJcbiAxNTc6XHRcdGRlZmF1bHQgNCBpZiBQUFBPRV9IQVNIX0JJVFNfNFxuIDE1ODpcdFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XG4gMTU5Olx0XHRkZWZhdWx0IDRcbiAxNjA6XHRcbiAxNjE6XHRjb25maWcgUFBUUFxuIDE2MjpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgSVB2NCAoUFBUUClcJiMzNDtcbiAxNjM6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMTY0Olx0XHRzZWxlY3QgUFBQT1hcbiAxNjU6XHRcdGhlbHBcbiAxNjY6XHRcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgSVB2NC4oUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKVxuIDE2NzpcdFxuIDE2ODpcdFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBwcHBkIHBsdWdpbiB0byB3b3JrIGluIGNsaWVudCBtb2RlIG9yXG4gMTY5Olx0XHQgIG1vZGlmaWVkIHBwdHBkIChwb3B0b3ApIHRvIHdvcmsgaW4gc2VydmVyIG1vZGUuXG4gMTcwOlx0XHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cbiAxNzE6XHRcdCAgdXRpbGl6ZSB0aGlzIG1vZHVsZS5cbiAxNzI6XHRcbiAxNzM6XHRjb25maWcgUFBQT0wyVFBcbiAxNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbiAxNzU6XHRcdGRlcGVuZHMgb24gTDJUUFxuIDE3NjpcdFx0c2VsZWN0IFBQUE9YXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFN1cHBvcnQgZm9yIFBQUC1vdmVyLUwyVFAgc29ja2V0IGZhbWlseS4gTDJUUCBpcyBhIHByb3RvY29sXG4gMTc5Olx0XHQgIHVzZWQgYnkgSVNQcyBhbmQgZW50ZXJwcmlzZXMgdG8gdHVubmVsIFBQUCB0cmFmZmljIG92ZXIgVURQXG4gMTgwOlx0XHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxuIDE4MTpcdGlmIFRUWVxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBQUFBfQVNZTkNcbiAxODQ6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcJiMzNDtcbiAxODU6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAxODY6XHRcdGhlbHBcbiAxODc6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3RhbmRhcmRcbiAxODg6XHRcdCAgYXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cywgc3VjaCBhcyBDT00xIG9yIENPTTIgb24gYSBQQy4gIElmIHlvdSB1c2VcbiAxODk6XHRcdCAgYSBtb2RlbSAobm90IGEgc3luY2hyb25vdXMgb3IgSVNETiBtb2RlbSkgdG8gY29udGFjdCB5b3VyIElTUCwgeW91XG4gMTkwOlx0XHQgIG5lZWQgdGhpcyBvcHRpb24uXG4gMTkxOlx0XG4gMTkyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gMTkzOlx0XG4gMTk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTk1Olx0XG4gMTk2Olx0Y29uZmlnIFBQUF9TWU5DX1RUWVxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXCYjMzQ7XG4gMTk4Olx0XHRoZWxwXG4gMTk5Olx0XHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN5bmNocm9ub3VzXG4gMjAwOlx0XHQgIChIRExDKSB0dHkgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaGlnaC1zcGVlZCBsZWFzZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIEwyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTDJUUCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG5ldC9sMnRwL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNlbnRyYWwgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYWxsIHRoaW5ncyBMMlRQLCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgcHJvdG9jb2wgaXRzZWxmLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgcHJpbWFyeSBgTDJUUGAgc3ltYm9sLCB3aGljaCBhY3RzIGFzIHRoZSBtYXN0ZXIgc3dpdGNoLCBhbmQgdGhlbiBJJiMzOTtsbCBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgYW50aWNpcGF0ZSBgUFBQT0wyVFBgIHdpbGwgaGF2ZSBpdHMgb3duIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIHNlY3Rpb24sIGxpa2VseSBkZXBlbmRlbnQgb24gYEwyVFBgIGJlaW5nIGVuYWJsZWQsIGdpdmVuIHRoYXQgUFBQIG92ZXIgTDJUUCBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIHVuZGVybHlpbmcgTDJUUCBpbmZyYXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUgYW5kIGhvdyB0byB0d2VhayB0aGVtLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnLTUtXG5uZXQvbDJ0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBMMlRQXG5uZXQvbDJ0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctMzUtXG5uZXQvbDJ0cC9LY29uZmlnOjM2OmNvbmZpZyBMMlRQX0RFQlVHRlNcbm5ldC9sMnRwL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctNDgtXG5uZXQvbDJ0cC9LY29uZmlnOjQ5OmNvbmZpZyBMMlRQX1YzXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVx0Ym9vbCBcJiMzNDtMMlRQdjMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctNjktXG5uZXQvbDJ0cC9LY29uZmlnOjcwOmNvbmZpZyBMMlRQX0lQXG5uZXQvbDJ0cC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcJiMzNDtcbi0tXG5uZXQvbDJ0cC9LY29uZmlnLTg2LVxubmV0L2wydHAvS2NvbmZpZzo4Nzpjb25maWcgTDJUUF9FVEhcbm5ldC9sMnRwL0tjb25maWctODgtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzI4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQVRNIENvbmZpZ3VyYXRpb24gZm9yIFBQUE9BVE0qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCBvcmRlciBvZiBidXNpbmVzcywgSSBuZWVkIHRvIHZlcmlmeSB0aGUgQVRNIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciBQUFBPQVRNLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIEFUTSBsYXllciBpcyBwcm9wZXJseSBzZXQgdXAgYmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IG1vdmluZyBvbiB0byB0aGUgUFBQb0UgYXNwZWN0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBWUEkvVkNJIHZhbHVlcywgZW5jYXBzdWxhdGlvbiB0eXBlIChwcm9iYWJseSBBQUw1KSwgYW5kIGFueSByZWxldmFudCBzaGFwaW5nIG9yIHBvbGljaW5nIHBhcmFtZXRlcnMgZGVmaW5lZCBvbiB0aGUgQVRNIGludGVyZmFjZS4gQW55IG1pc2NvbmZpZ3VyYXRpb24gYXQgdGhpcyBmb3VuZGF0aW9uYWwgbGV2ZWwgd2lsbCBpbW1lZGlhdGVseSBicmVhayB0aGUgUFBQb0FUTSBjb25uZWN0aW9uLiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIEFUTSBwbHVtYmluZyBiZWZvcmUgdHJ5aW5nIHRvIHNlbmQgZGF0YSBvdmVyIHRoZSBwaXBlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBlc3BlY2lhbGx5IGluIGEgdHJvdWJsZXNob290aW5nIHNjZW5hcmlvLCBvciBiZWZvcmUgbWFraW5nIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZy01LVxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxubmV0L2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVwmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0yMS1cbm5ldC9hdG0vS2NvbmZpZzoyMjpjb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTMwLVxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXG5uZXQvYXRtL0tjb25maWctMzItXHRib29sIFwmIzM0O1Blci1WQyBJUCBmaWx0ZXIga2x1ZGdlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTE0CgkJCQkJCQlvdXRwdXQ6IDM0MgoJCQkJCQkJdGhvdWdodHM6IDk3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQUFAvTDJUUCBEcml2ZXIgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBmb3IgUFBQLCBhbmQgYXNzb2NpYXRlZCBwcm90b2NvbHM6IFBQUCwgUFBQX0FTWU5DLCBQUFBfU1lOQ19UVFksIFBQUE9FLCBQUFRQLCBQUFBPQVRNLCBQUFBPTDJUUCwgQVRNLCBhbmQgTDJUUC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOZXh0LCB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlICpGb2N1c1N5bWJvbHMqLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuIEkmIzM5O3ZlIGdvdCBhIGxpc3QsIHdoaWNoIEkmIzM5O2xsIHJldmlldyBhbmQgaW50ZXJuYWxpemUuIFRoaXMgaW5jbHVkZXMgc2VuZCBmdW5jdGlvbnMgKGBwcHBfYXN5bmNfc2VuZGAsIGBwcHBfc3luY19zZW5kYCwgYHBwcG9lX3htaXRgLCBgcHB0cF94bWl0YCwgYHBwcG9hdG1fc2VuZGAsIGBwcHBvbDJ0cF94bWl0YCksIElPQ1RMIGhhbmRsZXJzIChgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwdHBfcHBwX2lvY3RsYCwgYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgYHBwcF9pb2N0bGApLCBhbmQgYSBmZXcga2V5IGZ1bmN0aW9ucyB3aXRoaW4gYHBwcF9nZW5lcmljLmNgIGxpa2UgYHBwcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBwcHBfcHVzaGAsIGBwcHBfbXBfZXhwbG9kZWAsIGBfX3BwcF9jaGFubmVsX3B1c2hgLCBhbmQgYHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dGAsIGFsb25nIHdpdGggdGhlIGBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIG5vdyBwYXNzIHRoZSBwcml2YXRlIHBvaW50ZXIgZGlyZWN0bHkgYWNyb3NzIHRoZSBwcHAgZ2VuZXJpYyBhbmQgYXNzb2NpYXRlZCBkcml2ZXJzLgoKTm93LCBhIGNydWNpYWwgc2FuaXR5IGNoZWNrOiBhcmUgdGhlc2Ugc3ltYm9scyAqYWN0dWFsbHkqIGV4cG9ydGVkPyBTaW5jZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZXR3b3JrIGRyaXZlcnMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGVudHJ5IHBvaW50cyBvciBkaXJlY3RseSBpbnZvbHZlZCBpbiBwYWNrZXQgaGFuZGxpbmcuIE1hbnkgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgKGBvcHMtJmd0O3N0YXJ0X3htaXRgIGV0Yy4pLCBzbyB0aGV5IGFyZSAqZGVmaW5pdGVseSogc3ltYm9saXNlZC4gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgdGhlc2Ugc3ltYm9scyB3aWxsIGJlIHByZXNlbnQgaW4gdm1saW51eC9tb2R1bGVzLCBhbmQgYXJlIG5vdCBqdXN0IHN0YXRpYywgaW5saW5lYWJsZSBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhlIGFkZHJlc3NlcyBvZiBtYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnRha2VuKiBjb25maXJtcyB0aGlzLgoKRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIG1lZXRzIHRoZSBmdXp6aW5nIGNyaXRlcmlhLiBUaGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBmbGFnIHNob3VsZCBiZSBgdHJ1ZWAsICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7IGFscmVhZHkgY29uZmlybWVkIChQUFAsIFBQUF9BU1lOQywgUFBQX1NZTkNfVFRZLCBQUFBPRSwgUFBUUCwgUFBQT0FUTSwgUFBQT0wyVFAsIEFUTSwgYW5kIEwyVFApLCBhbmQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmUgYWxsIGluIHBsYWNlLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBpbnZvbHZlIHJlZmFjdG9yaW5nIGNhbGxiYWNrIG1lY2hhbmlzbXMsIHdoaWNoIGFsbW9zdCBhbHdheXMgaW50cm9kdWNlcyBuZXcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIGZ1bmN0aW9ucyBzZWxlY3RlZCBkZWFsIHdpdGggdGhlIHNwZWNpZmljcyBmb3IgZ2VuZXJpYyBwcHAsIGFzeW5jL3N5bmMgdHR5LCBQUFBvRSwgUFBUUCwgUFBQb0FUTSwgYW5kIFBQUE9MMlRQLiBBIHZlcnkgZm9jdXNlZCBzZXQgb2YgZHJpdmVycyB3aXRoIHRoaXMgY29kZS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUF9BU1lOQyYjMzQ7LAogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQT0UmIzM0OywKICAgICYjMzQ7UFBUUCYjMzQ7LAogICAgJiMzNDtQUFBPQVRNJiMzNDssCiAgICAmIzM0O1BQUE9MMlRQJiMzNDssCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtMMlRQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtwcHBfbXBfZXhwbG9kZSYjMzQ7LAogICAgJiMzNDtfX3BwcF9jaGFubmVsX3B1c2gmIzM0OywKICAgICYjMzQ7cHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0JiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9hc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDssCiAgICAmIzM0O3BwcF9zeW5jX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9lX3htaXQmIzM0OywKICAgICYjMzQ7cHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHB0cF94bWl0JiMzNDssCiAgICAmIzM0O3BwdHBfcHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcG9hdG1fc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX2RldnBwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSBhY3Jvc3MgdGhlIGNvcmUgUFBQIGdlbmVyaWMgc3Vic3lzdGVtIGFuZCBzZXZlcmFsIGNoYW5uZWwgZHJpdmVycyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIGwydHBfcHBwKSB0byBhY2NlcHQgdGhlIGNoYW5uZWwmIzM5O3MgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0cywgdHR5IGxpbmUgZGlzY2lwbGluZXMsIGFuZCAvZGV2L3BwcCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBfQVNZTkMmIzM0OywKICAgICYjMzQ7UFBQX1NZTkNfVFRZJiMzNDssCiAgICAmIzM0O1BQUE9FJiMzNDssCiAgICAmIzM0O1BQVFAmIzM0OywKICAgICYjMzQ7UFBQT0FUTSYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7TDJUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHVzaCYjMzQ7LAogICAgJiMzNDtwcHBfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7cHBwX21wX2V4cGxvZGUmIzM0OywKICAgICYjMzQ7X19wcHBfY2hhbm5lbF9wdXNoJiMzNDssCiAgICAmIzM0O3BwcF9jaGFubmVsX2JyaWRnZV9pbnB1dCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfYXN5bmNfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvZV94bWl0JiMzNDssCiAgICAmIzM0O3BwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O3BwdHBfeG1pdCYjMzQ7LAogICAgJiMzNDtwcHRwX3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBvYXRtX3NlbmQmIzM0OywKICAgICYjMzQ7cHBwb2F0bV9kZXZwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJiMzOTtzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBzaWduYXR1cmUgYW5kIGFyZ3VtZW50IHJlZmFjdG9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBvciBwYWRkaW5nIGZpZWxkcywgbm9yIGRvZXMgaXQgYWx0ZXIgZGF0YSBjb3B5aW5nIGxvZ2ljIHRvIHVzZXJzcGFjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb2ludGVyIG9yIHR5cGUgbWlzdXNlIGludHJvZHVjZWQgYnkgc3VjaCBhIHJlZmFjdG9yIHdvdWxkIG1hbmlmZXN0IGFzIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHR5cGUgY29uZnVzaW9uLCBvciBtZW1vcnkgYWNjZXNzIGZhdWx0cywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOThmNzAzNzg5MzEzZTViODg1OTU5ZjJkNWM0MWZiMWJjOTdkNTRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYwppbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jCkBAIC05MSwxMyAmIzQzOzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7CiAgKiBQcm90b3R5cGVzLgogICovCiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7Ci1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyBpbnQgcHBwX2FzeW5jX3B1c2goc3RydWN0IGFzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApOwogc3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCSAgICBjb25zdCB1OCAqZmxhZ3MsIGludCBjb3VudCk7Ci1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX2FzeW5jX3Byb2Nlc3Moc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTsKIAogc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSwKQEAgLTMyMSwxMCAmIzQzOzMyMCwxMCBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3BwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKJiM0MzsJc3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IGVyciwgdmFsOwogCXUzMiBhY2NtWzhdOwpAQCAtNTUwLDkgJiM0Mzs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApCiAgKiBhdCBzb21lIGxhdGVyIHRpbWUuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9hc3luY19wdXNoKGFwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzkwLDcgJiM0Mzs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJCWVyciA9IC1FTk9UVFk7CiAJCQlpZiAoY2hhbiAmYW1wOyZhbXA7IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwpCi0JCQkJZXJyID0gY2hhbi0mZ3Q7b3BzLSZndDtpb2N0bChjaGFuLCBjbWQsIGFyZyk7CiYjNDM7CQkJCWVyciA9IGNoYW4tJmd0O29wcy0mZ3Q7aW9jdGwoY2hhbi0mZ3Q7cHJpdmF0ZSwgY21kLCBhcmcpOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGNoLSZndDtjaGFuX3NlbSk7CiAJCX0KIAkJZ290byBvdXQ7CkBAIC0xNjAzLDcgJiM0MzsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlpZiAoIWNoYW4tJmd0O29wcy0mZ3Q7ZmlsbF9mb3J3YXJkX3BhdGgpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7CiYjNDM7CXJldHVybiBjaGFuLSZndDtvcHMtJmd0O2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbi0mZ3Q7cHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7CkBAIC0xOTMyLDcgJiM0MzsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlyZXQgPSBjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbiwgc2tiKTsKJiM0MzsJCXJldCA9IGNoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChjaGFuLSZndDtwcml2YXRlLCBza2IpOwogCiBvdXQ6CiAJCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CkBAIC0yMTQyLDcgJiM0MzsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCS8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi8KIAkJY2hhbiA9IHBjaC0mZ3Q7Y2hhbjsKIAkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtwY2gtJmd0O2ZpbGUueHEpIHx8Ci0JCQkhY2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KGNoYW4sIGZyYWcpKQomIzQzOwkJCSFjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQoY2hhbi0mZ3Q7cHJpdmF0ZSwgZnJhZykpCiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgZnJhZyk7CiAJCXBjaC0mZ3Q7aGFkX2ZyYWcgPSAxOwogCQlwICYjNDM7PSBmbGVuOwpAQCAtMjE3NSw3ICYjNDM7MjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApCiAJaWYgKHBjaC0mZ3Q7Y2hhbikgewogCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSkpIHsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cGNoLSZndDtmaWxlLnhxKTsKLQkJCWlmICghcGNoLSZndDtjaGFuLSZndDtvcHMtJmd0O3N0YXJ0X3htaXQocGNoLSZndDtjaGFuLCBza2IpKSB7CiYjNDM7CQkJaWYgKCFwY2gtJmd0O2NoYW4tJmd0O29wcy0mZ3Q7c3RhcnRfeG1pdChwY2gtJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpIHsKIAkJCQkvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi8KIAkJCQlza2JfcXVldWVfaGVhZCgmYW1wO3BjaC0mZ3Q7ZmlsZS54cSwgc2tiKTsKIAkJCQlicmVhazsKQEAgLTIzMDAsNyAmIzQzOzIzMDAsNyBAQCBzdGF0aWMgYm9vbCBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXQoc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtJmd0O2NoYW5fbmV0LCBwY2hiLSZndDtjaGFuX25ldCkpOwotCWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4sIHNrYikpCiYjNDM7CWlmICghcGNoYi0mZ3Q7Y2hhbi0mZ3Q7b3BzLSZndDtzdGFydF94bWl0KHBjaGItJmd0O2NoYW4tJmd0O3ByaXZhdGUsIHNrYikpCiAJCWtmcmVlX3NrYihza2IpOwogCiBvdXRsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtODEsOSAmIzQzOzgxLDggQEAgc3RydWN0IHN5bmNwcHAgewogICogUHJvdG90eXBlcy4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7Ci1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CiYjNDM7c3RhdGljIGludCBwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwogc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7CiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTsKQEAgLTMxMiw5ICYjNDM7MzExLDkgQEAgcHBwX3N5bmNfaW5pdCh2b2lkKQogICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuCiAgKi8KIHN0YXRpYyBpbnQKLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7cHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAlpbnQgZXJyLCB2YWw7CiAJdTMyIGFjY21bOF07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC00OTEsOSAmIzQzOzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogICogYXQgc29tZSBsYXRlciB0aW1lLgogICovCiBzdGF0aWMgaW50Ci1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTsKIAogCXBwcF9zeW5jX3B1c2goYXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC04NDEsOSAmIzQzOzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tJmd0O3BwcG9lX2RldjsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKQEAgLTg5NSw5ICYjNDM7ODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsCi0JCQkJICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tJmd0O3ByaXZhdGU7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby0mZ3Q7cHBwb2VfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwppbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKQEAgLTE0Niw5ICYjNDM7MTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbywKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTsKIH0KIAotc3RhdGljIGludCBwcHRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHB0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJmFtcDtwby0mZ3Q7cHJvdG8ucHB0cDsKQEAgLTU3MywxMCAmIzQzOzU3Myw5IEBAIHN0YXRpYyBpbnQgcHB0cF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybikKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLAotCXVuc2lnbmVkIGxvbmcgYXJnKQomIzQzO3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gY2hhbi0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmYW1wO3BvLSZndDtwcm90by5wcHRwOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IDJmNjNlOWE2Y2M4ODkuLmQ5Y2ZiOGVmMGZmYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTI3LDEyICYjNDM7MjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsOwogc3RydWN0IHBwcF9jaGFubmVsX29wcyB7CiAJLyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuCiAJICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovCi0JaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwomIzQzOwlpbnQJKCpzdGFydF94bWl0KSh2b2lkICosIHN0cnVjdCBza19idWZmICopOwogCS8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqLwotCWludAkoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKJiM0MzsJaW50CSgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAlpbnQJKCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKiwKIAkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTsKJiM0MzsJCQkJICAgICB2b2lkICopOwogfTsKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTkxLDExICYjNDM7OTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYykKIAlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoYXRtdmNjLSZndDt1c2VyX2JhY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKLXsKLQlyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi0mZ3Q7cHJpdmF0ZSk7Ci19Ci0KIC8qCiAgKiBXZSBjYW4mIzM5O3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZQogICogZG9lc24mIzM5O3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb20KQEAgLTI4Niw5ICYjNDM7MjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpCiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkb2luZy4KICAqLwogI2RlZmluZSBEUk9QX1BBQ0tFVCAxCi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiYjNDM7CXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgcmV0OwogCkBAIC0zNjYsMTYgJiM0MzszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogfQogCiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqLwotc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCiYjNDM7c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLAomIzQzOwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKJiM0MzsJc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTsKJiM0MzsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUFBQSU9DR0ZMQUdTOgotCQlyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLSZndDtmbGFncywgKGludCBfX3VzZXIgKikgYXJnKQotCQkgICAgPyAtRUZBVUxUIDogMDsKJiM0MzsJCXJldHVybiBwdXRfdXNlcihwdmNjLSZndDtmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CiAJY2FzZSBQUFBJT0NTRkxBR1M6Ci0JCXJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpCi0JCSAgICA/IC1FRkFVTFQgOiAwOwomIzQzOwkJcmV0dXJuIGdldF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDsKIAl9CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTEyMiw3ICYjNDM7MTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gewogCXN0cnVjdCBzb2NrCQkqX19zazsJCS8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqLwogfTsKIAotc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsKIAkuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LApAQCAtMzI3LDExICYjNDM7MzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogICogdGhlIHNrYiBpdCBzdXBwbGllZCwgbm90IG91ciBjbG9uZWQgc2tiLiBTbyB3ZSB0YWtlIGNhcmUgdG8gYWx3YXlzCiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLgogICovCi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tJmd0O3ByaXZhdGU7CiAJc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbDsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTsKIAlpbnQgdWhsZW4sIGhlYWRyb29tOwogCiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhKHNrLSZndDtza19zdGF0ZSAmYW1wOyBQUFBPWF9DT05ORUNURUQpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ1NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gbmVlZHMgdG8gYmUgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGBwcHBfY2hhbm5lbF9vcHNgIHN0cnVjdHVyZSBpcyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIHRoZSBzaWduYXR1cmVzIGZvciBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBiZWluZyB0d2Vha2VkLiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGVudGlyZSBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYCBkaXJlY3RseSwgdGhleSYjMzk7cmUgbm93IGV4cGVjdGluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCAob3IganVzdCBgdm9pZCAqYCkuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGF1dGhvcnMgYXJlIGNsZXZlcmx5IHJlcGxhY2luZyB0aGUgZGlyZWN0IHVzZSBvZiBgY2hhbmAgd2l0aCBgY2hhbi0mZ3Q7cHJpdmF0ZWAgaW4gdGhlIGV4aXN0aW5nIGRyaXZlcnMuIFRoZSBpbXBsZW1lbnRhdGlvbnMgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGtlcm5lbCwgbGlrZSBpbiBgcHBwX2FzeW5jLmNgLCBgcHBwX3N5bmN0dHkuY2AsIGBwcHBvZS5jYCwgYW5kIGV2ZW4gdGhlIEFUTSBhbmQgTDJUUCBQUFAgbW9kdWxlcywgYXJlIGFsbCB1cGRhdGVkIHRvIGNhc3QgdGhlIGB2b2lkICpwcml2YXRlYCB0byB0aGUgYXBwcm9wcmlhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwgc3VjaCBhcyBgc3RydWN0IGFzeW5jcHBwICphcGAsIGBzdHJ1Y3Qgc29jayAqc2tgLCBvciBgc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjYC4gSXQmIzM5O3MgYSBjbGVhbiByZWZhY3RvcmluZywgc3dhcHBpbmcgZnJvbSB0aGUgZGlyZWN0IHN0cnVjdHVyZSBhY2Nlc3MgdG8gdXNpbmcgYSBwcml2YXRlIGZpZWxkLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcHJhY3RpY2UgdG8gZW5jYXBzdWxhdGUgdGhlIGRhdGEuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpczogaGFzIHRoaXMgYmVlbiBkb25lIGNvbXByZWhlbnNpdmVseT8gSGF2ZSB3ZSBtaXNzZWQgYW55IG90aGVyIGNoYW5uZWwgb3BlcmF0aW9ucyBpbiB0aGUga2VybmVsIHRyZWUgdGhhdCB0aGlzIGNoYW5nZSBhZmZlY3RzPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBidWdzIGx1cmtpbmcgd2hlcmUgdGhlIHR5cGUgY2FzdGluZyBpc24mIzM5O3QgcXVpdGUgcmlnaHQsIG9yIHBlcmhhcHMgc29tZXdoZXJlIHRoZSBgcHJpdmF0ZWAgZmllbGQgaXNuJiMzOTt0IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjY2Vzc2VkPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNjYW4gb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgc2FmZS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBwcHBfY2hhbm5lbF9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTEwMj1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDYtXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTg5PXN0YXRpYyB2b2lkIHBwcF9zeW5jX2lucHV0KHN0cnVjdCBzeW5jcHBwICphcCwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmZsYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTkxLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6OTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cdC5zdGFydF94bWl0ID0gcHBwX3N5bmNfc2VuZCxcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jPTg5Nj1zdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6OTE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTIwLVx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NDk9c3RhdGljIHN0cnVjdCBwcm90byBwcHRwX3NrX3Byb3RvIF9fcmVhZF9tb3N0bHk7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwdHBfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDUtXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy02MDctXHQuc3RhcnRfeG1pdCA9IHBwdHBfeG1pdCxcbi0tXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9MjU9c3RydWN0IHBwcF9jaGFubmVsO1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI2LVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oLTI4LVx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4tLVxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTM4PXN0cnVjdCBwcHBfY2hhbm5lbCB7XG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMzktXHR2b2lkXHRcdCpwcml2YXRlO1x0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo0MDpcdGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXHRpbnRcdFx0bXR1O1x0XHQvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi9cbi0tXG5uZXQvYXRtL3BwcG9hdG0uYz0zNjQ9c3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcbm5ldC9hdG0vcHBwb2F0bS5jLTM3OS1cdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTI1PXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEyOC1cdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTEKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGNhbGxiYWNrIHNpZ25hdHVyZXMgZnJvbSBgKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCAuLi4pYCB0byBgKHZvaWQgKnByaXZhdGUsIC4uLilgIHdoZXJlIHRoZSBjYWxsZXIgbm93IGV4cGxpY2l0bHkgcGFzc2VzIGBjaGFuLSZndDtwcml2YXRlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgb3IgYWx0ZXJzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZy4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBkdWUgdG8gYm91bmRzIGNoZWNrcyBvciBpbmNvcnJlY3QgbGVuZ3RoIGhhbmRsaW5nLgoKSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIG1vZGlmaWVkIGlvY3RsIGZ1bmN0aW9ucy4gSSBzZWUgYHBwcF9hc3luY19pb2N0bGAsIGBwcHBfc3luY19pb2N0bGAsIGBwcHRwX3BwcF9pb2N0bGAsIGFuZCBgcHBwb2F0bV9kZXZwcHBfaW9jdGxgIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGB2b2lkICpwcml2YXRlYCBjaGFuZ2UuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGBwcml2YXRlYCBpcyB1c2VkLiBGb3IgZXhhbXBsZSwgaW4gYHBwcG9hdG1fZGV2cHBwX2lvY3RsYCwgSSBzZWUgYHB1dF91c2VyKHB2Y2MtJmd0O2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZylgLiBIb3dldmVyLCB0aGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgY29kZSB3aGVyZSB0aGUgYHB2Y2NgIHBvaW50ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgZmllbGQsIHNvIG5vIGNoYW5nZSBpbiBob3cgdGhhdCBpcyBiZWluZyBoYW5kbGVkLiBJJiMzOTttIGNhcmVmdWxseSBjaGVja2luZyB0aGUgcG90ZW50aWFsIGZvciBjaGFuZ2VzIGluIHNlbWFudGljcywgYW5kIHZlcmlmeWluZyBob3cgdGhlIGRhdGEgdGhhdCBnZXRzIHJldHVybmVkIGZyb20gYW55IG9mIHRoZXNlIGlvY3RscyBpcyBzZXQuCgpCYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGVzZSBpb2N0bCBmdW5jdGlvbnMsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIHRoZSBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuIEl0IGlzIGEgc3RyYWlnaHQgcmVmYWN0b3IgdGhhdCBjaGFuZ2VzIHRoZSBhcmd1bWVudHMsIG5vdCB0aGUgZGF0YSB0aGV5IHBvaW50IHRvLCBzbyBubyBpc3N1ZXMgdGhlcmUuCgpUaGlzIGxvb2tzIGxpa2UgYSBwdXJlIHJlZmFjdG9yaW5nLCBwcmltYXJpbHkgYXJvdW5kIGNoYW5naW5nIHRoZSBjYWxsIHNpZ25hdHVyZXMgYW5kIGhvdyB3ZSBwYXNzIHRoZSBjb250ZXh0LCBtb3ZpbmcgZnJvbSBpbXBsaWNpdGx5IHBhc3NpbmcgYSBjaGFubmVsIHRvIGFuIGV4cGxpY2l0IHByaXZhdGUgY29udGV4dC4gVGhlIG9ubHkgcmVhbCB2dWxuZXJhYmlsaXR5IEkgZm9yZXNlZSBoZXJlIHdvdWxkIGJlIGEgdHlwZSBtaXNtYXRjaCBvciBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIOKAkyB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIGNhdXNlIGEgbW9yZSBnZW5lcmFsIGZhdWx0LgoKVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBjb2RlIHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4KCk5vdywgdGltZSB0byBkb3VibGUtY2hlY2sgbXkgd29yazoKCi0gICBgTmVlZHNLTVNBTjogZmFsc2VgCi0gICBgS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuYAoKTGV0JiMzOTtzIGRvIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIGNvbmZpZGVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwmIzM5O3MgYHByaXZhdGVgIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbGAgcG9pbnRlci5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCYjMzk7cyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBzaWduYXR1cmUgYW5kIGFyZ3VtZW50IHJlZmFjdG9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBidWZmZXJzLCBvciBwYWRkaW5nIGZpZWxkcywgbm9yIGRvZXMgaXQgYWx0ZXIgZGF0YSBjb3B5aW5nIGxvZ2ljIHRvIHVzZXJzcGFjZSBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb2ludGVyIG9yIHR5cGUgbWlzdXNlIGludHJvZHVjZWQgYnkgc3VjaCBhIHJlZmFjdG9yIHdvdWxkIG1hbmlmZXN0IGFzIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHR5cGUgY29uZnVzaW9uLCBvciBtZW1vcnkgYWNjZXNzIGZhdWx0cywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMyLjU2OTMxMzUzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODgyMzI2MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBQUFwiLFxuICAgIFwiUFBQX0FTWU5DXCIsXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUE9FXCIsXG4gICAgXCJQUFRQXCIsXG4gICAgXCJQUFBPQVRNXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiQVRNXCIsXG4gICAgXCJMMlRQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHVzaFwiLFxuICAgIFwicHBwX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHBfbXBfZXhwbG9kZVwiLFxuICAgIFwiX19wcHBfY2hhbm5lbF9wdXNoXCIsXG4gICAgXCJwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRcIixcbiAgICBcInBwcF9hc3luY19zZW5kXCIsXG4gICAgXCJwcHBfYXN5bmNfaW9jdGxcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIixcbiAgICBcInBwcF9zeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBvZV94bWl0XCIsXG4gICAgXCJwcHBvZV9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHB0cF94bWl0XCIsXG4gICAgXCJwcHRwX3BwcF9pb2N0bFwiLFxuICAgIFwicHBwb2F0bV9zZW5kXCIsXG4gICAgXCJwcHBvYXRtX2RldnBwcF9pb2N0bFwiLFxuICAgIFwicHBwb2wydHBfeG1pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxgIHBvaW50ZXIuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyAoc3RhcnRfeG1pdCwgaW9jdGwsIGZpbGxfZm9yd2FyZF9wYXRoKSBhY3Jvc3MgdGhlIGNvcmUgUFBQIGdlbmVyaWMgc3Vic3lzdGVtIGFuZCBzZXZlcmFsIGNoYW5uZWwgZHJpdmVycyAocHBwX2FzeW5jLCBwcHBfc3luY3R0eSwgcHBwb2UsIHBwdHAsIHBwcG9hdG0sIGwydHBfcHBwKSB0byBhY2NlcHQgdGhlIGNoYW5uZWwncyBwcml2YXRlIGRhdGEgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHN0cnVjdCBwcHBfY2hhbm5lbC4gQWxsIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0d29ya2luZyBzb2NrZXRzLCB0dHkgbGluZSBkaXNjaXBsaW5lcywgYW5kIC9kZXYvcHBwIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6MzIuNTY5MzIwNTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDQ3NDIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcXG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xcbitzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbiBcXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG5AQCAtMzIxLDEwICszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4tXFx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFx0aW50IF9fdXNlciAqcCA9IGFyZ3A7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcXG4gXFxuIFxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi4zYjgzZmY4Y2Y1ODk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzkwLDcgKzc5MCw3IEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdFxcdGNoYW4gPSBwY2gtXFx1MDAzZWNoYW47XFxuIFxcdFxcdFxcdGVyciA9IC1FTk9UVFk7XFxuIFxcdFxcdFxcdGlmIChjaGFuIFxcdTAwMjZcXHUwMDI2IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpXFxuLVxcdFxcdFxcdFxcdGVyciA9IGNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwoY2hhbiwgY21kLCBhcmcpO1xcbitcXHRcXHRcXHRcXHRlcnIgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsKGNoYW4tXFx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWNoYW5fc2VtKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTYwMyw3ICsxNjAzLDcgQEAgc3RhdGljIGludCBwcHBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0aWYgKCFjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4pO1xcbitcXHRyZXR1cm4gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xcbkBAIC0xOTMyLDcgKzE5MzIsNyBAQCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXQgPSBjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcXG4rXFx0XFx0cmV0ID0gY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KGNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYik7XFxuIFxcbiBvdXQ6XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZWRvd25sKTtcXG5AQCAtMjE0Miw3ICsyMTQyLDcgQEAgc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdC8qIHRyeSB0byBzZW5kIGl0IGRvd24gdGhlIGNoYW5uZWwgKi9cXG4gXFx0XFx0Y2hhbiA9IHBjaC1cXHUwMDNlY2hhbjtcXG4gXFx0XFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkgfHxcXG4tXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLCBmcmFnKSlcXG4rXFx0XFx0XFx0IWNoYW4tXFx1MDAzZW9wcy1cXHUwMDNlc3RhcnRfeG1pdChjaGFuLVxcdTAwM2Vwcml2YXRlLCBmcmFnKSlcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSwgZnJhZyk7XFxuIFxcdFxcdHBjaC1cXHUwMDNlaGFkX2ZyYWcgPSAxO1xcbiBcXHRcXHRwICs9IGZsZW47XFxuQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHBwX2NoYW5uZWxfcHVzaChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGlmIChwY2gtXFx1MDAzZWNoYW4pIHtcXG4gXFx0XFx0d2hpbGUgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSkpIHtcXG4gXFx0XFx0XFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBjaC1cXHUwMDNlZmlsZS54cSk7XFxuLVxcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLCBza2IpKSB7XFxuK1xcdFxcdFxcdGlmICghcGNoLVxcdTAwM2VjaGFuLVxcdTAwM2VvcHMtXFx1MDAzZXN0YXJ0X3htaXQocGNoLVxcdTAwM2VjaGFuLVxcdTAwM2Vwcml2YXRlLCBza2IpKSB7XFxuIFxcdFxcdFxcdFxcdC8qIHB1dCB0aGUgcGFja2V0IGJhY2sgYW5kIHRyeSBhZ2FpbiBsYXRlciAqL1xcbiBcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2cGNoLVxcdTAwM2VmaWxlLnhxLCBza2IpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBjaC1cXHUwMDNlY2hhbl9uZXQsIHBjaGItXFx1MDAzZWNoYW5fbmV0KSk7XFxuLVxcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4sIHNrYikpXFxuK1xcdGlmICghcGNoYi1cXHUwMDNlY2hhbi1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydF94bWl0KHBjaGItXFx1MDAzZWNoYW4tXFx1MDAzZXByaXZhdGUsIHNrYikpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXG4gb3V0bDpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcXG4gICogUHJvdG90eXBlcy5cXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tc3RhdGljIGludCBwcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuK3N0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XFxuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IHN5bmNwcHAgKmFwKTtcXG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXFxuICAqL1xcbiBzdGF0aWMgaW50XFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuK3BwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuLVxcdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXFx1MDAzZXByaXZhdGU7XFxuK1xcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XFxuIFxcdGludCBlcnIsIHZhbDtcXG4gXFx0dTMyIGFjY21bOF07XFxuIFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cXG4gICovXFxuIHN0YXRpYyBpbnRcXG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3BwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xcbiBcXG4gXFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuaW5kZXggYmY3NDE0YjQ2YTI2MC4uNzU4NDUzNTAzNTI1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXFxuQEAgLTg0MSw5ICs4NDEsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XFxuICAqXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gc3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxcbi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKnByaXZhdGUpXFxuIHtcXG4tXFx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcXG4gXFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXFx1MDAzZXBwcG9lX2RldjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcXG4gXFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcXHUwMDI2cG8tXFx1MDAzZXByb3RvLnBwdHA7XFxuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XFxuIFxcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHRwO1xcbiBcXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcXG4gc3RydWN0IHBwcF9jaGFubmVsX29wcyB7XFxuIFxcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxcbiBcXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cXG4tXFx0aW50XFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XFxuK1xcdGludFxcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG4gXFx0LyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgdGhhdCBoYXMgY29tZSBpbiB2aWEgL2Rldi9wcHAuICovXFxuLVxcdGludFxcdCgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xcbitcXHRpbnRcXHQoKmlvY3RsKSh2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XFxuIFxcdGludFxcdCgqZmlsbF9mb3J3YXJkX3BhdGgpKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICopO1xcbiB9O1xcbiBcXG4gc3RydWN0IHBwcF9jaGFubmVsIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmNcXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXFx1MDAzZXByaXZhdGUpO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXFxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cXG5AQCAtMjg2LDkgKzI4MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxcbiAgKi9cXG4gI2RlZmluZSBEUk9QX1BBQ0tFVCAxXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XFxuK1xcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxuIFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIH1cXG4gXFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxcbi1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbitcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbitcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuLVxcdFxcdHJldHVybiBwdXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXFx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXFxuLVxcdFxcdCAgICA/IC1FRkFVTFQgOiAwO1xcbitcXHRcXHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xcbiBcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4tXFx0XFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcXG4tXFx0XFx0ICAgID8gLUVGQVVMVCA6IDA7XFxuK1xcdFxcdHJldHVybiBnZXRfdXNlcihwdmNjLVxcdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FTk9UVFk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XFxuIFxcdHN0cnVjdCBzb2NrXFx0XFx0Kl9fc2s7XFx0XFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XFxuIFxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuQEAgLTMyNywxMSArMzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcXG4gICogbGVhdmUgdGhlIG9yaWdpbmFsIHNrYiB1bmZyZWVkIGlmIHdlIHJldHVybiBhbiBlcnJvci5cXG4gICovXFxuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBpbnQgcHBwb2wydHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWNoYW4tXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb247XFxuIFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsO1xcbitcXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xcbiBcXHRpbnQgdWhsZW4sIGhlYWRyb29tO1xcbiBcXG4gXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCAhKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMzLjE1MDU2NjQ5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTQzNTkwNzA0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5OGY3MDM3ODkzMTNlNWI4ODU5NTlmMmQ1YzQxZmIxYmM5N2Q1NGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIzOjE3OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5pbmRleCBlYTdmZTk2MDhmZmQ2Li5lMGJhNDQ4ZjI5N2NlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNcbkBAIC05MSwxMyArOTEsMTIgQEAgTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19mbHVzaF9vdXRwdXQoc3RydWN0IGFzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZixcbiBcdFx0XHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xuLXN0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZyk7XG4rc3RhdGljIGludCBwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gXG4gc3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcbkBAIC0zMjEsMTAgKzMyMCwxMCBAQCBwcHBfYXN5bmNfaW5pdCh2b2lkKVxuICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgcHJvdmlkZSB0aGUgUFBQIGNoYW5uZWwgaW50ZXJmYWNlLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfYXN5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXHRpbnQgX191c2VyICpwID0gYXJncDtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuQEAgLTU1MCw5ICs1NDksOSBAQCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYXN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IGFzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfYXN5bmNfcHVzaChhcCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uM2I4M2ZmOGNmNTg5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTc5MCw3ICs3OTAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0XHRlcnIgPSAtRU5PVFRZO1xuIFx0XHRcdGlmIChjaGFuIFx1MDAyNlx1MDAyNiBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bClcbi1cdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4sIGNtZCwgYXJnKTtcbitcdFx0XHRcdGVyciA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZWlvY3RsKGNoYW4tXHUwMDNlcHJpdmF0ZSwgY21kLCBhcmcpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2gtXHUwMDNlY2hhbl9zZW0pO1xuIFx0XHR9XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTE2MDMsNyArMTYwMyw3IEBAIHN0YXRpYyBpbnQgcHBwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRpZiAoIWNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuKTtcbitcdHJldHVybiBjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgsIGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XG5AQCAtMTkzMiw3ICsxOTMyLDcgQEAgcHBwX3B1c2goc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgc2tiKTtcbitcdFx0cmV0ID0gY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChjaGFuLVx1MDAzZXByaXZhdGUsIHNrYik7XG4gXG4gb3V0OlxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuQEAgLTIxNDIsNyArMjE0Miw3IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovXG4gXHRcdGNoYW4gPSBwY2gtXHUwMDNlY2hhbjtcbiBcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEpIHx8XG4tXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbiwgZnJhZykpXG4rXHRcdFx0IWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBmcmFnKSlcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgZnJhZyk7XG4gXHRcdHBjaC1cdTAwM2VoYWRfZnJhZyA9IDE7XG4gXHRcdHAgKz0gZmxlbjtcbkBAIC0yMTc1LDcgKzIxNzUsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF9jaGFubmVsX3B1c2goc3RydWN0IGNoYW5uZWwgKnBjaCwgc3RydWN0IHBwcCAqcHBwKVxuIFx0aWYgKHBjaC1cdTAwM2VjaGFuKSB7XG4gXHRcdHdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSkge1xuIFx0XHRcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKTtcbi1cdFx0XHRpZiAoIXBjaC1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaC1cdTAwM2VjaGFuLCBza2IpKSB7XG4rXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKSB7XG4gXHRcdFx0XHQvKiBwdXQgdGhlIHBhY2tldCBiYWNrIGFuZCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiBcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjMwMCw3ICsyMzAwLDcgQEAgc3RhdGljIGJvb2wgcHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0KHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwY2gtXHUwMDNlY2hhbl9uZXQsIHBjaGItXHUwMDNlY2hhbl9uZXQpKTtcbi1cdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbiwgc2tiKSlcbitcdGlmICghcGNoYi1cdTAwM2VjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KHBjaGItXHUwMDNlY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpKVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBvdXRsOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbmluZGV4IGY4N2Q0M2ZhZWVhYjUuLjU0ZDg0MDJlMThjNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbkBAIC04MSw5ICs4MSw4IEBAIHN0cnVjdCBzeW5jcHBwIHtcbiAgKiBQcm90b3R5cGVzLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICopO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuLXN0YXRpYyBpbnQgcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0XHRcdCAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfc3luY19wcm9jZXNzKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7XG4gc3RhdGljIGludCBwcHBfc3luY19wdXNoKHN0cnVjdCBzeW5jcHBwICphcCk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBzeW5jcHBwICphcCk7XG5AQCAtMzEyLDkgKzMxMSw5IEBAIHBwcF9zeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbitwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IGVyciwgdmFsO1xuIFx0dTMyIGFjY21bOF07XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbkBAIC00OTEsOSArNDkwLDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gICogYXQgc29tZSBsYXRlciB0aW1lLlxuICAqL1xuIHN0YXRpYyBpbnRcbi1wcHBfc3luY19zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitwcHBfc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcbiBcdHBwcF9zeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbmluZGV4IGJmNzQxNGI0NmEyNjAuLjc1ODQ1MzUwMzUyNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbkBAIC04NDEsOSArODQxLDkgQEAgc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sXG4gICogc2VuZHMgUFBQIGZyYW1lIG92ZXIgUFBQb0Ugc29ja2V0XG4gICpcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4tc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9lX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xuQEAgLTg5NSw5ICs4OTUsOSBAQCBzdGF0aWMgaW50IHBwcG9lX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyBpbnQgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgsXG4tXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICB2b2lkICpwcml2YXRlKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tXHUwMDNlcHBwb2VfZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jXG5pbmRleCBhNzk3YTA2MDZmNmI0Li44ZjcxOTBkNzA2N2U5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuQEAgLTE0Niw5ICsxNDYsOSBAQCBzdGF0aWMgc3RydWN0IHJ0YWJsZSAqcHB0cF9yb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IHBwcG94X3NvY2sgKnBvLFxuIFx0cmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwdHBfeG1pdCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzb2NrICpzayA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzb2NrICpzayA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXHRzdHJ1Y3QgcHB0cF9vcHQgKm9wdCA9IFx1MDAyNnBvLVx1MDAzZXByb3RvLnBwdHA7XG5AQCAtNTczLDEwICs1NzMsOSBAQCBzdGF0aWMgaW50IHBwdHBfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IGtlcm4pXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHRwX3BwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5pbmRleCAyZjYzZTlhNmNjODg5Li5kOWNmYjhlZjBmZmFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmhcbkBAIC0yNywxMiArMjcsMTIgQEAgc3RydWN0IHBwcF9jaGFubmVsO1xuIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xuIFx0LyogU2VuZCBhIHBhY2tldCAob3IgbXVsdGlsaW5rIGZyYWdtZW50KSBvbiB0aGlzIGNoYW5uZWwuXG4gXHQgICBSZXR1cm5zIDEgaWYgaXQgd2FzIGFjY2VwdGVkLCAwIGlmIG5vdC4gKi9cbi1cdGludFx0KCpzdGFydF94bWl0KShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4rXHRpbnRcdCgqc3RhcnRfeG1pdCkodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbiBcdC8qIEhhbmRsZSBhbiBpb2N0bCBjYWxsIHRoYXQgaGFzIGNvbWUgaW4gdmlhIC9kZXYvcHBwLiAqL1xuLVx0aW50XHQoKmlvY3RsKShzdHJ1Y3QgcHBwX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbitcdGludFx0KCppb2N0bCkodm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpO1xuIFx0aW50XHQoKmZpbGxfZm9yd2FyZF9wYXRoKShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICosXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcbitcdFx0XHRcdCAgICAgdm9pZCAqKTtcbiB9O1xuIFxuIHN0cnVjdCBwcHBfY2hhbm5lbCB7XG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcHBvYXRtLmMgYi9uZXQvYXRtL3BwcG9hdG0uY1xuaW5kZXggNmRhNTJkMTJkZjY4ZS4uOTEzMzI0Zjk2ODVmNiAxMDA2NDRcbi0tLSBhL25ldC9hdG0vcHBwb2F0bS5jXG4rKysgYi9uZXQvYXRtL3BwcG9hdG0uY1xuQEAgLTkxLDExICs5MSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG9hdG1fdmNjICphdG12Y2NfdG9fcHZjYyhjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxuIFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cdTAwM2V1c2VyX2JhY2spO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqY2hhbl90b19wdmNjKGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBwcHBvYXRtX3ZjYyAqKSAoY2hhbi1cdTAwM2Vwcml2YXRlKTtcbi19XG4tXG4gLypcbiAgKiBXZSBjYW4ndCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gb3VyIF9wb3AgaGFuZGxlciwgc2luY2UgdGhlIHBwcCBjb2RlXG4gICogZG9lc24ndCB3YW50IHRvIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgc28gd2UgZG8gaXQgZnJvbVxuQEAgLTI4Niw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHBwcG9hdG1fbWF5X3NlbmQoc3RydWN0IHBwcG9hdG1fdmNjICpwdmNjLCBpbnQgc2l6ZSlcbiAgKiBhcyBzdWNjZXNzLCBqdXN0IHRvIGJlIGNsZWFyIHdoYXQgd2UncmUgcmVhbGx5IGRvaW5nLlxuICAqL1xuICNkZWZpbmUgRFJPUF9QQUNLRVQgMVxuLXN0YXRpYyBpbnQgcHBwb2F0bV9zZW5kKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9hdG1fc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGNoYW5fdG9fcHZjYyhjaGFuKTtcbitcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XG4gXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNjYsMTYgKzM2MSwxNiBAQCBzdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIC8qIFRoaXMgaGFuZGxlcyBpb2N0bHMgc2VudCB0byB0aGUgL2Rldi9wcHAgaW50ZXJmYWNlICovXG4tc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHR1bnNpZ25lZCBsb25nIGFyZylcbitzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuK1xuIFx0c3dpdGNoIChjbWQpIHtcbiBcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuLVx0XHRyZXR1cm4gcHV0X3VzZXIoY2hhbl90b19wdmNjKGNoYW4pLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpXG4tXHRcdCAgICA/IC1FRkFVTFQgOiAwO1xuK1x0XHRyZXR1cm4gcHV0X3VzZXIocHZjYy1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7XG4gXHRjYXNlIFBQUElPQ1NGTEFHUzpcbi1cdFx0cmV0dXJuIGdldF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIGdldF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBlZjhmZGZhZjA1MWQ0Li45ZTkzMmZkZGEzODcyIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiB7XG4gXHRzdHJ1Y3Qgc29ja1x0XHQqX19zaztcdFx0LyogQ29weSBvZiAuc2ssIGZvciBjbGVhbnVwICovXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7XG4gXHQuc3RhcnRfeG1pdCA9ICBwcHBvbDJ0cF94bWl0LFxuQEAgLTMyNywxMSArMzI3LDExIEBAIHN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHRoZSBza2IgaXQgc3VwcGxpZWQsIG5vdCBvdXIgY2xvbmVkIHNrYi4gU28gd2UgdGFrZSBjYXJlIHRvIGFsd2F5c1xuICAqIGxlYXZlIHRoZSBvcmlnaW5hbCBza2IgdW5mcmVlZCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICovXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiljaGFuLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uO1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWw7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0aW50IHVobGVuLCBoZWFkcm9vbTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay1cdTAwM2Vza19zdGF0ZSBcdTAwMjYgUFBQT1hfQ09OTkVDVEVEKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjMzLjE1MDU2ODExMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzAwNjQwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgQ2hhbm5lbCBPcHMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIGlkZW50aWZ5IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucywgYW5kIHBpbnBvaW50IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIHRoaXMgcmVmYWN0b3JpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXdvcmtpbmcgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgdGhlIGBzdGFydF94bWl0YCwgYGlvY3RsYCwgYW5kIGBmaWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb25zIHdpdGhpbiBgcHBwX2NoYW5uZWxfb3BzYCBhcmUgbm93IHRha2luZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBmdWxsIGBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGhvdyB0aGVzZSBvcGVyYXRpb25zIGFyZSBjYWxsZWQuXG5cblRoZSBmaWxlcyBhZmZlY3RlZCBhcmUgcHJldHR5IHdpZGUtcmFuZ2luZywgdG91Y2hpbmcgYSBsb3Qgb2YgdGhlIFBQUCBpbXBsZW1lbnRhdGlvbnM6IGBwcHBfYXN5bmMuY2AsIGBwcHBfZ2VuZXJpYy5jYCwgYHBwcF9zeW5jdHR5LmNgLCBgcHBwb2UuY2AsIGBwcHRwLmNgLCB0aGUgaW5jbHVkZSBmaWxlLCBgcHBwb2F0bS5jYCBhbmQgYGwydHBfcHBwLmNgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBpdOKAmXMgcHJvYmFibHkgcHJldHR5IGltcG9ydGFudC4gTm93LCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2ggYW5kIGRldGVybWluZSBob3cgdG8gc3RhcnQgZnV6emluZywgSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHRydXN0eSBgZ3JlcHBlcmAgdG9vbCB0byBzZWFyY2ggZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiBgcHBwX2NoYW5uZWxfb3BzYCBhbmQgb3RoZXIgY2FsbCBzaXRlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgYW5kIGhlbHAgbWUgZGV0ZXJtaW5lIHRoZSBicmVhZHRoIGFuZCBkZXB0aCBvZiB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6MzcuNTIwNjM2MTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDg2ODQ1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjM5LjgyOTMzMTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUxNzg2NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFBQUCBJbXBsZW1lbnRhdGlvbiBFeHBsb3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBQUFAgY2hhbm5lbCBzdHVmZiwgYW5kIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJyb2FkZXIgbGFuZHNjYXBlIHdpdGhpbiB0aGUga2VybmVsLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgaW1wbGVtZW50YXRpb25zLCBiZXlvbmQgdGhlIG9idmlvdXMgVENQL0lQIHJlYWxtPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IElTRE4sIG9yIG1heWJlIHNvbWUgb3RoZXIgb2JzY3VyZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgbGV2ZXJhZ2VzIGEgc2ltaWxhciBjaGFubmVsLWJhc2VkIGFwcHJvYWNoLiBJdCdzIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluLCBub3QganVzdCB0aGUgUFBQIGFzIGEgcHJvdG9jb2wuXG5cblRoZSBxdWlja2VzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgcHJvYmFibHkgYSBnb29kIGBncmVwcGVyYCBzZXNzaW9uLiBJJ2xsIHNlYXJjaCBmb3Iga2V5IGluZGljYXRvcnMgb2YgYSBQUFAgY2hhbm5lbCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIHVzYWdlcyBvZiBgcHBwX3JlZ2lzdGVyX2NoYW5uZWxgLiBUaGF0IGZ1bmN0aW9uIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBoYWxsbWFyayBvZiBhbnkgY29kZSB0aGF0J3MgdHJ5aW5nIHRvIGhvb2sgaW50byB0aGF0IGZyYW1ld29yay4gQW5kIHdoaWxlIEknbSBhdCBpdCwgSSdsbCBhbHNvIHNjYW4gZm9yIGluc3RhbmNlcyBvZiBgc3RydWN0IHBwcF9jaGFubmVsYC4gVGhhdCBzdHJ1Y3QgZGVmaW5pdGlvbiBpdHNlbGYgd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBpbnRlcmZhY2VzLCBhbmQgaG93IGRpZmZlcmVudCBtb2R1bGVzIG1pZ2h0IGludGVyYWN0LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbWFwIG9mIHRoZSBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NDIuMzQ3MTk5OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NTE4MTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfcmVnaXN0ZXJfY2hhbm5lbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTY2PVRoZSBnZW5lcmljIFBQUCBsYXllciBwcm92aWRlcyBzZXZlbiBmdW5jdGlvbnMgdG8gY2hhbm5lbHM6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC02Ny1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjY4OiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG9cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTY5LSAgbm90aWZ5IHRoZSBQUFAgZ2VuZXJpYyBsYXllciBvZiBpdHMgcHJlc2VuY2UuICBGb3IgZXhhbXBsZSwgc2V0dGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD0xMjk9aG93ZXZlciBpdCB3aXNoZXMuICBUaGUgY2hhbm5lbCBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgYGBtdHVgYCBhbmRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjEzMDpgYGhkcmxlbmBgIGZpZWxkcyBiZWZvcmUgY2FsbGluZyBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgpIGFuZCBub3QgY2hhbmdlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0xMzEtdGhlbSB1bnRpbCBhZnRlciBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgcmV0dXJucy4gIFRoZSBgYG10dWBgIGZpZWxkXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTIxMD1UaGUgZ2VuZXJpYyBsYXllciByZXF1aXJlcyB0aGVzZSBndWFyYW50ZWVzIGZyb20gdGhlIGNoYW5uZWw6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTIxMi0qIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjIxMzogIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgaXMgY2FsbGVkIHVudGlsIGFmdGVyIHRoZSBjYWxsIHRvXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMTQtICBwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCkgcmV0dXJucy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3QtMjIwLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9wcHBfZ2VuZXJpYy5yc3Q6MjIxOiogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBhbmQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIG11c3QgYmUgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC0yMjItICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE5PXBwcF9hc3luY3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTUyLVxcdGFwLVxcdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE1MzpcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNTQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTI3NDI9cHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI5MDAtLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsLiAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI5MDE6aW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yOTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTM2NjU9RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM2NjY6RVhQT1JUX1NZTUJPTChwcHBfcmVnaXN0ZXJfY2hhbm5lbCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzY2Ny1FWFBPUlRfU1lNQk9MKHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTE4PXBwcF9zeW5jX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE0OS1cXHRhcC1cXHUwMDNlY2hhbi5zcGVlZCA9IHNwZWVkO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjE1MDpcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE1MS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00MTU9c3RhdGljIGludCBwcHRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNDY5LVxcdHBvLVxcdTAwM2VjaGFuLmRpcmVjdF94bWl0ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjQ3MDpcXHRlcnJvciA9IHBwcF9yZWdpc3Rlcl9jaGFubmVsKFxcdTAwMjZwby1cXHUwMDNlY2hhbik7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy00NzEtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg9NjE9ZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNjMtLyogQXR0YWNoIGEgY2hhbm5lbCB0byBhIGdpdmVuIFBQUCB1bml0LiAqL1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaDo2NDpleHRlcm4gaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqKTtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNjUtXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYz0zODM9c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMC1cXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTE6XFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQxMi1cXHRpZiAoZXJyICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NDQuNTMyMzg5NTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEyNDY4MzAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aGluZXNzIEFzc2Vzc21lbnQ6IFBQUCBDaGFubmVsIE9wZXJhdGlvbnMgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgYHBwcF9jaGFubmVsX29wc2AgaW50ZXJmYWNlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgaW50ZXJmYWNlIOKAkyBgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBhcmUgbm93IHJlY2VpdmluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuYC4gVGhhdCdzIGEgcmVmYWN0b3JpbmcsIGFuZCBpdCdzIHRvdWNoaW5nIHF1aXRlIGEgYml0IG9mIGNvZGU6IGNvcmUgUFBQIChgcHBwX2dlbmVyaWMuY2ApLCBhc3luYy9zeW5jIHR0eSBkcml2ZXJzLCBQUFBvRSwgUFBUUCwgUFBQb0FUTSwgYW5kIEwyVFAgUFBQLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBkb2VzIGl0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgY29uc3VsdCB0aGUgcmVsZXZhbnQgZ3VpZGVsaW5lcy5cblxuU2VjdGlvbiAxIGNsZWFybHkgc3RhdGVzIHRoYXQgd2Ugc2hvdWxkbid0IGJsaW5kbHkgdHJ1c3QgXCJObyBGdW5jdGlvbmFsIENoYW5nZVwiIG9yIFwiUmVmYWN0b3JpbmdcIiBjbGFpbXMuIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgdG91Y2hlZCBkdXJpbmcgYSByZWZhY3RvciwgaXQgKm11c3QqIGJlIGZ1enplZC4gU2VjdGlvbiAzIHJlaW5mb3JjZXMgdGhpczogYW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgbWVhbnMgXCJXb3J0aEZ1enppbmcgPSB0cnVlLlwiXG5cbkdpdmVuIHRoYXQgUFBQIGFuZCBpdHMgYXNzb2NpYXRlZCBkcml2ZXJzIChhc3luYy9zeW5jIHR0eSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIEwyVFApIGFyZSBzb2Z0d2FyZSBuZXR3b3JraW5nIGRyaXZlcnMgYWNjZXNzZWQgdmlhIHN0YW5kYXJkIHN5c2NhbGxzIGxpa2Ugc29ja2V0cywgaW9jdGxzIG9uIGAvZGV2L3BwcGAsIGFuZCB0dHkgbGluZSBkaXNjaXBsaW5lcywgdGhleSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBjYW4gcmVhZGlseSBjb25zdHJ1Y3QgdGVzdCBjYXNlcyBhbmQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBwcm90b2NvbHMuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczogYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVxdWlyZWQgZm9yIGFsbCB0aGUgdG91Y2hlZCBjb2RlLiBUaGlzIG1lYW5zIHdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXM6IGBkcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNgLCBgZHJpdmVycy9uZXQvcHBwL3BwdHAuY2AsIGBuZXQvYXRtL3BwcG9hdG0uY2AsIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIHRob3NlIHBhdGhzIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDczLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjQ4LjY1NzA3NDg1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTU3OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfYXN5bmN8cHBwX3N5bmN0dHl8cHBwb2V8cHB0cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTA0OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9ODE9Y29uZmlnIFBQUF9NUFBFXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04OC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4OTpcXHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkwLVxcdCAgY29uZmlndXJpbmcgUFBUUCBjbGllbnRzIGFuZCBzZXJ2ZXJzIHRvIHV0aWxpemUgdGhpcyBtZXRob2QuXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMTY9Y29uZmlnIFBQUE9FXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjItXFx0ICBUbyB3b3JrIGluIGNsaWVudCBtb2RlLCBwcHBkIHZlcnNpb24gMi40LjIgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTIzOlxcdCAgVG8gd29yayBpbiBzZXJ2ZXIgbW9kZSwgdGhlIHBwcG9lLXNlcnZlciBjb21tYW5kIGZyb20gdGhlIFJQLVBQUG9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTI0LVxcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMjU6XFx0ICBcXHUwMDNjaHR0cHM6Ly9kaWFubmUuc2tvbGwuY2EvcHJvamVjdHMvcnAtcHBwb2UvXFx1MDAzZS5cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2OC1cXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNjk6XFx0ICBtb2RpZmllZCBwcHRwZCAocG9wdG9wKSB0byB3b3JrIGluIHNlcnZlciBtb2RlLlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3MDpcXHQgIFNlZSBodHRwOi8vYWNjZWwtcHB0cC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBob3cgdG9cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzEtXFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1BQUCkgKz0gcHBwX2dlbmVyaWMub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QUFBfQVNZTkMpICs9IHBwcF9hc3luYy5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX1BQUF9CU0RDT01QKSArPSBic2RfY29tcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1BQUF9NUFBFKSArPSBwcHBfbXBwZS5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19QUFBfU1lOQ19UVFkpICs9IHBwcF9zeW5jdHR5Lm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX1BQUE9YKSArPSBwcHBveC5vXFxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19QUFBPRSkgKz0gcHBwb2Uub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUFBUUCkgKz0gcHB0cC5vXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9ODQ9bW9kdWxlX3BhcmFtKGZsYWdfdGltZSwgaW50LCAwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6ODU6TU9EVUxFX1BBUk1fREVTQyhmbGFnX3RpbWUsIFxcXCJwcHBfYXN5bmM6IGludGVydmFsIGJldHdlZW4gZmxhZ2dlZCBwYWNrZXRzIChpbiBjbG9jayB0aWNrcylcXFwiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtODYtTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQUFAgYXN5bmMgc2VyaWFsIGNoYW5uZWwgbW9kdWxlXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9ODg9TU9EVUxFX0FMSUFTX0xESVNDKE5fUFBQKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM6c3RhdGljIGludCBwcHBfYXN5bmNfZW5jb2RlKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NDpzdGF0aWMgaW50IHBwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NTpzdGF0aWMgaW50IHBwcF9hc3luY19wdXNoKHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NjpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5NzpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfaW5wdXQoc3RydWN0IGFzeW5jcHBwICphcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05OC1cXHRcXHRcXHQgICAgY29uc3QgdTggKmZsYWdzLCBpbnQgY291bnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo5OTpzdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwMDpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDEtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTA2OlxcdC5zdGFydF94bWl0ID0gcHBwX2FzeW5jX3NlbmQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNzpcXHQuaW9jdGwgICAgICA9IHBwcF9hc3luY19pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTA4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTE5OnBwcF9hc3luY3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTQ1LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmFwLVxcdTAwM2VycXVldWUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoxNDY6XFx0dGFza2xldF9zZXR1cChcXHUwMDI2YXAtXFx1MDAzZXRzaywgcHBwX2FzeW5jX3Byb2Nlc3MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xNDctXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjE3MjpwcHBfYXN5bmN0dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xOTM9c3RhdGljIHNzaXplX3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MTk0OnBwcF9hc3luY3R0eV9yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xOTUtXFx0XFx0ICBzaXplX3QgY291bnQsIHZvaWQgKipjb29raWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIwND1zdGF0aWMgc3NpemVfdFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyMDU6cHBwX2FzeW5jdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yMDYtXFx0XFx0ICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTIxNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjIxNzpwcHBfYXN5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTIxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjQzLVxcdFxcdGlmIChhcmcgPT0gVENJT0ZMVVNIIHx8IGFyZyA9PSBUQ09GTFVTSClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MjQ0OlxcdFxcdFxcdHBwcF9hc3luY19mbHVzaF9vdXRwdXQoYXApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNDUtXFx0XFx0ZXJyID0gbl90dHlfaW9jdGxfaGVscGVyKHR0eSwgY21kLCBhcmcpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI2ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNjU6cHBwX2FzeW5jdHR5X3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmJ1ZiwgY29uc3QgdTggKmNmbGFncyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMjY2LVxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI3My1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXAtXFx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyNzQ6XFx0cHBwX2FzeW5jX2lucHV0KGFwLCBidWYsIGNmbGFncywgY291bnQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yNzUtXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXAtXFx1MDAzZXJlY3ZfbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI4MT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzoyODI6cHBwX2FzeW5jdHR5X3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0yODMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTI5ND1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX2xkaXNjID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTI5Ny1cXHQubmFtZVxcdD0gXFxcInBwcFxcXCIsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI5ODpcXHQub3BlblxcdD0gcHBwX2FzeW5jdHR5X29wZW4sXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjI5OTpcXHQuY2xvc2VcXHQ9IHBwcF9hc3luY3R0eV9jbG9zZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAwOlxcdC5yZWFkXFx0PSBwcHBfYXN5bmN0dHlfcmVhZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzAxOlxcdC53cml0ZVxcdD0gcHBwX2FzeW5jdHR5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzozMDI6XFx0LmlvY3RsXFx0PSBwcHBfYXN5bmN0dHlfaW9jdGwsXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjMwMzpcXHQucmVjZWl2ZV9idWYgPSBwcHBfYXN5bmN0dHlfcmVjZWl2ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA0OlxcdC53cml0ZV93YWtldXAgPSBwcHBfYXN5bmN0dHlfd2FrZXVwLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0zMDUtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMDc9c3RhdGljIGludCBfX2luaXRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzA4OnBwcF9hc3luY19pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTMwOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM9MzIyPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6MzIzOnBwcF9hc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtMzI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MTQtICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQxNTpzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTQxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDI3LVxcdC8qIHRyeSB0byBwdXNoIG1vcmUgc3R1ZmYgb3V0ICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQyODpcXHRpZiAodGVzdF9iaXQoWE1JVF9XQUtFVVAsIFxcdTAwMjZhcC1cXHUwMDNleG1pdF9mbGFncykgXFx1MDAyNlxcdTAwMjYgcHBwX2FzeW5jX3B1c2goYXApKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00MjktXFx0XFx0cHBwX291dHB1dF93YWtldXAoXFx1MDAyNmFwLVxcdTAwM2VjaGFuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz00NTI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo0NTM6cHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy00NTQte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTU1MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU1MjpwcHBfYXN5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU1NS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTU2OlxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTU2Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NTYzOlxcdHBwcF9hc3luY19wdXNoKGFwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNTY0LVxcdHJldHVybiAxO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTU3MD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjU3MTpwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy01NzIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTYwMy1cXHRcXHRpZiAoYXAtXFx1MDAzZW9wdHIgXFx1MDAzZT0gYXAtXFx1MDAzZW9saW0gXFx1MDAyNlxcdTAwMjYgYXAtXFx1MDAzZXRwa3QpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NjA0OlxcdFxcdFxcdGlmIChwcHBfYXN5bmNfZW5jb2RlKGFwKSkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02MDUtXFx0XFx0XFx0XFx0LyogZmluaXNoZWQgcHJvY2Vzc2luZyBhcC1cXHUwMDNldHBrdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTY1MD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo2NTE6cHBwX2FzeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy02NTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTc1ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYzo3NTU6cHBwX2FzeW5jX2lucHV0KHN0cnVjdCBhc3luY3BwcCAqYXAsIGNvbnN0IHU4ICpidWYsIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy03NTYte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTg3Mz1zdGF0aWMgdm9pZCBhc3luY19sY3BfcGVlayhzdHJ1Y3QgYXN5bmNwcHAgKmFwLCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTkzOC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTM5OnN0YXRpYyB2b2lkIF9fZXhpdCBwcHBfYXN5bmNfY2xlYW51cCh2b2lkKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy05NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTk0My1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ0Om1vZHVsZV9pbml0KHBwcF9hc3luY19pbml0KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6OTQ1Om1vZHVsZV9leGl0KHBwcF9hc3luY19jbGVhbnVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTEwMT1wcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwMy1cXHRpZiAobmFtZSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwNDpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwicHBwX3N5bmN0dHk6ICVzLCBjb3VudCA9ICVkXFxcXG5cXFwiLCBuYW1lLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA1LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDg6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4NT1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTItXFx0LndyaXRlXFx0PSBwcHBfc3luY193cml0ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyOTM6XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTQtXFx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1LSAqXFx0XFx0KE9oLCBCVFcsIHRoaXMgb25lIGlzIFlZTU1ERCwgaW4gY2FzZSB5b3Ugd2VyZSB3b25kZXJpbmcgLi4uKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE2OiAqIDIyMDEwMiA6XFx0Rml4IG1vZHVsZSB1c2UgY291bnQgb24gZmFpbHVyZSBpbiBwcHBvZV9jcmVhdGUsIHBwcG94X3NrIC1hY21lXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTctICogMDMwNzAwIDpcXHRGaXhlZCBjb25uZWN0IGxvZ2ljIHRvIGFsbG93IGZvciBkaXNjb25uZWN0Llxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjEtICogMDQwODAwIDpcXHRSZXNwZWN0IHJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc21zIG9uIG5ldC1kZXZpY2VzLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyOiAqIDIwMDgwMCA6XFx0Zml4IGtmcmVlKHNrYikgaW4gcHBwb2VfcmN2IChhY21lKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTIzLSAqXFx0XFx0TW9kdWxlIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBpbiB0aGUgcmlnaHQgc3BvdCBub3csXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjQtICpcXHRcXHRndWFyZHMgYWdhaW5zdCBzb2NrX3B1dCBub3QgYWN0dWFsbHkgZnJlZWluZyB0aGUgc2tcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyNTogKlxcdFxcdGluIHBwcG9lX3JlbGVhc2UuXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjYtICogMDUxMDAwIDpcXHRJbml0aWFsaXphdGlvbiBjbGVhbnVwLlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjgtICogMDUwMTAxIDpcXHRGaXggUEFEVCBwcm9jZXNzaW5nLlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI5OiAqIDE0MDUwMSA6XFx0VXNlIHBwcG9lX3Jjdl9jb3JlIHRvIGhhbmRsZSBhbGwgYmFja2xvZy4gKEFsZXhleSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMC0gKiAxNzA3MDEgOlxcdERvIG5vdCBsb2NrX3NvY2sgd2l0aCByd2xvY2sgaGVsZC4gKERhdmVNKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzItICpcXHRcXHRsb2NrZWQuIChEYXZlTSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozMzogKlxcdFxcdElnbm9yZSByZXR1cm4gdmFsdWUgb2YgZGV2X3F1ZXVlX3htaXQgaW4gX19wcHBvZV94bWl0XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQtICpcXHRcXHRvciBlbHNlIHdlIG1heSBrZnJlZSBhbiBTS0IgdHdpY2UuIChEYXZlTSlcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNTogKiAxOTA3MDEgOlxcdFdoZW4gZG9pbmcgY29waWVzIG9mIHNrYidzIGluIF9fcHBwb2VfeG1pdCwgYWx3YXlzIGRlbGV0ZVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM2LSAqXFx0XFx0dGhlIG9yaWdpbmFsIHNrYiB0aGF0IHdhcyBwYXNzZWQgaW4gb24gc3VjY2VzcywgbmV2ZXIgb25cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTg3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjg4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBwcG9lX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MS0vKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo5MjpzdGF0aWMgdW5zaWduZWQgaW50IHBwcG9lX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkzOnN0cnVjdCBwcHBvZV9uZXQge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTk0LVxcdC8qXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMTQ9c3RhdGljIGlubGluZSBib29sIHN0YWdlX3Nlc3Npb24oX19iZTE2IHNpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTExOC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxMTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEyMC17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTIxOlxcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTIyLX1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI0OnN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEyNS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xMjgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTI5OnN0YXRpYyBpbmxpbmUgaW50IGNtcF9hZGRyKHN0cnVjdCBwcHBvZV9hZGRyICphLCBfX2JlMTYgc2lkLCBjaGFyICphZGRyKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTEzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz0xMzg9c3RhdGljIHU4IGhhc2hfaXRlbShfX2JlMTYgc2lkLCBjb25zdCB1OCBhZGRyW0VUSF9BTEVOXSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1Ny0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxNTg6c3RhdGljIHN0cnVjdCBwcHBveF9zb2NrICpfX2dldF9pdGVtKHN0cnVjdCBwcHBvZV9uZXQgKnBuLCBfX2JlMTYgc2lkLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE1OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgaWZpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE2NS1cXHR3aGlsZSAocmV0KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTY2OlxcdFxcdGlmIChjbXBfYWRkcihcXHUwMDI2cmV0LVxcdTAwM2VwcHBvZV9wYSwgc2lkLCBhZGRyKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE2NzpcXHRcXHQgICAgcmV0LVxcdTAwM2VwcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMTY4LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xNzUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc2OnN0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3Ny17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MTc4OlxcdGludCBoYXNoID0gaGFzaF9pdGVtKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsIHBvLVxcdTAwM2VwcHBvZV9wYS5yZW1vdGUpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE3OS1cXHRzdHJ1Y3QgcHBwb3hfc29jayAqcmV0LCAqZmlyc3Q7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODMtXFx0d2hpbGUgKHJldCkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjE4NDpcXHRcXHRpZiAoY21wXzJfYWRkcihcXHUwMDI2cmV0LVxcdTAwM2VwcHBvZV9wYSwgXFx1MDAyNnBvLVxcdTAwM2VwcHBvZV9wYSkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxODU6XFx0XFx0ICAgIHJldC1cXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBwby1cXHUwMDNlcHBwb2VfaWZpbmRleClcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQUxSRUFEWTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTE5Ni1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoxOTc6c3RhdGljIHZvaWQgX19kZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0xOTgtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMDYtXFx0d2hpbGUgKHJldCkge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIwNzpcXHRcXHRpZiAoY21wX2FkZHIoXFx1MDAyNnJldC1cXHUwMDNlcHBwb2VfcGEsIHNpZCwgYWRkcikgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzoyMDg6XFx0XFx0ICAgIHJldC1cXHUwMDNlcHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjA5LVxcdFxcdFxcdHN0cnVjdCBwcHBveF9zb2NrICpuZXh0O1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjI2LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjIyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMjgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yMzgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjM5OnN0YXRpYyBpbmxpbmUgdm9pZCBkZWxldGVfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNDAtXFx0XFx0XFx0XFx0XFx0Y2hhciAqYWRkciwgaW50IGlmaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU0OnN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1NS17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU2OlxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI1Ny1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNTgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjU5OlxcdHBuID0gcHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjYwLVxcdHNwaW5fbG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yNjYtXFx0XFx0d2hpbGUgKHBvKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MjY3OlxcdFxcdFxcdHdoaWxlIChwbyBcXHUwMDI2XFx1MDAyNiBwby1cXHUwMDNlcHBwb2VfZGV2ICE9IGRldikge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI2OC1cXHRcXHRcXHRcXHRwbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocG8tXFx1MDAzZW5leHQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yODgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mjg5OlxcdFxcdFxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2ID09IGRldiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTI5MC1cXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwMjYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMjkyLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjI5MzpcXHRcXHRcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gTlVMTDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0yOTQtXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMwNTpcXHRcXHRcXHRCVUdfT04ocHBwb2VfcGVybmV0KGRldl9uZXQoZGV2KSkgPT0gTlVMTCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzA2LVxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cG4tXFx1MDAzZWhhc2hfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMTMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzE0OnN0YXRpYyBpbnQgcHBwb2VfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMTUtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzI5LVxcdFxcdC8qIEZpbmQgZXZlcnkgc29ja2V0IG9uIHRoaXMgZGV2aWNlIGFuZCBraWxsIGl0LiAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjMzMDpcXHRcXHRwcHBvZV9mbHVzaF9kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy0zMzktXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQwOnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBwb2Vfbm90aWZpZXIgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzQxOlxcdC5ub3RpZmllcl9jYWxsID0gcHBwb2VfZGV2aWNlX2V2ZW50LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM0Mi19O1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzQ4LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzozNDk6c3RhdGljIGludCBwcHBvZV9yY3ZfY29yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM3Ni0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Mzc3OnN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzc4LVxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM3OS17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgwOlxcdHN0cnVjdCBwcHBvZV9oZHIgKnBoO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM4MS1cXHRzdHJ1Y3QgcHBwb3hfc29jayAqcG87XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6MzgyOlxcdHN0cnVjdCBwcHBvZV9uZXQgKnBuO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM4My1cXHRpbnQgbGVuO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtMzk3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjM5ODpcXHRwaCA9IHBwcG9lX2hkcihza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTM5OS1cXHRsZW4gPSBudG9ocyhwaC1cXHUwMDNlbGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQxMy1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTQ6XFx0cGggPSBwcHBvZV9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MTU6XFx0cG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MTYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00MjgtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDI5OnN0YXRpYyB2b2lkIHBwcG9lX3VuYmluZF9zb2NrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMC17XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDMxLVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHBwb3hfc29jayxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0MzI6XFx0XFx0XFx0XFx0XFx0ICAgICBwcm90by5wcHBvZS5wYWR0X3dvcmspO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzMy1cXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cG8tXFx1MDAzZXNrO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDM1LVxcdGxvY2tfc29jayhzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM2OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM3OlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NDM4OlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQzOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NTAtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ1MTpzdGF0aWMgaW50IHBwcG9lX2Rpc2NfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDUyLVxcdFxcdFxcdCAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU0LXtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTU6XFx0c3RydWN0IHBwcG9lX2hkciAqcGg7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU2LVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NTc6XFx0c3RydWN0IHBwcG9lX25ldCAqcG47XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNDY1LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ2NjpcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ2Ny1cXHRcXHRnb3RvIGFib3J0O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ2OC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0Njk6XFx0cGggPSBwcHBvZV9oZHIoc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzAtXFx0aWYgKHBoLVxcdTAwM2Vjb2RlICE9IFBBRFRfQ09ERSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0NzM6XFx0cG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzQtXFx0cG8gPSBnZXRfaXRlbShwbiwgcGgtXFx1MDAzZXNpZCwgZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSwgZGV2LVxcdTAwM2VpZmluZGV4KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00NzUtXFx0aWYgKHBvKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ3NjpcXHRcXHRpZiAoIXNjaGVkdWxlX3dvcmsoXFx1MDAyNnBvLVxcdTAwM2Vwcm90by5wcHBvZS5wYWR0X3dvcmspKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ3Ny1cXHRcXHRcXHRzb2NrX3B1dChcXHUwMDI2cG8tXFx1MDAzZXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0ODU6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZXNfcHR5cGUgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00ODYtXFx0LnR5cGVcXHQ9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjQ4NzpcXHQuZnVuY1xcdD0gcHBwb2VfcmN2LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OC19O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ4OS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTA6c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHBvZWRfcHR5cGUgX19yZWFkX21vc3RseSA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy00OTEtXFx0LnR5cGVcXHQ9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9ESVNDKSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTI6XFx0LmZ1bmNcXHQ9IHBwcG9lX2Rpc2NfcmN2LFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5My19O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo0OTU6c3RhdGljIHN0cnVjdCBwcm90byBwcHBvZV9za19wcm90byBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTQ5Ni1cXHQubmFtZVxcdCAgPSBcXFwiUFBQT0VcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTAwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUwMTpzdGF0aWMgdm9pZCBwcHBvZV9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUxMC0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1MTE6c3RhdGljIGludCBwcHBvZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybilcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTE0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUxNTpcXHRzayA9IHNrX2FsbG9jKG5ldCwgUEZfUFBQT1gsIEdGUF9LRVJORUwsIFxcdTAwMjZwcHBvZV9za19wcm90bywga2Vybik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTE2LVxcdGlmICghc2spXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MjItXFx0c29jay1cXHUwMDNlc3RhdGVcXHQ9IFNTX1VOQ09OTkVDVEVEO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyMzpcXHRzb2NrLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTI0LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNTpcXHRzay1cXHUwMDNlc2tfYmFja2xvZ19yY3ZcXHQ9IHBwcG9lX3Jjdl9jb3JlO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUyNjpcXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHBwcG9lX2Rlc3RydWN0O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTUyNy1cXHRzay1cXHUwMDNlc2tfc3RhdGVcXHRcXHQ9IFBQUE9YX05PTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01MzEtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTMyOlxcdElOSVRfV09SSyhcXHUwMDI2cHBwb3hfc2soc2spLVxcdTAwM2Vwcm90by5wcHBvZS5wYWR0X3dvcmssXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTMzOlxcdFxcdCAgcHBwb2VfdW5iaW5kX3NvY2tfd29yayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTM0LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTM3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjUzODpzdGF0aWMgaW50IHBwcG9lX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQxLVxcdHN0cnVjdCBwcHBveF9zb2NrICpwbztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NDI6XFx0c3RydWN0IHBwcG9lX25ldCAqcG47XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTQzLVxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NTUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU2OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU3OlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTU4OlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU1OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NjYtXFx0bmV0ID0gc29ja19uZXQoc2spO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU2NzpcXHRwbiA9IHBwcG9lX3Blcm5ldChuZXQpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU3MC1cXHQgKiBwcm90ZWN0IFxcXCJwb1xcXCIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXNcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzE6XFx0ICogb24gcHBwb2VfZmx1c2hfZGV2XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTcyLVxcdCAqL1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU3MzpcXHRkZWxldGVfaXRlbShwbiwgcG8tXFx1MDAzZXBwcG9lX3BhLnNpZCwgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo1NzQ6XFx0XFx0ICAgIHBvLVxcdTAwM2VwcHBvZV9pZmluZGV4KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01NzUtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01ODQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NTg1OnN0YXRpYyBpbnQgcHBwb2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdXNlcnZhZGRyLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTU4Ni1cXHRcXHRcXHQgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNTkxLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjU5MjpcXHRzdHJ1Y3QgcHBwb2VfbmV0ICpwbjtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy01OTMtXFx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYwOC1cXHRpZiAoKHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MDk6XFx0ICAgICBzdGFnZV9zZXNzaW9uKHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLnNpZCkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjEwLVxcdFxcdGdvdG8gZW5kO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjE0LVxcdGlmICgoc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwMjYgUFBQT1hfREVBRCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MTU6XFx0ICAgICAhc3RhZ2Vfc2Vzc2lvbihzcC1cXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQpKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYxNi1cXHRcXHRnb3RvIGVuZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyMC1cXHQvKiBEZWxldGUgdGhlIG9sZCBiaW5kaW5nICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjIxOlxcdGlmIChzdGFnZV9zZXNzaW9uKHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQpKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjIyLVxcdFxcdHBwcG94X3VuYmluZF9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjM6XFx0XFx0cG4gPSBwcHBvZV9wZXJuZXQoc29ja19uZXQoc2spKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2MjQ6XFx0XFx0ZGVsZXRlX2l0ZW0ocG4sIHBvLVxcdTAwM2VwcHBvZV9wYS5zaWQsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI1OlxcdFxcdFxcdCAgICBwby1cXHUwMDNlcHBwb2VfcGEucmVtb3RlLCBwby1cXHUwMDNlcHBwb2VfaWZpbmRleCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI2OlxcdFxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI3OlxcdFxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjI4OlxcdFxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTYyOS1cXHRcXHR9XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMwLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjYzMTpcXHRcXHRwby1cXHUwMDNlcHBwb2VfaWZpbmRleCA9IDA7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjMyOlxcdFxcdG1lbXNldChcXHUwMDI2cG8tXFx1MDAzZXBwcG9lX3BhLCAwLCBzaXplb2YocG8tXFx1MDAzZXBwcG9lX3BhKSk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjMzLVxcdFxcdG1lbXNldChcXHUwMDI2cG8tXFx1MDAzZWNoYW4sIDAsIHNpemVvZihwby1cXHUwMDNlY2hhbikpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQwLVxcdC8qIFJlLWJpbmQgaW4gc2Vzc2lvbiBzdGFnZSBvbmx5ICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjQxOlxcdGlmIChzdGFnZV9zZXNzaW9uKHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLnNpZCkpIHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NDItXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY0My1cXHRcXHRuZXQgPSBzb2NrX25ldChzayk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjQ0OlxcdFxcdGRldiA9IGRldl9nZXRfYnlfbmFtZShuZXQsIHNwLVxcdTAwM2VzYV9hZGRyLnBwcG9lLmRldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ1LVxcdFxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjQ3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0ODpcXHRcXHRwby1cXHUwMDNlcHBwb2VfZGV2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY0OTpcXHRcXHRwby1cXHUwMDNlcHBwb2VfaWZpbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTA6XFx0XFx0cG4gPSBwcHBvZV9wZXJuZXQobmV0KTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTEtXFx0XFx0aWYgKCEoZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY1NC1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NTU6XFx0XFx0bWVtY3B5KFxcdTAwMjZwby1cXHUwMDNlcHBwb2VfcGEsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjU2OlxcdFxcdCAgICAgICBcXHUwMDI2c3AtXFx1MDAzZXNhX2FkZHIucHBwb2UsXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjU3OlxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHBwcG9lX2FkZHIpKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NTgtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NjQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjY1OlxcdFxcdHBvLVxcdTAwM2VjaGFuLmhkcmxlbiA9IChzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikgK1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY2Ni1cXHRcXHRcXHRcXHQgICBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY2ODpcXHRcXHRwby1cXHUwMDNlY2hhbi5tdHUgPSBkZXYtXFx1MDAzZW10dSAtIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtIDI7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjY5LVxcdFxcdHBvLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBzaztcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYzo2NzA6XFx0XFx0cG8tXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9lX2NoYW5fb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3MS1cXHRcXHRwby1cXHUwMDNlY2hhbi5kaXJlY3RfeG1pdCA9IHRydWU7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02NzQtXFx0XFx0aWYgKGVycm9yKSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njc1OlxcdFxcdFxcdGRlbGV0ZV9pdGVtKHBuLCBwby1cXHUwMDNlcHBwb2VfcGEuc2lkLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjY3NjpcXHRcXHRcXHRcXHQgICAgcG8tXFx1MDAzZXBwcG9lX3BhLnJlbW90ZSwgcG8tXFx1MDAzZXBwcG9lX2lmaW5kZXgpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY3Ny1cXHRcXHRcXHRnb3RvIGVycl9wdXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02ODItXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjgzOlxcdHBvLVxcdTAwM2VudW0gPSBzcC1cXHUwMDNlc2FfYWRkci5wcHBvZS5zaWQ7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtNjg4LWVycl9wdXQ6XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njg5OlxcdGlmIChwby1cXHUwMDNlcHBwb2VfZGV2KSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjkwOlxcdFxcdGRldl9wdXQocG8tXFx1MDAzZXBwcG9lX2Rldik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6NjkxOlxcdFxcdHBvLVxcdTAwM2VwcHBvZV9kZXYgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy02OTUtXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6Njk2OnN0YXRpYyBpbnQgcHBwb2VfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jLTY5Ny1cXHRcXHQgIGludCBwZWVyKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo0OC43NDY2NjA3NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODIzOTQ4NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFUTSBhbmQgTDJUUCBjb25maWd1cmF0aW9ucy4gTXkgcGxhbiBpcyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBrZXkgZmlsZXMsIGJlZ2lubmluZyB3aXRoIHRoZSBNYWtlZmlsZXMgYW5kIEtjb25maWcgZmlsZXMgZm9yIGJvdGggQVRNIGFuZCBMMlRQOiBzcGVjaWZpY2FsbHksIGBuZXQvYXRtL01ha2VmaWxlYCwgYG5ldC9hdG0vS2NvbmZpZ2AsIGBuZXQvbDJ0cC9NYWtlZmlsZWAsIGFuZCBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoZXNlIHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzLCBidWlsZCBpbnN0cnVjdGlvbnMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIG9mIEFUTSBhbmQgTDJUUCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjay4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0aGUgc3Vic2VxdWVudCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1MC41NzA2MTQxOThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTM2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcG9hdG1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL01ha2VmaWxlPTEwPWF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5uZXQvYXRtL01ha2VmaWxlLTExLVxcbm5ldC9hdG0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcbi0tXFxubmV0L2F0bS9pb2N0bC5jPTQzPXN0YXRpYyBpbnQgZG9fdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvYXRtL2lvY3RsLmMtOTQtXFx0XFx0Y2FzZSBBVE1fQkFDS0VORF9QUFA6XFxubmV0L2F0bS9pb2N0bC5jOjk1OlxcdFxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJwcHBvYXRtXFxcIik7XFxubmV0L2F0bS9pb2N0bC5jLTk2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbm5ldC9hdG0vcHBwb2F0bS5jOjI6LyogbmV0L2F0bS9wcHBvYXRtLmMgLSBSRkMyMzY0IFBQUCBvdmVyIEFUTS9BQUw1ICovXFxubmV0L2F0bS9wcHBvYXRtLmMtMy1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ5LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjUwOmVudW0gcHBwb2F0bV9lbmNhcHMge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTUxLVxcdGVfYXV0b2RldGVjdCA9IFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QsXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy01NS1cXG5uZXQvYXRtL3BwcG9hdG0uYzo1NjpzdHJ1Y3QgcHBwb2F0bV92Y2Mge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTU3LVxcdHN0cnVjdCBhdG1fdmNjXFx0KmF0bXZjYztcXHQvKiBWQ0MgZGVzY3JpcHRvciAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNjItXFx0XFx0XFx0XFx0XFx0Lyoga2VlcCBvbGQgcHVzaC9wb3AgZm9yIGRldGFjaGluZyAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjYzOlxcdGVudW0gcHBwb2F0bV9lbmNhcHMgZW5jYXBzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTY0LVxcdGF0b21pY190IGluZmxpZ2h0O1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9ODY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHBwbGxjWzZdID0geyAweEZFLCAweEZFLCAweDAzLCAweENGLCAweEMwLCAweDIxIH07XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy04OC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo4OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy05MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6OTE6XFx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy05Mi19XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy05OC0gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzo5OTpzdGF0aWMgdm9pZCBwcHBvYXRtX3dha2V1cF9zZW5kZXIoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KVxcbm5ldC9hdG0vcHBwb2F0bS5jLTEwMC17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTAxOlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGZyb21fdGFza2xldChwdmNjLCB0LCB3YWtldXBfdGFza2xldCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtMTAyLVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTA1LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjEwNjpzdGF0aWMgdm9pZCBwcHBvYXRtX3JlbGVhc2VfY2Ioc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMDcte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjEwODpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBhdG12Y2NfdG9fcHZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTEwOS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTAtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTE6XFx0ICogQXMgaW4gcHBwb2F0bV9wb3AoKSwgaXQncyBzYWZlIHRvIGNsZWFyIHRoZSBCTE9DS0VEIGJpdCBoZXJlIGJlY2F1c2VcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMTI6XFx0ICogdGhlIHdha2V1cCAqY2FuJ3QqIHJhY2Ugd2l0aCBwcHBvYXRtX3NlbmQoKS4gVGhleSBib3RoIGhvbGQgdGhlIFBQUFxcbm5ldC9hdG0vcHBwb2F0bS5jLTExMy1cXHQgKiBjaGFubmVsJ3MgLVxcdTAwM2Vkb3dubCBsb2NrLiBBbmQgdGhlIHBvdGVudGlhbCByYWNlIHdpdGggKnNldHRpbmcqIGl0LFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNDpcXHQgKiB3aGljaCBsZWFkcyB0byB0aGUgZG91YmxlLWNoZWNrIGRhbmNlIGluIHBwcG9hdG1fbWF5X3NlbmQoKSwgZG9lc24ndFxcbm5ldC9hdG0vcHBwb2F0bS5jOjExNTpcXHQgKiBleGlzdCBoZXJlLiBJbiB0aGUgc29ja19vd25lZF9ieV91c2VyKCkgY2FzZSBpbiBwcHBvYXRtX3NlbmQoKSwgd2VcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMTYtXFx0ICogc2V0IHRoZSBCTE9DS0VEIGJpdCB3aGlsZSB0aGUgc29ja2V0IGlzIHN0aWxsIGxvY2tlZC4gV2Uga25vdyB0aGF0XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMjgtICovXFxubmV0L2F0bS9wcHBvYXRtLmM6MTI5OnN0YXRpYyB2b2lkIHBwcG9hdG1fcG9wKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTMwLXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxMzE6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzItXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xMzgtXFx0ICogZmVhciBvZiByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2UgY2xlYXIgdGhlIEJMT0NLRUQgZmxhZyBqdXN0IGFzIHdlXFxubmV0L2F0bS9wcHBvYXRtLmM6MTM5OlxcdCAqIHJlZnVzZSBhbm90aGVyIHBhY2tldCBpbiBwcHBvYXRtX3NlbmQoKS4gVGhpcyB3YXMgcXVpdGUgaW5lZmZpY2llbnQuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQwLVxcdCAqXFxubmV0L2F0bS9wcHBvYXRtLmM6MTQxOlxcdCAqIEluIGZhY3QgaXQncyBPSy4gVGhlIFBQUCBjb3JlIHdpbGwgb25seSBldmVyIGNhbGwgcHBwb2F0bV9zZW5kKClcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDItXFx0ICogd2hpbGUgaG9sZGluZyB0aGUgY2hhbm5lbC1cXHUwMDNlZG93bmwgbG9jay4gQW5kIHBwcF9vdXRwdXRfd2FrZXVwKCkgYXNcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNDMtXFx0ICogY2FsbGVkIGJ5IHRoZSB0YXNrbGV0IHdpbGwgKmFsc28qIGdyYWIgdGhhdCBsb2NrLiBTbyBldmVuIGlmIGFub3RoZXJcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNDQ6XFx0ICogQ1BVIGlzIGluIHBwcG9hdG1fc2VuZCgpIHJpZ2h0IG5vdywgdGhlIHRhc2tsZXQgaXNuJ3QgZ29pbmcgdG8gcmFjZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0NS1cXHQgKiB3aXRoIGl0LiBUaGUgd2FrZXVwICp3aWxsKiBoYXBwZW4gYWZ0ZXIgdGhlIG90aGVyIENQVSBpcyBzYWZlbHkgb3V0XFxubmV0L2F0bS9wcHBvYXRtLmM6MTQ2OlxcdCAqIG9mIHBwcG9hdG1fc2VuZCgpIGFnYWluLlxcbm5ldC9hdG0vcHBwb2F0bS5jLTE0Ny1cXHQgKlxcbm5ldC9hdG0vcHBwb2F0bS5jOjE0ODpcXHQgKiBTbyBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpIGhhcyBhbHJlYWR5IHNldCB0aGUgQkxPQ0tFRCBiaXQgYW5kXFxubmV0L2F0bS9wcHBvYXRtLmMtMTQ5LVxcdCAqIGl0IGFib3V0IHRvIHJldHVybiwgdGhhdCdzIGZpbmUuIFdlIHRyaWdnZXIgYSB3YWtldXAgd2hpY2ggd2lsbFxcbm5ldC9hdG0vcHBwb2F0bS5jOjE1MDpcXHQgKiBoYXBwZW4gbGF0ZXIuIEFuZCBpZiB0aGUgQ1BVIGluIHBwcG9hdG1fc2VuZCgpICpoYXNuJ3QqIHNldCB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNTEtXFx0ICogQkxPQ0tFRCBiaXQgeWV0LCB0aGF0J3MgZmluZSB0b28gYmVjYXVzZSBvZiB0aGUgZG91YmxlIGNoZWNrIGluXFxubmV0L2F0bS9wcHBvYXRtLmM6MTUyOlxcdCAqIHBwcG9hdG1fbWF5X3NlbmQoKSB3aGljaCBpcyBjb21tZW50ZWQgdGhlcmUuXFxubmV0L2F0bS9wcHBvYXRtLmMtMTUzLVxcdCAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMTYxLSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE2MjpzdGF0aWMgdm9pZCBwcHBvYXRtX3VuYXNzaWduX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTE2My17XFxubmV0L2F0bS9wcHBvYXRtLmM6MTY0OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNjUtXFx0cHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzUtLyogQ2FsbGVkIHdoZW4gYW4gQUFMNSBQRFUgY29tZXMgaW4gKi9cXG5uZXQvYXRtL3BwcG9hdG0uYzoxNzY6c3RhdGljIHZvaWQgcHBwb2F0bV9wdXNoKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2F0bS9wcHBvYXRtLmMtMTc3LXtcXG5uZXQvYXRtL3BwcG9hdG0uYzoxNzg6XFx0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gYXRtdmNjX3RvX3B2Y2MoYXRtdmNjKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy0xNzktXFx0cHJfZGVidWcoXFxcIlxcXFxuXFxcIik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0xODQtXFx0XFx0bW9kdWxlID0gcHZjYy1cXHUwMDNlb2xkX293bmVyO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjE4NTpcXHRcXHRwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTE4Ni1cXHRcXHRhdG12Y2MtXFx1MDAzZXB1c2goYXRtdmNjLCBOVUxMKTtcXHQvKiBQYXNzIGFsb25nIGJhZCBuZXdzICovXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yMjgtXFxubmV0L2F0bS9wcHBvYXRtLmM6MjI5OnN0YXRpYyBpbnQgcHBwb2F0bV9tYXlfc2VuZChzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MsIGludCBzaXplKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTIzMC17XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTEtXFx0LypcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNTI6XFx0ICogV2UgbWF5IGhhdmUgcmFjZWQgd2l0aCBwcHBvYXRtX3BvcCgpLiBJZiBpdCByYW4gZm9yIHRoZVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI1My1cXHQgKiBsYXN0IHBhY2tldCBpbiB0aGUgcXVldWUsICpqdXN0KiBiZWZvcmUgd2Ugc2V0IHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNTktXFx0ICogcnVuIHRoZSB3YWtldXAgdGFza2xldC4gQW5vdGhlciB3YWtldXAgd2lsbCBuZXZlciBodXJ0Llxcbm5ldC9hdG0vcHBwb2F0bS5jOjI2MDpcXHQgKiBJZiBwcHBvYXRtX3BvcCgpIGlzIHJ1bm5pbmcgYnV0IGhhc24ndCBnb3QgYXMgZmFyIGFzIG1ha2luZ1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI2MS1cXHQgKiBzcGFjZSBvbiB0aGUgcXVldWUgeWV0LCB0aGVuIGl0IGhhc24ndCBjaGVja2VkIHRoZSBCTE9DS0VEXFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0yNjQtXFx0ICogdGFraW5nIHRoZSBQUFAgY2hhbm5lbCdzIC1cXHUwMDNlZG93bmwgbG9jaywgd2hpY2ggaXMgaGVsZCBieSB0aGVcXG5uZXQvYXRtL3BwcG9hdG0uYzoyNjU6XFx0ICogY29kZSBwYXRoIHRoYXQgY2FsbHMgcHBwb2F0bV9zZW5kKCksIGFuZCBpcyB0aHVzIGdvaW5nIHRvXFxubmV0L2F0bS9wcHBvYXRtLmMtMjY2LVxcdCAqIHdhaXQgZm9yIHVzIHRvIGZpbmlzaC5cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTI4My0jZGVmaW5lIERST1BfUEFDS0VUIDFcXG5uZXQvYXRtL3BwcG9hdG0uYzoyODQ6c3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYXRtL3BwcG9hdG0uYy0yODUte1xcbm5ldC9hdG0vcHBwb2F0bS5jOjI4NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTI4Ny1cXHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzE4LVxcdFxcdFxcdGlmIChuICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYXRtL3BwcG9hdG0uYzozMTk6XFx0XFx0XFx0ICAgICFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIG4tXFx1MDAzZXRydWVzaXplKSkge1xcbm5ldC9hdG0vcHBwb2F0bS5jLTMyMC1cXHRcXHRcXHRcXHRrZnJlZV9za2Iobik7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMjgtXFx0XFx0XFx0fVxcbm5ldC9hdG0vcHBwb2F0bS5jOjMyOTpcXHRcXHR9IGVsc2UgaWYgKCFwcHBvYXRtX21heV9zZW5kKHB2Y2MsIHNrYi1cXHUwMDNldHJ1ZXNpemUpKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTMzMC1cXHRcXHRcXHRnb3RvIG5vc3BhY2U7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy0zMzMtXFx0Y2FzZSBlX3ZjOlxcbm5ldC9hdG0vcHBwb2F0bS5jOjMzNDpcXHRcXHRpZiAoIXBwcG9hdG1fbWF5X3NlbmQocHZjYywgc2tiLVxcdTAwM2V0cnVlc2l6ZSkpXFxubmV0L2F0bS9wcHBvYXRtLmMtMzM1LVxcdFxcdFxcdGdvdG8gbm9zcGFjZTtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2My0vKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM2NDpzdGF0aWMgaW50IHBwcG9hdG1fZGV2cHBwX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsXFxubmV0L2F0bS9wcHBvYXRtLmMtMzY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM2Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6MzY3OlxcdHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IHByaXZhdGU7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzY4LVxcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtMzc3LVxcbm5ldC9hdG0vcHBwb2F0bS5jOjM3ODpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHtcXG5uZXQvYXRtL3BwcG9hdG0uYzozNzk6XFx0LnN0YXJ0X3htaXQgPSBwcHBvYXRtX3NlbmQsXFxubmV0L2F0bS9wcHBvYXRtLmM6MzgwOlxcdC5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTM4MS19O1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4Mi1cXG5uZXQvYXRtL3BwcG9hdG0uYzozODM6c3RhdGljIGludCBwcHBvYXRtX2Fzc2lnbl92Y2Moc3RydWN0IGF0bV92Y2MgKmF0bXZjYywgdm9pZCBfX3VzZXIgKmFyZylcXG5uZXQvYXRtL3BwcG9hdG0uYy0zODQte1xcbm5ldC9hdG0vcHBwb2F0bS5jLTM4NS1cXHRzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIGJlO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjM4NjpcXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzg3LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MDQtXFx0cHZjYy1cXHUwMDNlb2xkX3JlbGVhc2VfY2IgPSBhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDA1OlxcdHB2Y2MtXFx1MDAzZWVuY2FwcyA9IChlbnVtIHBwcG9hdG1fZW5jYXBzKSBiZS5lbmNhcHM7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDA2LVxcdHB2Y2MtXFx1MDAzZWNoYW4ucHJpdmF0ZSA9IHB2Y2M7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDA3OlxcdHB2Y2MtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnBwcG9hdG1fb3BzO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQwOC1cXHRwdmNjLVxcdTAwM2VjaGFuLm10dSA9IGF0bXZjYy1cXHUwMDNlcW9zLnR4dHAubWF4X3NkdSAtIFBQUF9IRFJMRU4gLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQwOS1cXHQgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxMDpcXHR0YXNrbGV0X3NldHVwKFxcdTAwMjZwdmNjLVxcdTAwM2V3YWtldXBfdGFza2xldCwgcHBwb2F0bV93YWtldXBfc2VuZGVyKTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00MTEtXFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXFx1MDAyNnB2Y2MtXFx1MDAzZWNoYW4pO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDE2LVxcdGF0bXZjYy1cXHUwMDNldXNlcl9iYWNrID0gcHZjYztcXG5uZXQvYXRtL3BwcG9hdG0uYzo0MTc6XFx0YXRtdmNjLVxcdTAwM2VwdXNoID0gcHBwb2F0bV9wdXNoO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxODpcXHRhdG12Y2MtXFx1MDAzZXBvcCA9IHBwcG9hdG1fcG9wO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQxOTpcXHRhdG12Y2MtXFx1MDAzZXJlbGVhc2VfY2IgPSBwcHBvYXRtX3JlbGVhc2VfY2I7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDIwLVxcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XFxuLS1cXG5uZXQvYXRtL3BwcG9hdG0uYy00MzItICovXFxubmV0L2F0bS9wcHBvYXRtLmM6NDMzOnN0YXRpYyBpbnQgcHBwb2F0bV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzNC1cXHR1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQzOC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0Mzk6XFx0aWYgKGNtZCAhPSBBVE1fU0VUQkFDS0VORCBcXHUwMDI2XFx1MDAyNiBhdG12Y2MtXFx1MDAzZXB1c2ggIT0gcHBwb2F0bV9wdXNoKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ0MC1cXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmMtNDUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm5ldC9hdG0vcHBwb2F0bS5jOjQ1MjpcXHRcXHRyZXR1cm4gcHBwb2F0bV9hc3NpZ25fdmNjKGF0bXZjYywgYXJncCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDUzLVxcdFxcdH1cXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ2My1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NjQ6c3RhdGljIHN0cnVjdCBhdG1faW9jdGwgcHBwb2F0bV9pb2N0bF9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDY1LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY2OlxcdC5pb2N0bFxcdD0gcHBwb2F0bV9pb2N0bCxcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjctfTtcXG5uZXQvYXRtL3BwcG9hdG0uYy00NjgtXFxubmV0L2F0bS9wcHBvYXRtLmM6NDY5OnN0YXRpYyBpbnQgX19pbml0IHBwcG9hdG1faW5pdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3MC17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDcxOlxcdHJlZ2lzdGVyX2F0bV9pb2N0bChcXHUwMDI2cHBwb2F0bV9pb2N0bF9vcHMpO1xcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3NC1cXG5uZXQvYXRtL3BwcG9hdG0uYzo0NzU6c3RhdGljIHZvaWQgX19leGl0IHBwcG9hdG1fZXhpdCh2b2lkKVxcbm5ldC9hdG0vcHBwb2F0bS5jLTQ3Ni17XFxubmV0L2F0bS9wcHBvYXRtLmM6NDc3OlxcdGRlcmVnaXN0ZXJfYXRtX2lvY3RsKFxcdTAwMjZwcHBvYXRtX2lvY3RsX29wcyk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDc4LX1cXG5uZXQvYXRtL3BwcG9hdG0uYy00NzktXFxubmV0L2F0bS9wcHBvYXRtLmM6NDgwOm1vZHVsZV9pbml0KHBwcG9hdG1faW5pdCk7XFxubmV0L2F0bS9wcHBvYXRtLmM6NDgxOm1vZHVsZV9leGl0KHBwcG9hdG1fZXhpdCk7XFxubmV0L2F0bS9wcHBvYXRtLmMtNDgyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1MC42NTE1NTg0MjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTA1OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEwyVFAvUFBQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFdoZW4gSSBzZWUgYGwydHBfcHBwYCBtZW50aW9uZWQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbywgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIHRoZSBgbmV0L2wydHAvTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhhdCBgbDJ0cF9wcHBgIGNvbXBvbmVudCBpcyBoYW5kbGVkIGR1cmluZyBjb21waWxhdGlvbiwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgZ2VuZXJhbGx5IGhvdyBpdCdzIGludGVncmF0ZWQuIFRoZW4sIG5hdHVyYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCdzIGluIHRoZSBtZW51Y29uZmlnIHJlbGF0ZWQgdG8gUFBQIHN1cHBvcnQgd2l0aGluIEwyVFAuIFRoYXQgbWVhbnMgYSBsb29rIGludG8gYG5ldC9sMnRwL0tjb25maWdgLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgYGwydHBfcHBwYCBpcyBleHBvc2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCBzZXR0aW5ncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBCZXR3ZWVuIHRob3NlIHR3byBmaWxlcywgSSBzaG91bGQgZ2V0IGEgcHJldHR5IGdvb2QgaGFuZGxlIG9uIHdoYXQgdGhlIHN5c3RlbSBleHBlY3RzIHdpdGggdGhpcyBQUFAgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTk4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTIuNjEyNjIxNDY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjIxMzA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX3BwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9NYWtlZmlsZT04PUNGTEFHU19sMnRwX2NvcmUubyArPSAtSSQoc3JjKVxcbi0tXFxubmV0L2wydHAvTWFrZWZpbGUtMTAtIyBCdWlsZCBsMnRwIGFzIG1vZHVsZXMgaWYgTDJUUCBpcyBNXFxubmV0L2wydHAvTWFrZWZpbGU6MTE6b2JqLSQoc3Vic3QgeSwkKENPTkZJR19MMlRQKSwkKENPTkZJR19QUFBPTDJUUCkpICs9IGwydHBfcHBwLm9cXG5uZXQvbDJ0cC9NYWtlZmlsZS0xMi1vYmotJChzdWJzdCB5LCQoQ09ORklHX0wyVFApLCQoQ09ORklHX0wyVFBfSVApKSArPSBsMnRwX2lwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTIuNjg4ODQwNTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NjI5NDAxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ09ORklHIGRlcGVuZGVuY2llcyBmb3IgdGhlIFBQUCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2UgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLiBJIGtub3cgdGhpcyBmaWxlIGhvbGRzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgdGhleSByZWx5IG9uLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBsaW5raW5nIHNwZWNpZmljIFBQUCBkcml2ZXJzIHRvIGJyb2FkZXIgbmV0d29yayBzdGFjayBmZWF0dXJlcywgaGFyZHdhcmUgc3VwcG9ydCwgb3IgZXZlbiBvdGhlciBQUFAtcmVsYXRlZCBtb2R1bGVzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIHJlcXVpcmVkIGVsZW1lbnRzIGZvciB0aGlzIGFzcGVjdC4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVyaWVuY2UuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1NC41NTE3ODM2MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcbiAgNDE6XFx0XFx0ICB0aGUgTFpXIGNvbXByZXNzaW9uIG1ldGhvZCB0byBjb21wcmVzcyBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzXFxuICA0MjpcXHRcXHQgIHNlbnQgb3ZlciB0aGUgd2lyZS4gVGhlIG1hY2hpbmUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgUFBQIGxpbmtcXG4gIDQzOlxcdFxcdCAgKHVzdWFsbHkgeW91ciBJU1ApIGhhcyB0byBzdXBwb3J0IHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXG4gIDQ0OlxcdFxcdCAgbWV0aG9kIGFzIHdlbGwgZm9yIHRoaXMgdG8gYmUgdXNlZnVsLiBFdmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCxcXG4gIDQ1OlxcdFxcdCAgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHQgIFRoZSBQUFAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKFxcXCJQUFAgRGVmbGF0ZSBjb21wcmVzc2lvblxcXCIsXFxuICA0ODpcXHRcXHQgIGFib3ZlKSBpcyBwcmVmZXJhYmxlIHRvIEJTRC1Db21wcmVzcywgYmVjYXVzZSBpdCBjb21wcmVzc2VzIGJldHRlclxcbiAgNDk6XFx0XFx0ICBhbmQgaXMgcGF0ZW50LWZyZWUuXFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBCU0QgY29tcHJlc3Npb24gY29kZSB3aWxsIGFsd2F5cyBiZSBjb21waWxlZCBhcyBhXFxuICA1MjpcXHRcXHQgIG1vZHVsZTsgaXQgaXMgY2FsbGVkIGJzZF9jb21wIGFuZCB3aWxsIHNob3cgdXAgaW4gdGhlIGRpcmVjdG9yeVxcbiAgNTM6XFx0XFx0ICBtb2R1bGVzIG9uY2UgeW91IGhhdmUgc2FpZCBcXFwibWFrZSBtb2R1bGVzXFxcIi4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0Y29uZmlnIFBQUF9ERUZMQVRFXFxuICA1NjpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuICA1NzpcXHRcXHRzZWxlY3QgWkxJQl9JTkZMQVRFXFxuICA1ODpcXHRcXHRzZWxlY3QgWkxJQl9ERUZMQVRFXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBEZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCBmb3IgUFBQLCB3aGljaCB1c2VzIHRoZVxcbiAgNjE6XFx0XFx0ICBEZWZsYXRlIGFsZ29yaXRobSAodGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgZ3ppcCB1c2VzKSB0byBjb21wcmVzc1xcbiAgNjI6XFx0XFx0ICBlYWNoIFBQUCBwYWNrZXQgYmVmb3JlIGl0IGlzIHNlbnQgb3ZlciB0aGUgd2lyZS4gIFRoZSBtYWNoaW5lIGF0IHRoZVxcbiAgNjM6XFx0XFx0ICBvdGhlciBlbmQgb2YgdGhlIFBQUCBsaW5rICh1c3VhbGx5IHlvdXIgSVNQKSBoYXMgdG8gc3VwcG9ydCB0aGVcXG4gIDY0OlxcdFxcdCAgRGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgYXMgd2VsbCBmb3IgdGhpcyB0byBiZSB1c2VmdWwuICBFdmVuIGlmXFxuICA2NTpcXHRcXHQgIHRoZXkgZG9uJ3Qgc3VwcG9ydCBpdCwgaXQgaXMgc2FmZSB0byBzYXkgWSBoZXJlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBQUFBfRklMVEVSXFxuICA3MDpcXHRcXHRib29sIFxcXCJQUFAgZmlsdGVyaW5nXFxcIlxcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZSBwYWNrZXRzIHBhc3Npbmcgb3ZlclxcbiAgNzM6XFx0XFx0ICBQUFAgaW50ZXJmYWNlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoaWNoIHBhY2tldHMgY291bnQgYXNcXG4gIDc0OlxcdFxcdCAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwXFxuICA3NTpcXHRcXHQgIGEgZGVtYW5kLWRpYWxlZCBsaW5rKSBhbmQgd2hpY2ggcGFja2V0cyBhcmUgdG8gYmUgZHJvcHBlZCBlbnRpcmVseS5cXG4gIDc2OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZFxcbiAgNzc6XFx0XFx0ICBhY3RpdmUtZmlsdGVyIG9wdGlvbnMgdG8gcHBwZC5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODA6XFx0XFxuICA4MTpcXHRjb25maWcgUFBQX01QUEVcXG4gIDgyOlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgTVBQRSBjb21wcmVzc2lvbiAoZW5jcnlwdGlvbilcXFwiXFxuICA4MzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XFxuICA4NDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBNUFBFIEVuY3J5cHRpb24gcHJvdG9jb2wsIGFzIGVtcGxveWVkIGJ5IHRoZVxcbiAgODc6XFx0XFx0ICBNaWNyb3NvZnQgUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIFNlZSBodHRwOi8vcHB0cGNsaWVudC5zb3VyY2Vmb3JnZS5uZXQvIGZvciBpbmZvcm1hdGlvbiBvblxcbiAgOTA6XFx0XFx0ICBjb25maWd1cmluZyBQUFRQIGNsaWVudHMgYW5kIHNlcnZlcnMgdG8gdXRpbGl6ZSB0aGlzIG1ldGhvZC5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFBQUF9NVUxUSUxJTktcXG4gIDkzOlxcdFxcdGJvb2wgXFxcIlBQUCBtdWx0aWxpbmsgc3VwcG9ydFxcXCJcXG4gIDk0OlxcdFxcdGhlbHBcXG4gIDk1OlxcdFxcdCAgUFBQIG11bHRpbGluayBpcyBhIHByb3RvY29sIChkZWZpbmVkIGluIFJGQyAxOTkwKSB3aGljaCBhbGxvd3MgeW91XFxuICA5NjpcXHRcXHQgIHRvIGNvbWJpbmUgc2V2ZXJhbCAobG9naWNhbCBvciBwaHlzaWNhbCkgbGluZXMgaW50byBvbmUgbG9naWNhbCBQUFBcXG4gIDk3OlxcdFxcdCAgY29ubmVjdGlvbiwgc28gdGhhdCB5b3UgY2FuIHV0aWxpemUgeW91ciBmdWxsIGJhbmR3aWR0aC5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ICBUaGlzIGhhcyB0byBiZSBzdXBwb3J0ZWQgYXQgdGhlIG90aGVyIGVuZCBhcyB3ZWxsIGFuZCB5b3UgbmVlZCBhXFxuIDEwMDpcXHRcXHQgIHZlcnNpb24gb2YgdGhlIHBwcGQgZGFlbW9uIHdoaWNoIHVuZGVyc3RhbmRzIHRoZSBtdWx0aWxpbmsgcHJvdG9jb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjU0LjU1MTg5MDczNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMzNzQ4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyBhIHR5cGljYWwgY29uZmlndXJhdGlvbiBmaWxlIGhlcmUsIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBvZiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgYnVpbGQgb2YgdGhlIFBQUCAoUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wpIG5ldHdvcmsgc3RhY2sgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgaGVscCB0ZXh0LCBhbmQgdGhlIG92ZXJhbGwgb3JnYW5pemF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBkaWZmZXJlbnQgUFBQIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcywgbWF5YmUgdHJ5aW5nIHRvIGluZmVyIHRoZSBpbnRlbnRpb25zIG9mIHRoZSBkZXZlbG9wZXJzIHdobyBjcmVhdGVkIGl0LiBJJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gd2hpY2ggb3B0aW9ucyBkZXBlbmQgb24gd2hpY2ggdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyB0aGUgZmlsZSBoYW5kbGVzIHRoZSBjb21wbGV4aXRpZXMgb2YgZGlmZmVyZW50IFBQUCBpbXBsZW1lbnRhdGlvbnMuIElzIHRoaXMgb25lIHdlbGwtY29tbWVudGVkPyBIb3BlZnVsbHksIGl0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgb24gdGhlIGRlc2lnbiByYXRpb25hbGUgYmVoaW5kIFBQUCdzIG5ldHdvcmsgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTc6NTYuNzg1NjQzNjk4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGNvbmZpZyBQUFBPQVRNXFxuIDEwNTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbiAxMDY6XFx0XFx0ZGVwZW5kcyBvbiBBVE1cXG4gMTA3OlxcdFxcdGhlbHBcXG4gMTA4OlxcdFxcdCAgU3VwcG9ydCBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBlbmNhcHN1bGF0ZWQgaW4gQVRNIGZyYW1lcy5cXG4gMTA5OlxcdFxcdCAgVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB5ZXQgY29tcGx5IHdpdGggc2VjdGlvbiA4IG9mIFJGQzIzNjQsXFxuIDExMDpcXHRcXHQgIHdoaWNoIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIGlmIHRoZSBBVE0gcGVlciBsb3NlcyBzdGF0ZSBhbmRcXG4gMTExOlxcdFxcdCAgY2hhbmdlcyBpdHMgZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBQUFBPWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGVcXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIFBQUE9FXFxuIDExNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgRXRoZXJuZXRcXFwiXFxuIDExODpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgRXRoZXJuZXQuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgVG8gd29yayBpbiBjbGllbnQgbW9kZSwgcHBwZCB2ZXJzaW9uIDIuNC4yIG9yIGxhdGVyIGlzIHJlcXVpcmVkLlxcbiAxMjM6XFx0XFx0ICBUbyB3b3JrIGluIHNlcnZlciBtb2RlLCB0aGUgcHBwb2Utc2VydmVyIGNvbW1hbmQgZnJvbSB0aGUgUlAtUFBQb0VcXG4gMTI0OlxcdFxcdCAgcGFja2FnZSBpcyBhbHNvIHJlcXVpcmVkLCBhdmFpbGFibGUgYXRcXG4gMTI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZGlhbm5lLnNrb2xsLmNhL3Byb2plY3RzL3JwLXBwcG9lL1xcdTAwM2UuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNob2ljZVxcbiAxMjg6XFx0XFx0cHJvbXB0IFxcXCJOdW1iZXIgb2YgUFBQb0UgaGFzaCBiaXRzXFxcIlxcbiAxMjk6XFx0XFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxMzA6XFx0XFx0ZGVwZW5kcyBvbiBQUFBPRVxcbiAxMzE6XFx0XFx0aGVscFxcbiAxMzI6XFx0XFx0XFx0U2VsZWN0IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGZvciBoYXNoaW5nIFBQUG9FIGludGVyZmFjZXMuXFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdFxcdExhcmdlciBzaXplcyByZWR1Y2VzIHRoZSByaXNrIG9mIGhhc2ggY29sbGlzaW9ucyBhdCB0aGUgY29zdFxcbiAxMzU6XFx0XFx0XFx0b2Ygc2xpZ2h0bHkgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZS5cXG4gMTM2OlxcdFxcbiAxMzc6XFx0XFx0XFx0VGhpcyBoYXNoIHRhYmxlIGlzIG9uIGEgcGVyIG91dGVyIGV0aGVybmV0IGludGVyZmFjZS5cXG4gMTM4OlxcdFxcbiAxMzk6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXFxuIDE0MDpcXHRcXHRib29sIFxcXCIxIGJpdCAoMiBidWNrZXRzKVxcXCJcXG4gMTQxOlxcdFxcbiAxNDI6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXFxuIDE0MzpcXHRcXHRib29sIFxcXCIyIGJpdHMgKDQgYnVja2V0cylcXFwiXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxNDY6XFx0XFx0Ym9vbCBcXFwiNCBiaXRzICgxNiBidWNrZXRzKVxcXCJcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XFxuIDE0OTpcXHRcXHRib29sIFxcXCI4IGJpdHMgKDI1NiBidWNrZXRzKVxcXCJcXG4gMTUwOlxcdFxcbiAxNTE6XFx0ZW5kY2hvaWNlXFxuIDE1MjpcXHRcXG4gMTUzOlxcdGNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcXG4gMTU0OlxcdFxcdGludFxcbiAxNTU6XFx0XFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXFxuIDE1NjpcXHRcXHRkZWZhdWx0IDIgaWYgUFBQT0VfSEFTSF9CSVRTXzJcXG4gMTU3OlxcdFxcdGRlZmF1bHQgNCBpZiBQUFBPRV9IQVNIX0JJVFNfNFxcbiAxNTg6XFx0XFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XFxuIDE1OTpcXHRcXHRkZWZhdWx0IDRcXG4gMTYwOlxcdFxcbiAxNjE6XFx0Y29uZmlnIFBQVFBcXG4gMTYyOlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBJUHY0IChQUFRQKVxcXCJcXG4gMTYzOlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuIDE2NDpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTY1OlxcdFxcdGhlbHBcXG4gMTY2OlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQIG92ZXIgSVB2NC4oUG9pbnQtdG8tUG9pbnQgVHVubmVsaW5nIFByb3RvY29sKVxcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBwcGQgcGx1Z2luIHRvIHdvcmsgaW4gY2xpZW50IG1vZGUgb3JcXG4gMTY5OlxcdFxcdCAgbW9kaWZpZWQgcHB0cGQgKHBvcHRvcCkgdG8gd29yayBpbiBzZXJ2ZXIgbW9kZS5cXG4gMTcwOlxcdFxcdCAgU2VlIGh0dHA6Ly9hY2NlbC1wcHRwLnNvdXJjZWZvcmdlLm5ldC8gZm9yIGluZm9ybWF0aW9uIGhvdyB0b1xcbiAxNzE6XFx0XFx0ICB1dGlsaXplIHRoaXMgbW9kdWxlLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgUFBQT0wyVFBcXG4gMTc0OlxcdFxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQXFxuIDE3NjpcXHRcXHRzZWxlY3QgUFBQT1hcXG4gMTc3OlxcdFxcdGhlbHBcXG4gMTc4OlxcdFxcdCAgU3VwcG9ydCBmb3IgUFBQLW92ZXItTDJUUCBzb2NrZXQgZmFtaWx5LiBMMlRQIGlzIGEgcHJvdG9jb2xcXG4gMTc5OlxcdFxcdCAgdXNlZCBieSBJU1BzIGFuZCBlbnRlcnByaXNlcyB0byB0dW5uZWwgUFBQIHRyYWZmaWMgb3ZlciBVRFBcXG4gMTgwOlxcdFxcdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXFxuIDE4MTpcXHRpZiBUVFlcXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIFBQUF9BU1lOQ1xcbiAxODQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiXFxuIDE4NTpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuIDE4NjpcXHRcXHRoZWxwXFxuIDE4NzpcXHRcXHQgIFNheSBZIChvciBNKSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIFBQUCBvdmVyIHN0YW5kYXJkXFxuIDE4ODpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMsIHN1Y2ggYXMgQ09NMSBvciBDT00yIG9uIGEgUEMuICBJZiB5b3UgdXNlXFxuIDE4OTpcXHRcXHQgIGEgbW9kZW0gKG5vdCBhIHN5bmNocm9ub3VzIG9yIElTRE4gbW9kZW0pIHRvIGNvbnRhY3QgeW91ciBJU1AsIHlvdVxcbiAxOTA6XFx0XFx0ICBuZWVkIHRoaXMgb3B0aW9uLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIFBQUF9TWU5DX1RUWVxcbiAxOTc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG4gMTk4OlxcdFxcdGhlbHBcXG4gMTk5OlxcdFxcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcXG4gMjAwOlxcdFxcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1Ni43ODU3NDUzODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMTA1NjE5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBMMlRQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBMMlRQIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbmV0L2wydHAvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjZW50cmFsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIGFsbCB0aGluZ3MgTDJUUCwgZXNwZWNpYWxseSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvcmUgcHJvdG9jb2wgaXRzZWxmLiBJJ20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBwcmltYXJ5IGBMMlRQYCBzeW1ib2wsIHdoaWNoIGFjdHMgYXMgdGhlIG1hc3RlciBzd2l0Y2gsIGFuZCB0aGVuIEknbGwgZGVsdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJIGFudGljaXBhdGUgYFBQUE9MMlRQYCB3aWxsIGhhdmUgaXRzIG93biBkZWRpY2F0ZWQgY29uZmlndXJhdGlvbiBzZWN0aW9uLCBsaWtlbHkgZGVwZW5kZW50IG9uIGBMMlRQYCBiZWluZyBlbmFibGVkLCBnaXZlbiB0aGF0IFBQUCBvdmVyIEwyVFAgaXMgYnVpbHQgb24gdG9wIG9mIHRoZSB1bmRlcmx5aW5nIEwyVFAgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYXQgY29tcGlsZSB0aW1lIGFuZCBob3cgdG8gdHdlYWsgdGhlbS4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE3OjU4LjkwNjgwNjU5NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg4NDIyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvS2NvbmZpZy01LVxcbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcXG5uZXQvbDJ0cC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkxheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy0zNS1cXG5uZXQvbDJ0cC9LY29uZmlnOjM2OmNvbmZpZyBMMlRQX0RFQlVHRlNcXG5uZXQvbDJ0cC9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJMMlRQIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctNDgtXFxubmV0L2wydHAvS2NvbmZpZzo0OTpjb25maWcgTDJUUF9WM1xcbm5ldC9sMnRwL0tjb25maWctNTAtXFx0Ym9vbCBcXFwiTDJUUHYzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTY5LVxcbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcXG5uZXQvbDJ0cC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1xcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctODYtXFxubmV0L2wydHAvS2NvbmZpZzo4Nzpjb25maWcgTDJUUF9FVEhcXG5uZXQvbDJ0cC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxNzo1OC45OTU2NTg2MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwNDk3NTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgQVRNIENvbmZpZ3VyYXRpb24gZm9yIFBQUE9BVE0qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gRmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIEFUTSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSBmb3IgUFBQT0FUTS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBBVE0gbGF5ZXIgaXMgcHJvcGVybHkgc2V0IHVwIGJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBtb3Zpbmcgb24gdG8gdGhlIFBQUG9FIGFzcGVjdHMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBWUEkvVkNJIHZhbHVlcywgZW5jYXBzdWxhdGlvbiB0eXBlIChwcm9iYWJseSBBQUw1KSwgYW5kIGFueSByZWxldmFudCBzaGFwaW5nIG9yIHBvbGljaW5nIHBhcmFtZXRlcnMgZGVmaW5lZCBvbiB0aGUgQVRNIGludGVyZmFjZS4gQW55IG1pc2NvbmZpZ3VyYXRpb24gYXQgdGhpcyBmb3VuZGF0aW9uYWwgbGV2ZWwgd2lsbCBpbW1lZGlhdGVseSBicmVhayB0aGUgUFBQb0FUTSBjb25uZWN0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHZlcmlmeWluZyB0aGUgQVRNIHBsdW1iaW5nIGJlZm9yZSB0cnlpbmcgdG8gc2VuZCBkYXRhIG92ZXIgdGhlIHBpcGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgZXNwZWNpYWxseSBpbiBhIHRyb3VibGVzaG9vdGluZyBzY2VuYXJpbywgb3IgYmVmb3JlIG1ha2luZyBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTcyOCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE4OjAwLjcwMDYzODEyNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MzU0MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vS2NvbmZpZy01LVxcbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cXG5uZXQvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMjEtXFxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxuLS1cXG5uZXQvYXRtL0tjb25maWctMzAtXFxubmV0L2F0bS9LY29uZmlnOjMxOmNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxODowMC43ODIxNzk3OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY2NTM2MDIyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUFBQL0wyVFAgRHJpdmVyIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciBQUFAsIGFuZCBhc3NvY2lhdGVkIHByb3RvY29sczogUFBQLCBQUFBfQVNZTkMsIFBQUF9TWU5DX1RUWSwgUFBQT0UsIFBQVFAsIFBQUE9BVE0sIFBQUE9MMlRQLCBBVE0sIGFuZCBMMlRQLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgcGFydDogaWRlbnRpZnlpbmcgdGhlICpGb2N1c1N5bWJvbHMqLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuIEkndmUgZ290IGEgbGlzdCwgd2hpY2ggSSdsbCByZXZpZXcgYW5kIGludGVybmFsaXplLiBUaGlzIGluY2x1ZGVzIHNlbmQgZnVuY3Rpb25zIChgcHBwX2FzeW5jX3NlbmRgLCBgcHBwX3N5bmNfc2VuZGAsIGBwcHBvZV94bWl0YCwgYHBwdHBfeG1pdGAsIGBwcHBvYXRtX3NlbmRgLCBgcHBwb2wydHBfeG1pdGApLCBJT0NUTCBoYW5kbGVycyAoYHBwcF9hc3luY19pb2N0bGAsIGBwcHBfc3luY19pb2N0bGAsIGBwcHRwX3BwcF9pb2N0bGAsIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIGBwcHBfaW9jdGxgKSwgYW5kIGEgZmV3IGtleSBmdW5jdGlvbnMgd2l0aGluIGBwcHBfZ2VuZXJpYy5jYCBsaWtlIGBwcHBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgcHBwX3B1c2hgLCBgcHBwX21wX2V4cGxvZGVgLCBgX19wcHBfY2hhbm5lbF9wdXNoYCwgYW5kIGBwcHBfY2hhbm5lbF9icmlkZ2VfaW5wdXRgLCBhbG9uZyB3aXRoIHRoZSBgcHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgcHBwX2NoYW5uZWxfb3BzIGNhbGxiYWNrcyBub3cgcGFzcyB0aGUgcHJpdmF0ZSBwb2ludGVyIGRpcmVjdGx5IGFjcm9zcyB0aGUgcHBwIGdlbmVyaWMgYW5kIGFzc29jaWF0ZWQgZHJpdmVycy5cblxuTm93LCBhIGNydWNpYWwgc2FuaXR5IGNoZWNrOiBhcmUgdGhlc2Ugc3ltYm9scyAqYWN0dWFsbHkqIGV4cG9ydGVkPyBTaW5jZSB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZHJpdmVycywgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZW50cnkgcG9pbnRzIG9yIGRpcmVjdGx5IGludm9sdmVkIGluIHBhY2tldCBoYW5kbGluZy4gTWFueSBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyAoYG9wcy1cdTAwM2VzdGFydF94bWl0YCBldGMuKSwgc28gdGhleSBhcmUgKmRlZmluaXRlbHkqIHN5bWJvbGlzZWQuIEknbSBjb25maXJtaW5nIHRoYXQgdGhlc2Ugc3ltYm9scyB3aWxsIGJlIHByZXNlbnQgaW4gdm1saW51eC9tb2R1bGVzLCBhbmQgYXJlIG5vdCBqdXN0IHN0YXRpYywgaW5saW5lYWJsZSBmdW5jdGlvbnMuIFRoZSBmYWN0IHRoYXQgdGhlIGFkZHJlc3NlcyBvZiBtYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKnRha2VuKiBjb25maXJtcyB0aGlzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoaXMgbWVldHMgdGhlIGZ1enppbmcgY3JpdGVyaWEuIFRoZSBcIldvcnRoRnV6emluZ1wiIGZsYWcgc2hvdWxkIGJlIGB0cnVlYCwgXCJFbmFibGVDb25maWdzXCIgYWxyZWFkeSBjb25maXJtZWQgKFBQUCwgUFBQX0FTWU5DLCBQUFBfU1lOQ19UVFksIFBQUE9FLCBQUFRQLCBQUFBPQVRNLCBQUFBPTDJUUCwgQVRNLCBhbmQgTDJUUCksIGFuZCBcIkZvY3VzU3ltYm9sc1wiIGFyZSBhbGwgaW4gcGxhY2UuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGludm9sdmUgcmVmYWN0b3JpbmcgY2FsbGJhY2sgbWVjaGFuaXNtcywgd2hpY2ggYWxtb3N0IGFsd2F5cyBpbnRyb2R1Y2VzIG5ldyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgZnVuY3Rpb25zIHNlbGVjdGVkIGRlYWwgd2l0aCB0aGUgc3BlY2lmaWNzIGZvciBnZW5lcmljIHBwcCwgYXN5bmMvc3luYyB0dHksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgUFBQT0wyVFAuIEEgdmVyeSBmb2N1c2VkIHNldCBvZiBkcml2ZXJzIHdpdGggdGhpcyBjb2RlLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMTQsIk91dHB1dFRva2VucyI6MzQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjA3LjQzNTc4NTYxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODQ4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUF9BU1lOQ1wiLFxuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBPRVwiLFxuICAgIFwiUFBUUFwiLFxuICAgIFwiUFBQT0FUTVwiLFxuICAgIFwiUFBQT0wyVFBcIixcbiAgICBcIkFUTVwiLFxuICAgIFwiTDJUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9pb2N0bFwiLFxuICAgIFwicHBwX3B1c2hcIixcbiAgICBcInBwcF9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwicHBwX21wX2V4cGxvZGVcIixcbiAgICBcIl9fcHBwX2NoYW5uZWxfcHVzaFwiLFxuICAgIFwicHBwX2NoYW5uZWxfYnJpZGdlX2lucHV0XCIsXG4gICAgXCJwcHBfYXN5bmNfc2VuZFwiLFxuICAgIFwicHBwX2FzeW5jX2lvY3RsXCIsXG4gICAgXCJwcHBfc3luY19zZW5kXCIsXG4gICAgXCJwcHBfc3luY19pb2N0bFwiLFxuICAgIFwicHBwb2VfeG1pdFwiLFxuICAgIFwicHBwb2VfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwdHBfeG1pdFwiLFxuICAgIFwicHB0cF9wcHBfaW9jdGxcIixcbiAgICBcInBwcG9hdG1fc2VuZFwiLFxuICAgIFwicHBwb2F0bV9kZXZwcHBfaW9jdGxcIixcbiAgICBcInBwcG9sMnRwX3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBjYWxsYmFja3MgKHN0YXJ0X3htaXQsIGlvY3RsLCBmaWxsX2ZvcndhcmRfcGF0aCkgYWNyb3NzIHRoZSBjb3JlIFBQUCBnZW5lcmljIHN1YnN5c3RlbSBhbmQgc2V2ZXJhbCBjaGFubmVsIGRyaXZlcnMgKHBwcF9hc3luYywgcHBwX3N5bmN0dHksIHBwcG9lLCBwcHRwLCBwcHBvYXRtLCBsMnRwX3BwcCkgdG8gYWNjZXB0IHRoZSBjaGFubmVsJ3MgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJ1Y3QgcHBwX2NoYW5uZWwuIEFsbCBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldHdvcmtpbmcgc29ja2V0cywgdHR5IGxpbmUgZGlzY2lwbGluZXMsIGFuZCAvZGV2L3BwcCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBfQVNZTkNcIixcbiAgICBcIlBQUF9TWU5DX1RUWVwiLFxuICAgIFwiUFBQT0VcIixcbiAgICBcIlBQVFBcIixcbiAgICBcIlBQUE9BVE1cIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJBVE1cIixcbiAgICBcIkwyVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wdXNoXCIsXG4gICAgXCJwcHBfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcInBwcF9tcF9leHBsb2RlXCIsXG4gICAgXCJfX3BwcF9jaGFubmVsX3B1c2hcIixcbiAgICBcInBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dFwiLFxuICAgIFwicHBwX2FzeW5jX3NlbmRcIixcbiAgICBcInBwcF9hc3luY19pb2N0bFwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiLFxuICAgIFwicHBwX3N5bmNfaW9jdGxcIixcbiAgICBcInBwcG9lX3htaXRcIixcbiAgICBcInBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJwcHRwX3htaXRcIixcbiAgICBcInBwdHBfcHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvYXRtX3NlbmRcIixcbiAgICBcInBwcG9hdG1fZGV2cHBwX2lvY3RsXCIsXG4gICAgXCJwcHBvbDJ0cF94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgY2FsbGJhY2tzIChzdGFydF94bWl0LCBpb2N0bCwgZmlsbF9mb3J3YXJkX3BhdGgpIGFjcm9zcyB0aGUgY29yZSBQUFAgZ2VuZXJpYyBzdWJzeXN0ZW0gYW5kIHNldmVyYWwgY2hhbm5lbCBkcml2ZXJzIChwcHBfYXN5bmMsIHBwcF9zeW5jdHR5LCBwcHBvZSwgcHB0cCwgcHBwb2F0bSwgbDJ0cF9wcHApIHRvIGFjY2VwdCB0aGUgY2hhbm5lbCdzIHByaXZhdGUgZGF0YSBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RydWN0IHBwcF9jaGFubmVsLiBBbGwgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXR3b3JraW5nIHNvY2tldHMsIHR0eSBsaW5lIGRpc2NpcGxpbmVzLCBhbmQgL2Rldi9wcHAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxOTowNy41MDk2NDA0MTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxOTkwNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjM6MTk6MDcuNTEwMTIyMDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM5NDE1MDQzNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwncyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHNpZ25hdHVyZSBhbmQgYXJndW1lbnQgcmVmYWN0b3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIG9yIHBhZGRpbmcgZmllbGRzLCBub3IgZG9lcyBpdCBhbHRlciBkYXRhIGNvcHlpbmcgbG9naWMgdG8gdXNlcnNwYWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvaW50ZXIgb3IgdHlwZSBtaXN1c2UgaW50cm9kdWNlZCBieSBzdWNoIGEgcmVmYWN0b3Igd291bGQgbWFuaWZlc3QgYXMgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdHlwZSBjb25mdXNpb24sIG9yIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxOThmNzAzNzg5MzEzZTViODg1OTU5ZjJkNWM0MWZiMWJjOTdkNTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMzoxNzozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuaW5kZXggZWE3ZmU5NjA4ZmZkNi4uZTBiYTQ0OGYyOTdjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jXG5AQCAtOTEsMTMgKzkxLDEyIEBAIE1PRFVMRV9BTElBU19MRElTQyhOX1BQUCk7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgaW50IHBwcF9hc3luY19lbmNvZGUoc3RydWN0IGFzeW5jcHBwICphcCk7XG4tc3RhdGljIGludCBwcHBfYXN5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gc3RhdGljIGludCBwcHBfYXN5bmNfcHVzaChzdHJ1Y3QgYXN5bmNwcHAgKmFwKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfZmx1c2hfb3V0cHV0KHN0cnVjdCBhc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9hc3luY19pbnB1dChzdHJ1Y3QgYXN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsXG4gXHRcdFx0ICAgIGNvbnN0IHU4ICpmbGFncywgaW50IGNvdW50KTtcbi1zdGF0aWMgaW50IHBwcF9hc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhcmcpO1xuK3N0YXRpYyBpbnQgcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBzdGF0aWMgdm9pZCBwcHBfYXN5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIFxuIHN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG5AQCAtMzIxLDEwICszMjAsMTAgQEAgcHBwX2FzeW5jX2luaXQodm9pZClcbiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIHByb3ZpZGUgdGhlIFBQUCBjaGFubmVsIGludGVyZmFjZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX2FzeW5jX2lvY3RsKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbi1cdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4gXHR2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZztcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFx0aW50IF9fdXNlciAqcCA9IGFyZ3A7XG4gXHRpbnQgZXJyLCB2YWw7XG4gXHR1MzIgYWNjbVs4XTtcbkBAIC01NTAsOSArNTQ5LDkgQEAgcHBwX2FzeW5jX2VuY29kZShzdHJ1Y3QgYXN5bmNwcHAgKmFwKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX2FzeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3BwcF9hc3luY19zZW5kKHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGFzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBhc3luY3BwcCAqYXAgPSBwcml2YXRlO1xuIFxuIFx0cHBwX2FzeW5jX3B1c2goYXApO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbmluZGV4IDFhNjEwYTE4ODkzYmEuLjNiODNmZjhjZjU4OTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbkBAIC03OTAsNyArNzkwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdFx0ZXJyID0gLUVOT1RUWTtcbiBcdFx0XHRpZiAoY2hhbiBcdTAwMjZcdTAwMjYgY2hhbi1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpXG4tXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLCBjbWQsIGFyZyk7XG4rXHRcdFx0XHRlcnIgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2Vpb2N0bChjaGFuLVx1MDAzZXByaXZhdGUsIGNtZCwgYXJnKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWNoYW5fc2VtKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xNjAzLDcgKzE2MDMsNyBAQCBzdGF0aWMgaW50IHBwcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0aWYgKCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VmaWxsX2ZvcndhcmRfcGF0aClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIGNoYW4tXHUwMDNlb3BzLVx1MDAzZWZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCwgY2hhbik7XG4rXHRyZXR1cm4gY2hhbi1cdTAwM2VvcHMtXHUwMDNlZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoLCBjaGFuLVx1MDAzZXByaXZhdGUpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuQEAgLTE5MzIsNyArMTkzMiw3IEBAIHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyZXQgPSBjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIHNrYik7XG4rXHRcdHJldCA9IGNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQoY2hhbi1cdTAwM2Vwcml2YXRlLCBza2IpO1xuIFxuIG91dDpcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbkBAIC0yMTQyLDcgKzIxNDIsNyBAQCBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0LyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqL1xuIFx0XHRjaGFuID0gcGNoLVx1MDAzZWNoYW47XG4gXHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBjaC1cdTAwM2VmaWxlLnhxKSB8fFxuLVx0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4sIGZyYWcpKVxuK1x0XHRcdCFjaGFuLVx1MDAzZW9wcy1cdTAwM2VzdGFydF94bWl0KGNoYW4tXHUwMDNlcHJpdmF0ZSwgZnJhZykpXG4gXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cGNoLVx1MDAzZWZpbGUueHEsIGZyYWcpO1xuIFx0XHRwY2gtXHUwMDNlaGFkX2ZyYWcgPSAxO1xuIFx0XHRwICs9IGZsZW47XG5AQCAtMjE3NSw3ICsyMTc1LDcgQEAgc3RhdGljIHZvaWQgX19wcHBfY2hhbm5lbF9wdXNoKHN0cnVjdCBjaGFubmVsICpwY2gsIHN0cnVjdCBwcHAgKnBwcClcbiBcdGlmIChwY2gtXHUwMDNlY2hhbikge1xuIFx0XHR3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSkpIHtcbiBcdFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSk7XG4tXHRcdFx0aWYgKCFwY2gtXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2gtXHUwMDNlY2hhbiwgc2tiKSkge1xuK1x0XHRcdGlmICghcGNoLVx1MDAzZWNoYW4tXHUwMDNlb3BzLVx1MDAzZXN0YXJ0X3htaXQocGNoLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSkge1xuIFx0XHRcdFx0LyogcHV0IHRoZSBwYWNrZXQgYmFjayBhbmQgdHJ5IGFnYWluIGxhdGVyICovXG4gXHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZwY2gtXHUwMDNlZmlsZS54cSwgc2tiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIzMDAsNyArMjMwMCw3IEBAIHN0YXRpYyBib29sIHBwcF9jaGFubmVsX2JyaWRnZV9pbnB1dChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocGNoLVx1MDAzZWNoYW5fbmV0LCBwY2hiLVx1MDAzZWNoYW5fbmV0KSk7XG4tXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4sIHNrYikpXG4rXHRpZiAoIXBjaGItXHUwMDNlY2hhbi1cdTAwM2VvcHMtXHUwMDNlc3RhcnRfeG1pdChwY2hiLVx1MDAzZWNoYW4tXHUwMDNlcHJpdmF0ZSwgc2tiKSlcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gb3V0bDpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5pbmRleCBmODdkNDNmYWVlYWI1Li41NGQ4NDAyZTE4YzRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG5AQCAtODEsOSArODEsOCBAQCBzdHJ1Y3Qgc3luY3BwcCB7XG4gICogUHJvdG90eXBlcy5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1zdGF0aWMgaW50IHBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitzdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBfc3luY19pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7XG4gc3RhdGljIHZvaWQgcHBwX3N5bmNfcHJvY2VzcyhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpO1xuIHN0YXRpYyBpbnQgcHBwX3N5bmNfcHVzaChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuIHN0YXRpYyB2b2lkIHBwcF9zeW5jX2ZsdXNoX291dHB1dChzdHJ1Y3Qgc3luY3BwcCAqYXApO1xuQEAgLTMxMiw5ICszMTEsOSBAQCBwcHBfc3luY19pbml0KHZvaWQpXG4gICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBwcm92aWRlIHRoZSBQUFAgY2hhbm5lbCBpbnRlcmZhY2UuXG4gICovXG4gc3RhdGljIGludFxuLXBwcF9zeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4rcHBwX3N5bmNfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHN5bmNwcHAgKmFwID0gcHJpdmF0ZTtcbiBcdGludCBlcnIsIHZhbDtcbiBcdHUzMiBhY2NtWzhdO1xuIFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG5AQCAtNDkxLDkgKzQ5MCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiAgKi9cbiBzdGF0aWMgaW50XG4tcHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rcHBwX3N5bmNfc2VuZCh2b2lkICpwcml2YXRlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBzeW5jcHBwICphcCA9IGNoYW4tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBzeW5jcHBwICphcCA9IHByaXZhdGU7XG4gXG4gXHRwcHBfc3luY19wdXNoKGFwKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5pbmRleCBiZjc0MTRiNDZhMjYwLi43NTg0NTM1MDM1MjU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jXG5AQCAtODQxLDkgKzg0MSw5IEBAIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuICAqIHNlbmRzIFBQUCBmcmFtZSBvdmVyIFBQUG9FIHNvY2tldFxuICAqXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLXN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvZV94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwby1cdTAwM2VwcHBvZV9kZXY7XG4gXHRzdHJ1Y3QgcHBwb2VfaGRyICpwaDtcbkBAIC04OTUsOSArODk1LDkgQEAgc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgaW50IHBwcG9lX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuK1x0XHRcdFx0ICAgdm9pZCAqcHJpdmF0ZSlcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvLVx1MDAzZXBwcG9lX2RldjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuY1xuaW5kZXggYTc5N2EwNjA2ZjZiNC4uOGY3MTkwZDcwNjdlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmNcbkBAIC0xNDYsOSArMTQ2LDkgQEAgc3RhdGljIHN0cnVjdCBydGFibGUgKnBwdHBfcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBwcHBveF9zb2NrICpwbyxcbiBcdHJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHRwX3htaXQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBwcml2YXRlO1xuIFx0c3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spO1xuIFx0c3RydWN0IHBwdHBfb3B0ICpvcHQgPSBcdTAwMjZwby1cdTAwM2Vwcm90by5wcHRwO1xuQEAgLTU3MywxMCArNTczLDkgQEAgc3RhdGljIGludCBwcHRwX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuKVxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBwdHBfcHBwX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCxcbi1cdHVuc2lnbmVkIGxvbmcgYXJnKVxuK3N0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdHN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBwcG94X3NrKHNrKTtcbiBcdHN0cnVjdCBwcHRwX29wdCAqb3B0ID0gXHUwMDI2cG8tXHUwMDNlcHJvdG8ucHB0cDtcbiBcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaCBiL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuaW5kZXggMmY2M2U5YTZjYzg4OS4uZDljZmI4ZWYwZmZhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oXG5AQCAtMjcsMTIgKzI3LDEyIEBAIHN0cnVjdCBwcHBfY2hhbm5lbDtcbiBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHtcbiBcdC8qIFNlbmQgYSBwYWNrZXQgKG9yIG11bHRpbGluayBmcmFnbWVudCkgb24gdGhpcyBjaGFubmVsLlxuIFx0ICAgUmV0dXJucyAxIGlmIGl0IHdhcyBhY2NlcHRlZCwgMCBpZiBub3QuICovXG4tXHRpbnRcdCgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopO1xuK1x0aW50XHQoKnN0YXJ0X3htaXQpKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gXHQvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi9cbi1cdGludFx0KCppb2N0bCkoc3RydWN0IHBwcF9jaGFubmVsICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7XG4rXHRpbnRcdCgqaW9jdGwpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTtcbiBcdGludFx0KCpmaWxsX2ZvcndhcmRfcGF0aCkoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7XG4rXHRcdFx0XHQgICAgIHZvaWQgKik7XG4gfTtcbiBcbiBzdHJ1Y3QgcHBwX2NoYW5uZWwge1xuZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmNcbmluZGV4IDZkYTUyZDEyZGY2OGUuLjkxMzMyNGY5Njg1ZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL3BwcG9hdG0uY1xuKysrIGIvbmV0L2F0bS9wcHBvYXRtLmNcbkBAIC05MSwxMSArOTEsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBvYXRtX3ZjYyAqYXRtdmNjX3RvX3B2Y2MoY29uc3Qgc3RydWN0IGF0bV92Y2MgKmF0bXZjYylcbiBcdHJldHVybiAoc3RydWN0IHBwcG9hdG1fdmNjICopIChhdG12Y2MtXHUwMDNldXNlcl9iYWNrKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2F0bV92Y2MgKmNoYW5fdG9fcHZjYyhjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4te1xuLVx0cmV0dXJuIChzdHJ1Y3QgcHBwb2F0bV92Y2MgKikgKGNoYW4tXHUwMDNlcHJpdmF0ZSk7XG4tfVxuLVxuIC8qXG4gICogV2UgY2FuJ3QgZG8gdGhpcyBkaXJlY3RseSBmcm9tIG91ciBfcG9wIGhhbmRsZXIsIHNpbmNlIHRoZSBwcHAgY29kZVxuICAqIGRvZXNuJ3Qgd2FudCB0byBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGRvIGl0IGZyb21cbkBAIC0yODYsOSArMjgxLDkgQEAgc3RhdGljIGludCBwcHBvYXRtX21heV9zZW5kKHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYywgaW50IHNpemUpXG4gICogYXMgc3VjY2VzcywganVzdCB0byBiZSBjbGVhciB3aGF0IHdlJ3JlIHJlYWxseSBkb2luZy5cbiAgKi9cbiAjZGVmaW5lIERST1BfUEFDS0VUIDFcbi1zdGF0aWMgaW50IHBwcG9hdG1fc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvYXRtX3NlbmQodm9pZCAqcHJpdmF0ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7XG4rXHRzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBwcml2YXRlO1xuIFx0c3RydWN0IGF0bV92Y2MgKnZjYztcbiBcdGludCByZXQ7XG4gXG5AQCAtMzY2LDE2ICszNjEsMTYgQEAgc3RhdGljIGludCBwcHBvYXRtX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiAvKiBUaGlzIGhhbmRsZXMgaW9jdGxzIHNlbnQgdG8gdGhlIC9kZXYvcHBwIGludGVyZmFjZSAqL1xuLXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLFxuLVx0dW5zaWduZWQgbG9uZyBhcmcpXG4rc3RhdGljIGludCBwcHBvYXRtX2RldnBwcF9pb2N0bCh2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgY21kLFxuK1x0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuK1x0c3RydWN0IHBwcG9hdG1fdmNjICpwdmNjID0gcHJpdmF0ZTtcbitcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFBQUElPQ0dGTEFHUzpcbi1cdFx0cmV0dXJuIHB1dF91c2VyKGNoYW5fdG9fcHZjYyhjaGFuKS1cdTAwM2VmbGFncywgKGludCBfX3VzZXIgKikgYXJnKVxuLVx0XHQgICAgPyAtRUZBVUxUIDogMDtcbitcdFx0cmV0dXJuIHB1dF91c2VyKHB2Y2MtXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSA/IC1FRkFVTFQgOiAwO1xuIFx0Y2FzZSBQUFBJT0NTRkxBR1M6XG4tXHRcdHJldHVybiBnZXRfdXNlcihjaGFuX3RvX3B2Y2MoY2hhbiktXHUwMDNlZmxhZ3MsIChpbnQgX191c2VyICopIGFyZylcbi1cdFx0ICAgID8gLUVGQVVMVCA6IDA7XG4rXHRcdHJldHVybiBnZXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykgPyAtRUZBVUxUIDogMDtcbiBcdH1cbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZWY4ZmRmYWYwNTFkNC4uOWU5MzJmZGRhMzg3MiAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbisrKyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24ge1xuIFx0c3RydWN0IHNvY2tcdFx0Kl9fc2s7XHRcdC8qIENvcHkgb2YgLnNrLCBmb3IgY2xlYW51cCAqL1xuIH07XG4gXG4tc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xuIFx0LnN0YXJ0X3htaXQgPSAgcHBwb2wydHBfeG1pdCxcbkBAIC0zMjcsMTEgKzMyNywxMSBAQCBzdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbiAgKiB0aGUgc2tiIGl0IHN1cHBsaWVkLCBub3Qgb3VyIGNsb25lZCBza2IuIFNvIHdlIHRha2UgY2FyZSB0byBhbHdheXNcbiAgKiBsZWF2ZSB0aGUgb3JpZ2luYWwgc2tiIHVuZnJlZWQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLlxuICAqL1xuLXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbjtcbiBcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gcHJpdmF0ZTtcbiBcdGludCB1aGxlbiwgaGVhZHJvb207XG4gXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8ICEoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDI2IFBQUE9YX0NPTk5FQ1RFRCkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMzoxOTowNy41MTAxMjMxNzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg3MzkzMzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBDaGFubmVsIE9wcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIEtNU0FOIG5lZWRzIHRvIGJlIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgcHBwX2NoYW5uZWxfb3BzYCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCB0aGUgc2lnbmF0dXJlcyBmb3IgYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgYmVpbmcgdHdlYWtlZC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBlbnRpcmUgYHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbmAgZGlyZWN0bHksIHRoZXkncmUgbm93IGV4cGVjdGluZyBhIGB2b2lkICpwcml2YXRlYCBhcmd1bWVudCAob3IganVzdCBgdm9pZCAqYCkuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgcGF0Y2ggYXV0aG9ycyBhcmUgY2xldmVybHkgcmVwbGFjaW5nIHRoZSBkaXJlY3QgdXNlIG9mIGBjaGFuYCB3aXRoIGBjaGFuLVx1MDAzZXByaXZhdGVgIGluIHRoZSBleGlzdGluZyBkcml2ZXJzLiBUaGUgaW1wbGVtZW50YXRpb25zIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIGxpa2UgaW4gYHBwcF9hc3luYy5jYCwgYHBwcF9zeW5jdHR5LmNgLCBgcHBwb2UuY2AsIGFuZCBldmVuIHRoZSBBVE0gYW5kIEwyVFAgUFBQIG1vZHVsZXMsIGFyZSBhbGwgdXBkYXRlZCB0byBjYXN0IHRoZSBgdm9pZCAqcHJpdmF0ZWAgdG8gdGhlIGFwcHJvcHJpYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUsIHN1Y2ggYXMgYHN0cnVjdCBhc3luY3BwcCAqYXBgLCBgc3RydWN0IHNvY2sgKnNrYCwgb3IgYHN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjY2AuIEl0J3MgYSBjbGVhbiByZWZhY3RvcmluZywgc3dhcHBpbmcgZnJvbSB0aGUgZGlyZWN0IHN0cnVjdHVyZSBhY2Nlc3MgdG8gdXNpbmcgYSBwcml2YXRlIGZpZWxkLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcHJhY3RpY2UgdG8gZW5jYXBzdWxhdGUgdGhlIGRhdGEuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzOiBoYXMgdGhpcyBiZWVuIGRvbmUgY29tcHJlaGVuc2l2ZWx5PyBIYXZlIHdlIG1pc3NlZCBhbnkgb3RoZXIgY2hhbm5lbCBvcGVyYXRpb25zIGluIHRoZSBrZXJuZWwgdHJlZSB0aGF0IHRoaXMgY2hhbmdlIGFmZmVjdHM/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGJ1Z3MgbHVya2luZyB3aGVyZSB0aGUgdHlwZSBjYXN0aW5nIGlzbid0IHF1aXRlIHJpZ2h0LCBvciBwZXJoYXBzIHNvbWV3aGVyZSB0aGUgYHByaXZhdGVgIGZpZWxkIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjY2Vzc2VkPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHRob3JvdWdoIHNjYW4gb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgc2FmZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBmaW5kIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjE0LjM4NDA2MDcxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTg0Nzg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0xMDI9c3RhdGljIHZvaWQgYXN5bmNfbGNwX3BlZWsoc3RydWN0IGFzeW5jcHBwICphcCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYy0xMDQtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjEwNTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBhc3luY19vcHMgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTEwNi1cXHQuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9ODk9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05MS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05My1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OD1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmM6ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYz04OTY9c3RhdGljIGludCBwcHBvZV9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMtOTE4LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBvZS5jOjkxOTpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwb2UuYy05MjAtXFx0LnN0YXJ0X3htaXQgPSBwcHBvZV94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYz00OT1zdGF0aWMgc3RydWN0IHByb3RvIHBwdHBfc2tfcHJvdG8gX19yZWFkX21vc3RseTtcXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwdHBfY2hhbl9vcHM7XFxuZHJpdmVycy9uZXQvcHBwL3BwdHAuYy01MS1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHRwX29wcztcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmM9NTc2PXN0YXRpYyBpbnQgcHB0cF9wcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jLTYwNS1cXG5kcml2ZXJzL25ldC9wcHAvcHB0cC5jOjYwNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHRwX2NoYW5fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3BwcC9wcHRwLmMtNjA3LVxcdC5zdGFydF94bWl0ID0gcHB0cF94bWl0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oPTI1PXN0cnVjdCBwcHBfY2hhbm5lbDtcXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtMjYtXFxuaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oOjI3OnN0cnVjdCBwcHBfY2hhbm5lbF9vcHMge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0yOC1cXHQvKiBTZW5kIGEgcGFja2V0IChvciBtdWx0aWxpbmsgZnJhZ21lbnQpIG9uIHRoaXMgY2hhbm5lbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaD0zOD1zdHJ1Y3QgcHBwX2NoYW5uZWwge1xcbmluY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaC0zOS1cXHR2b2lkXFx0XFx0KnByaXZhdGU7XFx0LyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmg6NDA6XFx0Y29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIGZvciB0aGlzIGNoYW5uZWwgKi9cXG5pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgtNDEtXFx0aW50XFx0XFx0bXR1O1xcdFxcdC8qIG1heCB0cmFuc21pdCBwYWNrZXQgc2l6ZSAqL1xcbi0tXFxubmV0L2F0bS9wcHBvYXRtLmM9MzY0PXN0YXRpYyBpbnQgcHBwb2F0bV9kZXZwcHBfaW9jdGwodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9hdG0vcHBwb2F0bS5jLTM3Ny1cXG5uZXQvYXRtL3BwcG9hdG0uYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2F0bV9vcHMgPSB7XFxubmV0L2F0bS9wcHBvYXRtLmMtMzc5LVxcdC5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjU9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHZvaWQgKnByaXZhdGUsIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI2LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI4LVxcdC5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjE2LjEyMzkxNTAyNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI3NjkwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCdzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzYCwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGNhbGxiYWNrIHNpZ25hdHVyZXMgZnJvbSBgKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCAuLi4pYCB0byBgKHZvaWQgKnByaXZhdGUsIC4uLilgIHdoZXJlIHRoZSBjYWxsZXIgbm93IGV4cGxpY2l0bHkgcGFzc2VzIGBjaGFuLVx1MDAzZXByaXZhdGVgLiBNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBvciBhbHRlcnMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLlxuXG5JJ20gbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBrZXJuZWwgc3RydWN0dXJlcyBsZWFraW5nIHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBkdWUgdG8gYm91bmRzIGNoZWNrcyBvciBpbmNvcnJlY3QgbGVuZ3RoIGhhbmRsaW5nLlxuXG5JIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgbW9kaWZpZWQgaW9jdGwgZnVuY3Rpb25zLiBJIHNlZSBgcHBwX2FzeW5jX2lvY3RsYCwgYHBwcF9zeW5jX2lvY3RsYCwgYHBwdHBfcHBwX2lvY3RsYCwgYW5kIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgYHZvaWQgKnByaXZhdGVgIGNoYW5nZS4gSSdtIGZvY3VzaW5nIG9uIGhvdyBgcHJpdmF0ZWAgaXMgdXNlZC4gRm9yIGV4YW1wbGUsIGluIGBwcHBvYXRtX2RldnBwcF9pb2N0bGAsIEkgc2VlIGBwdXRfdXNlcihwdmNjLVx1MDAzZWZsYWdzLCAoaW50IF9fdXNlciAqKWFyZylgLiBIb3dldmVyLCB0aGlzIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgY29kZSB3aGVyZSB0aGUgYHB2Y2NgIHBvaW50ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBmaWVsZCwgc28gbm8gY2hhbmdlIGluIGhvdyB0aGF0IGlzIGJlaW5nIGhhbmRsZWQuIEknbSBjYXJlZnVsbHkgY2hlY2tpbmcgdGhlIHBvdGVudGlhbCBmb3IgY2hhbmdlcyBpbiBzZW1hbnRpY3MsIGFuZCB2ZXJpZnlpbmcgaG93IHRoZSBkYXRhIHRoYXQgZ2V0cyByZXR1cm5lZCBmcm9tIGFueSBvZiB0aGVzZSBpb2N0bHMgaXMgc2V0LlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGVzZSBpb2N0bCBmdW5jdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbmQgdGhlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gSXQgaXMgYSBzdHJhaWdodCByZWZhY3RvciB0aGF0IGNoYW5nZXMgdGhlIGFyZ3VtZW50cywgbm90IHRoZSBkYXRhIHRoZXkgcG9pbnQgdG8sIHNvIG5vIGlzc3VlcyB0aGVyZS5cblxuVGhpcyBsb29rcyBsaWtlIGEgcHVyZSByZWZhY3RvcmluZywgcHJpbWFyaWx5IGFyb3VuZCBjaGFuZ2luZyB0aGUgY2FsbCBzaWduYXR1cmVzIGFuZCBob3cgd2UgcGFzcyB0aGUgY29udGV4dCwgbW92aW5nIGZyb20gaW1wbGljaXRseSBwYXNzaW5nIGEgY2hhbm5lbCB0byBhbiBleHBsaWNpdCBwcml2YXRlIGNvbnRleHQuIFRoZSBvbmx5IHJlYWwgdnVsbmVyYWJpbGl0eSBJIGZvcmVzZWUgaGVyZSB3b3VsZCBiZSBhIHR5cGUgbWlzbWF0Y2ggb3IgYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSDigJMgd2hpY2ggc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBjYXVzZSBhIG1vcmUgZ2VuZXJhbCBmYXVsdC5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBjb2RlIHRoYXQgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTm93LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBteSB3b3JrOlxuXG4tICAgYE5lZWRzS01TQU46IGZhbHNlYFxuLSAgIGBLTVNBTlJlYXNvbmluZzogRGV0YWlsZWQgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5gXG5cbkxldCdzIGRvIHRoZSB0b29sIGNhbGwgbm93LCB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTEsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIzOjE5OjIxLjQ1MTYwODcxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsX29wc2AgY2FsbGJhY2sgaW50ZXJmYWNlIChgc3RhcnRfeG1pdGAsIGBpb2N0bGAsIGFuZCBgZmlsbF9mb3J3YXJkX3BhdGhgKSBhY3Jvc3MgUFBQIGNoYW5uZWwgZHJpdmVycyAoUFBQIGFzeW5jLCBzeW5jIFRUWSwgUFBQb0UsIFBQVFAsIFBQUG9BVE0sIGFuZCBMMlRQIFBQUCkgdG8gcGFzcyB0aGUgY2hhbm5lbCdzIGBwcml2YXRlYCBwb2ludGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhlIGBzdHJ1Y3QgcHBwX2NoYW5uZWxgIHBvaW50ZXIuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgc2lnbmF0dXJlIGFuZCBhcmd1bWVudCByZWZhY3Rvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYnVmZmVycywgb3IgcGFkZGluZyBmaWVsZHMsIG5vciBkb2VzIGl0IGFsdGVyIGRhdGEgY29weWluZyBsb2dpYyB0byB1c2Vyc3BhY2Ugb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG9pbnRlciBvciB0eXBlIG1pc3VzZSBpbnRyb2R1Y2VkIGJ5IHN1Y2ggYSByZWZhY3RvciB3b3VsZCBtYW5pZmVzdCBhcyBpbnZhbGlkIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB0eXBlIGNvbmZ1c2lvbiwgb3IgbWVtb3J5IGFjY2VzcyBmYXVsdHMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYHN0cnVjdCBwcHBfY2hhbm5lbF9vcHNgIGNhbGxiYWNrIGludGVyZmFjZSAoYHN0YXJ0X3htaXRgLCBgaW9jdGxgLCBhbmQgYGZpbGxfZm9yd2FyZF9wYXRoYCkgYWNyb3NzIFBQUCBjaGFubmVsIGRyaXZlcnMgKFBQUCBhc3luYywgc3luYyBUVFksIFBQUG9FLCBQUFRQLCBQUFBvQVRNLCBhbmQgTDJUUCBQUFApIHRvIHBhc3MgdGhlIGNoYW5uZWwncyBgcHJpdmF0ZWAgcG9pbnRlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBgc3RydWN0IHBwcF9jaGFubmVsYCBwb2ludGVyLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIHNpZ25hdHVyZSBhbmQgYXJndW1lbnQgcmVmYWN0b3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGJ1ZmZlcnMsIG9yIHBhZGRpbmcgZmllbGRzLCBub3IgZG9lcyBpdCBhbHRlciBkYXRhIGNvcHlpbmcgbG9naWMgdG8gdXNlcnNwYWNlIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvaW50ZXIgb3IgdHlwZSBtaXN1c2UgaW50cm9kdWNlZCBieSBzdWNoIGEgcmVmYWN0b3Igd291bGQgbWFuaWZlc3QgYXMgaW52YWxpZCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdHlwZSBjb25mdXNpb24sIG9yIG1lbW9yeSBhY2Nlc3MgZmF1bHRzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[1] Phase: Succeeded StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-06 23:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-06 23:19:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2] Phase: Succeeded StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-06 23:19:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 23:19:33 +0000 UTC FinishedAt: 2026-09-06 23:19:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowbv4l6/series-workflowbv4l6-convert-artifact-1902852527/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 23:19:43 +0000 UTC FinishedAt: 2026-09-06 23:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 23:19:43 +0000 UTC FinishedAt: 2026-09-06 23:38:50 +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:*f60c57bb-77cd-4c36-8c3b-a3a03d2281e3,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-workflowbv4l6/series-workflowbv4l6-convert-artifact-1902852527/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": "788fd08f-efec-49a8-b85d-7b45f58e62e8", "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-workflowbv4l6/series-workflowbv4l6-build-action-328777589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 23:19:43 +0000 UTC FinishedAt: 2026-09-06 23:38:40 +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:*f60c57bb-77cd-4c36-8c3b-a3a03d2281e3,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-workflowbv4l6/series-workflowbv4l6-convert-artifact-1902852527/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": "788fd08f-efec-49a8-b85d-7b45f58e62e8", "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-workflowbv4l6/series-workflowbv4l6-build-action-328777589/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 23:38:50 +0000 UTC FinishedAt: 2026-09-06 23:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 23:38:50 +0000 UTC FinishedAt: 2026-09-06 23:38:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 23:38:50 +0000 UTC FinishedAt: 2026-09-06 23:39:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 23:38:50 +0000 UTC FinishedAt: 2026-09-06 23:38:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowbv4l6/series-workflowbv4l6-convert-artifact-2844045822/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 23:39:00 +0000 UTC FinishedAt: 2026-09-06 23:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 23:39:00 +0000 UTC FinishedAt: 2026-09-06 23:40:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*788fd08f-efec-49a8-b85d-7b45f58e62e8,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-workflowbv4l6/series-workflowbv4l6-build-action-328777589/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-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 23:41:03 +0000 UTC FinishedAt: 2026-09-06 23:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 23:41:03 +0000 UTC FinishedAt: 2026-09-06 23:41:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 23:41:03 +0000 UTC FinishedAt: 2026-09-06 23:57:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 23:41:03 +0000 UTC FinishedAt: 2026-09-06 23:57:03 +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:*f60c57bb-77cd-4c36-8c3b-a3a03d2281e3,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-workflowbv4l6/series-workflowbv4l6-convert-artifact-2844045822/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": "6839baf5-0e0e-48c2-ae52-225f8db80f2f", "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-workflowbv4l6/series-workflowbv4l6-build-action-1643871826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 23:41:03 +0000 UTC FinishedAt: 2026-09-06 23:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f60c57bb-77cd-4c36-8c3b-a3a03d2281e3,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-workflowbv4l6/series-workflowbv4l6-convert-artifact-2844045822/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": "6839baf5-0e0e-48c2-ae52-225f8db80f2f", "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-workflowbv4l6/series-workflowbv4l6-build-action-1643871826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 23:57:03 +0000 UTC FinishedAt: 2026-09-06 23:57:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 23:57:03 +0000 UTC FinishedAt: 2026-09-06 23:57:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 23:57:03 +0000 UTC FinishedAt: 2026-09-06 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 23:57:03 +0000 UTC FinishedAt: 2026-09-06 23:58:47 +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:*6839baf5-0e0e-48c2-ae52-225f8db80f2f,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-workflowbv4l6/series-workflowbv4l6-build-action-1643871826/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-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +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":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"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:*788fd08f-efec-49a8-b85d-7b45f58e62e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6839baf5-0e0e-48c2-ae52-225f8db80f2f,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-workflowbv4l6/series-workflowbv4l6-build-action-328777589/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-workflowbv4l6/series-workflowbv4l6-build-action-1643871826/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-06 23:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-06 23:59:02 +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":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"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-workflowbv4l6/series-workflowbv4l6-convert-artifact-3087864579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-06 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-06 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 23:58:57 +0000 UTC FinishedAt: 2026-09-06 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 23:59:07 +0000 UTC FinishedAt: 2026-09-07 03:05:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbv4l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_ioctl","ppp_push","ppp_fill_forward_path","ppp_mp_explode","__ppp_channel_push","ppp_channel_bridge_input","ppp_async_send","ppp_async_ioctl","ppp_sync_send","ppp_sync_ioctl","pppoe_xmit","pppoe_fill_forward_path","pptp_xmit","pptp_ppp_ioctl","pppoatm_send","pppoatm_devppp_ioctl","pppol2tp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP","PPP_ASYNC","PPP_SYNC_TTY","PPPOE","PPTP","PPPOATM","PPPOL2TP","ATM","L2TP"],"series_id":"5e6bdad1-6c19-4400-9962-7e18b9752549","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 23:59:07 +0000 UTC FinishedAt: 2026-09-07 03:05:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*788fd08f-efec-49a8-b85d-7b45f58e62e8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6839baf5-0e0e-48c2-ae52-225f8db80f2f,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-workflowbv4l6/series-workflowbv4l6-build-action-328777589/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-workflowbv4l6/series-workflowbv4l6-build-action-1643871826/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-workflowbv4l6/series-workflowbv4l6-convert-artifact-3087864579/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,}